Merge "Import translations. DO NOT MERGE" into androidx-master-dev
diff --git a/OWNERS b/OWNERS
index c06e502..a200dc0 100644
--- a/OWNERS
+++ b/OWNERS
@@ -13,3 +13,4 @@
 sergeyv@google.com
 sumir@google.com
 yboyar@google.com
+obenabde@google.com
diff --git a/animation/integration-tests/testapp/src/androidTest/java/androidx/animation/ObjectAnimatorTest.java b/animation/integration-tests/testapp/src/androidTest/java/androidx/animation/ObjectAnimatorTest.java
index 5314b6c..3af36d9 100644
--- a/animation/integration-tests/testapp/src/androidTest/java/androidx/animation/ObjectAnimatorTest.java
+++ b/animation/integration-tests/testapp/src/androidTest/java/androidx/animation/ObjectAnimatorTest.java
@@ -23,6 +23,7 @@
 import android.graphics.Color;
 import android.graphics.Path;
 import android.graphics.PointF;
+import android.util.Property;
 
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.MediumTest;
@@ -85,6 +86,23 @@
         }
     }
 
+    class ColorProperty extends Property<AnimObject, Integer> {
+        ColorProperty() {
+            super(Integer.class, "");
+        }
+
+        @Override
+        public void set(AnimObject obj, Integer val) {
+            obj.setColor(val);
+        }
+
+        @Override
+        public Integer get(AnimObject obj) {
+            return null;
+        }
+
+    }
+
     /**
      * Tests that an object animator finishes within the duration defined by setDuration.
      */
@@ -181,11 +199,11 @@
     @Test
     public void testOfObject() {
         AnimObject object = new AnimObject();
-        String property = "color";
+        Property<AnimObject, Integer> property = new ColorProperty();
         int startColor = 0xFFFF8080;
         int endColor = 0xFF8080FF;
 
-        Object[] values = {new Integer(startColor), new Integer(endColor)};
+        Integer[] values = {new Integer(startColor), new Integer(endColor)};
         ArgbEvaluator evaluator = new ArgbEvaluator();
         final ObjectAnimator colorAnimator = ObjectAnimator.ofObject(object, property,
                 evaluator, values);
@@ -243,7 +261,7 @@
     @Test
     public void testOfArgb() {
         AnimObject object = new AnimObject();
-        String property = "color";
+        Property<AnimObject, Integer> property = new ColorProperty();
         int start = 0xffff0000;
         int end = 0xff0000ff;
 
diff --git a/appcompat/api/1.0.0.txt b/appcompat/api/1.0.0.txt
index f4ce206..6993caa 100644
--- a/appcompat/api/1.0.0.txt
+++ b/appcompat/api/1.0.0.txt
@@ -1,38 +1,39 @@
+// Signature format: 2.0
 package androidx.appcompat.app {
 
   public abstract class ActionBar {
     ctor public ActionBar();
-    method public abstract void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener);
-    method public abstract deprecated void addTab(androidx.appcompat.app.ActionBar.Tab);
-    method public abstract deprecated void addTab(androidx.appcompat.app.ActionBar.Tab, boolean);
-    method public abstract deprecated void addTab(androidx.appcompat.app.ActionBar.Tab, int);
-    method public abstract deprecated void addTab(androidx.appcompat.app.ActionBar.Tab, int, boolean);
-    method public abstract android.view.View getCustomView();
+    method public abstract void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+    method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!);
+    method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+    method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
+    method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
+    method public abstract android.view.View! getCustomView();
     method public abstract int getDisplayOptions();
     method public float getElevation();
     method public abstract int getHeight();
     method public int getHideOffset();
-    method public abstract deprecated int getNavigationItemCount();
-    method public abstract deprecated int getNavigationMode();
-    method public abstract deprecated int getSelectedNavigationIndex();
-    method public abstract deprecated androidx.appcompat.app.ActionBar.Tab getSelectedTab();
-    method public abstract java.lang.CharSequence getSubtitle();
-    method public abstract deprecated androidx.appcompat.app.ActionBar.Tab getTabAt(int);
-    method public abstract deprecated int getTabCount();
-    method public android.content.Context getThemedContext();
-    method public abstract java.lang.CharSequence getTitle();
+    method @Deprecated public abstract int getNavigationItemCount();
+    method @Deprecated public abstract int getNavigationMode();
+    method @Deprecated public abstract int getSelectedNavigationIndex();
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab? getSelectedTab();
+    method public abstract CharSequence? getSubtitle();
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! getTabAt(int);
+    method @Deprecated public abstract int getTabCount();
+    method public android.content.Context! getThemedContext();
+    method public abstract CharSequence? getTitle();
     method public abstract void hide();
     method public boolean isHideOnContentScrollEnabled();
     method public abstract boolean isShowing();
-    method public abstract deprecated androidx.appcompat.app.ActionBar.Tab newTab();
-    method public abstract deprecated void removeAllTabs();
-    method public abstract void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener);
-    method public abstract deprecated void removeTab(androidx.appcompat.app.ActionBar.Tab);
-    method public abstract deprecated void removeTabAt(int);
-    method public abstract deprecated void selectTab(androidx.appcompat.app.ActionBar.Tab);
-    method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public abstract void setCustomView(android.view.View);
-    method public abstract void setCustomView(android.view.View, androidx.appcompat.app.ActionBar.LayoutParams);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! newTab();
+    method @Deprecated public abstract void removeAllTabs();
+    method public abstract void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+    method @Deprecated public abstract void removeTab(androidx.appcompat.app.ActionBar.Tab!);
+    method @Deprecated public abstract void removeTabAt(int);
+    method @Deprecated public abstract void selectTab(androidx.appcompat.app.ActionBar.Tab!);
+    method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public abstract void setCustomView(android.view.View!);
+    method public abstract void setCustomView(android.view.View!, androidx.appcompat.app.ActionBar.LayoutParams!);
     method public abstract void setCustomView(int);
     method public abstract void setDisplayHomeAsUpEnabled(boolean);
     method public abstract void setDisplayOptions(int);
@@ -44,245 +45,245 @@
     method public void setElevation(float);
     method public void setHideOffset(int);
     method public void setHideOnContentScrollEnabled(boolean);
-    method public void setHomeActionContentDescription(java.lang.CharSequence);
-    method public void setHomeActionContentDescription(int);
-    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
-    method public void setHomeAsUpIndicator(int);
+    method public void setHomeActionContentDescription(CharSequence?);
+    method public void setHomeActionContentDescription(@StringRes int);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
+    method public void setHomeAsUpIndicator(@DrawableRes int);
     method public void setHomeButtonEnabled(boolean);
-    method public abstract void setIcon(int);
-    method public abstract void setIcon(android.graphics.drawable.Drawable);
-    method public abstract deprecated void setListNavigationCallbacks(android.widget.SpinnerAdapter, androidx.appcompat.app.ActionBar.OnNavigationListener);
-    method public abstract void setLogo(int);
-    method public abstract void setLogo(android.graphics.drawable.Drawable);
-    method public abstract deprecated void setNavigationMode(int);
-    method public abstract deprecated void setSelectedNavigationItem(int);
-    method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public abstract void setSubtitle(java.lang.CharSequence);
+    method public abstract void setIcon(@DrawableRes int);
+    method public abstract void setIcon(android.graphics.drawable.Drawable!);
+    method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
+    method public abstract void setLogo(@DrawableRes int);
+    method public abstract void setLogo(android.graphics.drawable.Drawable!);
+    method @Deprecated public abstract void setNavigationMode(int);
+    method @Deprecated public abstract void setSelectedNavigationItem(int);
+    method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method public abstract void setSubtitle(CharSequence!);
     method public abstract void setSubtitle(int);
-    method public abstract void setTitle(java.lang.CharSequence);
-    method public abstract void setTitle(int);
+    method public abstract void setTitle(CharSequence!);
+    method public abstract void setTitle(@StringRes int);
     method public abstract void show();
     field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
     field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
     field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
     field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
     field public static final int DISPLAY_USE_LOGO = 1; // 0x1
-    field public static final deprecated int NAVIGATION_MODE_LIST = 1; // 0x1
-    field public static final deprecated int NAVIGATION_MODE_STANDARD = 0; // 0x0
-    field public static final deprecated int NAVIGATION_MODE_TABS = 2; // 0x2
+    field @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
+    field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
+    field @Deprecated public static final int NAVIGATION_MODE_TABS = 2; // 0x2
   }
 
   public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
-    ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet!);
     ctor public ActionBar.LayoutParams(int, int);
     ctor public ActionBar.LayoutParams(int, int, int);
     ctor public ActionBar.LayoutParams(int);
-    ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams);
-    ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+    ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
     field public int gravity;
   }
 
-  public static abstract interface ActionBar.OnMenuVisibilityListener {
-    method public abstract void onMenuVisibilityChanged(boolean);
+  public static interface ActionBar.OnMenuVisibilityListener {
+    method public void onMenuVisibilityChanged(boolean);
   }
 
-  public static abstract deprecated interface ActionBar.OnNavigationListener {
-    method public abstract boolean onNavigationItemSelected(int, long);
+  @Deprecated public static interface ActionBar.OnNavigationListener {
+    method @Deprecated public boolean onNavigationItemSelected(int, long);
   }
 
-  public static abstract deprecated class ActionBar.Tab {
-    ctor public ActionBar.Tab();
-    method public abstract java.lang.CharSequence getContentDescription();
-    method public abstract android.view.View getCustomView();
-    method public abstract android.graphics.drawable.Drawable getIcon();
-    method public abstract int getPosition();
-    method public abstract java.lang.Object getTag();
-    method public abstract java.lang.CharSequence getText();
-    method public abstract void select();
-    method public abstract androidx.appcompat.app.ActionBar.Tab setContentDescription(int);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setContentDescription(java.lang.CharSequence);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setCustomView(android.view.View);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setCustomView(int);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setIcon(int);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setTabListener(androidx.appcompat.app.ActionBar.TabListener);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setTag(java.lang.Object);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setText(java.lang.CharSequence);
-    method public abstract androidx.appcompat.app.ActionBar.Tab setText(int);
-    field public static final int INVALID_POSITION = -1; // 0xffffffff
+  @Deprecated public abstract static class ActionBar.Tab {
+    ctor @Deprecated public ActionBar.Tab();
+    method @Deprecated public abstract CharSequence! getContentDescription();
+    method @Deprecated public abstract android.view.View! getCustomView();
+    method @Deprecated public abstract android.graphics.drawable.Drawable! getIcon();
+    method @Deprecated public abstract int getPosition();
+    method @Deprecated public abstract Object! getTag();
+    method @Deprecated public abstract CharSequence! getText();
+    method @Deprecated public abstract void select();
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(@StringRes int);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(CharSequence!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(android.view.View!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(int);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(android.graphics.drawable.Drawable!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
+    field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
   }
 
-  public static abstract deprecated interface ActionBar.TabListener {
-    method public abstract void onTabReselected(androidx.appcompat.app.ActionBar.Tab, androidx.fragment.app.FragmentTransaction);
-    method public abstract void onTabSelected(androidx.appcompat.app.ActionBar.Tab, androidx.fragment.app.FragmentTransaction);
-    method public abstract void onTabUnselected(androidx.appcompat.app.ActionBar.Tab, androidx.fragment.app.FragmentTransaction);
+  @Deprecated public static interface ActionBar.TabListener {
+    method @Deprecated public void onTabReselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+    method @Deprecated public void onTabSelected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+    method @Deprecated public void onTabUnselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
   }
 
   public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
-    ctor public ActionBarDrawerToggle(android.app.Activity, androidx.drawerlayout.widget.DrawerLayout, int, int);
-    ctor public ActionBarDrawerToggle(android.app.Activity, androidx.drawerlayout.widget.DrawerLayout, androidx.appcompat.widget.Toolbar, int, int);
+    ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
+    ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
     method public androidx.appcompat.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
-    method public android.view.View.OnClickListener getToolbarNavigationClickListener();
+    method public android.view.View.OnClickListener! getToolbarNavigationClickListener();
     method public boolean isDrawerIndicatorEnabled();
     method public boolean isDrawerSlideAnimationEnabled();
-    method public void onConfigurationChanged(android.content.res.Configuration);
-    method public void onDrawerClosed(android.view.View);
-    method public void onDrawerOpened(android.view.View);
-    method public void onDrawerSlide(android.view.View, float);
+    method public void onConfigurationChanged(android.content.res.Configuration!);
+    method public void onDrawerClosed(android.view.View!);
+    method public void onDrawerOpened(android.view.View!);
+    method public void onDrawerSlide(android.view.View!, float);
     method public void onDrawerStateChanged(int);
-    method public boolean onOptionsItemSelected(android.view.MenuItem);
+    method public boolean onOptionsItemSelected(android.view.MenuItem!);
     method public void setDrawerArrowDrawable(androidx.appcompat.graphics.drawable.DrawerArrowDrawable);
     method public void setDrawerIndicatorEnabled(boolean);
     method public void setDrawerSlideAnimationEnabled(boolean);
-    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable!);
     method public void setHomeAsUpIndicator(int);
-    method public void setToolbarNavigationClickListener(android.view.View.OnClickListener);
+    method public void setToolbarNavigationClickListener(android.view.View.OnClickListener!);
     method public void syncState();
   }
 
-  public static abstract interface ActionBarDrawerToggle.Delegate {
-    method public abstract android.content.Context getActionBarThemedContext();
-    method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
-    method public abstract boolean isNavigationVisible();
-    method public abstract void setActionBarDescription(int);
-    method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+  public static interface ActionBarDrawerToggle.Delegate {
+    method public android.content.Context! getActionBarThemedContext();
+    method public android.graphics.drawable.Drawable! getThemeUpIndicator();
+    method public boolean isNavigationVisible();
+    method public void setActionBarDescription(@StringRes int);
+    method public void setActionBarUpIndicator(android.graphics.drawable.Drawable!, @StringRes int);
   }
 
-  public static abstract interface ActionBarDrawerToggle.DelegateProvider {
-    method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+  public static interface ActionBarDrawerToggle.DelegateProvider {
+    method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
   }
 
   public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
     ctor protected AlertDialog(android.content.Context);
-    ctor protected AlertDialog(android.content.Context, int);
-    ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
-    method public android.widget.Button getButton(int);
-    method public android.widget.ListView getListView();
-    method public void setButton(int, java.lang.CharSequence, android.os.Message);
-    method public void setButton(int, java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
-    method public void setButton(int, java.lang.CharSequence, android.graphics.drawable.Drawable, android.content.DialogInterface.OnClickListener);
-    method public void setCustomTitle(android.view.View);
+    ctor protected AlertDialog(android.content.Context, @StyleRes int);
+    ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+    method public android.widget.Button! getButton(int);
+    method public android.widget.ListView! getListView();
+    method public void setButton(int, CharSequence!, android.os.Message!);
+    method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public void setButton(int, CharSequence!, android.graphics.drawable.Drawable!, android.content.DialogInterface.OnClickListener!);
+    method public void setCustomTitle(android.view.View!);
     method public void setIcon(int);
-    method public void setIcon(android.graphics.drawable.Drawable);
+    method public void setIcon(android.graphics.drawable.Drawable!);
     method public void setIconAttribute(int);
-    method public void setMessage(java.lang.CharSequence);
-    method public void setView(android.view.View);
-    method public void setView(android.view.View, int, int, int, int);
+    method public void setMessage(CharSequence!);
+    method public void setView(android.view.View!);
+    method public void setView(android.view.View!, int, int, int, int);
   }
 
   public static class AlertDialog.Builder {
     ctor public AlertDialog.Builder(android.content.Context);
-    ctor public AlertDialog.Builder(android.content.Context, int);
-    method public androidx.appcompat.app.AlertDialog create();
+    ctor public AlertDialog.Builder(android.content.Context, @StyleRes int);
+    method public androidx.appcompat.app.AlertDialog! create();
     method public android.content.Context getContext();
-    method public androidx.appcompat.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setCancelable(boolean);
-    method public androidx.appcompat.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, java.lang.String);
-    method public androidx.appcompat.app.AlertDialog.Builder setCustomTitle(android.view.View);
-    method public androidx.appcompat.app.AlertDialog.Builder setIcon(int);
-    method public androidx.appcompat.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable);
-    method public androidx.appcompat.app.AlertDialog.Builder setIconAttribute(int);
-    method public deprecated androidx.appcompat.app.AlertDialog.Builder setInverseBackgroundForced(boolean);
-    method public androidx.appcompat.app.AlertDialog.Builder setItems(int, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setItems(java.lang.CharSequence[], android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setMessage(int);
-    method public androidx.appcompat.app.AlertDialog.Builder setMessage(java.lang.CharSequence);
-    method public androidx.appcompat.app.AlertDialog.Builder setMultiChoiceItems(int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setMultiChoiceItems(java.lang.CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, java.lang.String, java.lang.String, android.content.DialogInterface.OnMultiChoiceClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setNegativeButton(int, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setNegativeButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setNegativeButtonIcon(android.graphics.drawable.Drawable);
-    method public androidx.appcompat.app.AlertDialog.Builder setNeutralButton(int, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setNeutralButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setNeutralButtonIcon(android.graphics.drawable.Drawable);
-    method public androidx.appcompat.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setPositiveButton(int, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setPositiveButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setPositiveButtonIcon(android.graphics.drawable.Drawable);
-    method public androidx.appcompat.app.AlertDialog.Builder setSingleChoiceItems(int, int, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, java.lang.String, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setSingleChoiceItems(java.lang.CharSequence[], int, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
-    method public androidx.appcompat.app.AlertDialog.Builder setTitle(int);
-    method public androidx.appcompat.app.AlertDialog.Builder setTitle(java.lang.CharSequence);
-    method public androidx.appcompat.app.AlertDialog.Builder setView(int);
-    method public androidx.appcompat.app.AlertDialog.Builder setView(android.view.View);
-    method public androidx.appcompat.app.AlertDialog show();
+    method public androidx.appcompat.app.AlertDialog.Builder! setAdapter(android.widget.ListAdapter!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
+    method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
+    method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
+    method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence[]!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence[]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButtonIcon(android.graphics.drawable.Drawable!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnKeyListener(android.content.DialogInterface.OnKeyListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence[]!, int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
+    method public androidx.appcompat.app.AlertDialog! show();
   }
 
   public class AppCompatActivity extends androidx.fragment.app.FragmentActivity implements androidx.appcompat.app.ActionBarDrawerToggle.DelegateProvider androidx.appcompat.app.AppCompatCallback androidx.core.app.TaskStackBuilder.SupportParentable {
     ctor public AppCompatActivity();
     method public androidx.appcompat.app.AppCompatDelegate getDelegate();
-    method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
-    method public androidx.appcompat.app.ActionBar getSupportActionBar();
-    method public android.content.Intent getSupportParentActivityIntent();
+    method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+    method public androidx.appcompat.app.ActionBar? getSupportActionBar();
+    method public android.content.Intent? getSupportParentActivityIntent();
     method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
-    method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+    method public final boolean onMenuItemSelected(int, android.view.MenuItem!);
     method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
-    method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
-    method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
-    method public deprecated void onSupportContentChanged();
+    method @CallSuper public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
+    method @CallSuper public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
+    method @Deprecated public void onSupportContentChanged();
     method public boolean onSupportNavigateUp();
-    method public androidx.appcompat.view.ActionMode onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
-    method public void setSupportActionBar(androidx.appcompat.widget.Toolbar);
-    method public deprecated void setSupportProgress(int);
-    method public deprecated void setSupportProgressBarIndeterminate(boolean);
-    method public deprecated void setSupportProgressBarIndeterminateVisibility(boolean);
-    method public deprecated void setSupportProgressBarVisibility(boolean);
-    method public androidx.appcompat.view.ActionMode startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+    method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+    method public void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+    method @Deprecated public void setSupportProgress(int);
+    method @Deprecated public void setSupportProgressBarIndeterminate(boolean);
+    method @Deprecated public void setSupportProgressBarIndeterminateVisibility(boolean);
+    method @Deprecated public void setSupportProgressBarVisibility(boolean);
+    method public androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
     method public void supportInvalidateOptionsMenu();
     method public void supportNavigateUpTo(android.content.Intent);
     method public boolean supportRequestWindowFeature(int);
     method public boolean supportShouldUpRecreateTask(android.content.Intent);
   }
 
-  public abstract interface AppCompatCallback {
-    method public abstract void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
-    method public abstract void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
-    method public abstract androidx.appcompat.view.ActionMode onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+  public interface AppCompatCallback {
+    method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+    method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+    method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
   }
 
   public abstract class AppCompatDelegate {
-    method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public abstract void addContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
     method public abstract boolean applyDayNight();
-    method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback);
-    method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback);
-    method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback);
-    method public abstract android.view.View createView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
-    method public abstract <T extends android.view.View> T findViewById(int);
+    method public static androidx.appcompat.app.AppCompatDelegate! create(android.app.Activity!, androidx.appcompat.app.AppCompatCallback!);
+    method public static androidx.appcompat.app.AppCompatDelegate! create(android.app.Dialog!, androidx.appcompat.app.AppCompatCallback!);
+    method public static androidx.appcompat.app.AppCompatDelegate! create(android.content.Context!, android.view.Window!, androidx.appcompat.app.AppCompatCallback!);
+    method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
+    method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
     method public static int getDefaultNightMode();
-    method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
-    method public abstract android.view.MenuInflater getMenuInflater();
-    method public abstract androidx.appcompat.app.ActionBar getSupportActionBar();
+    method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+    method public abstract android.view.MenuInflater! getMenuInflater();
+    method public abstract androidx.appcompat.app.ActionBar? getSupportActionBar();
     method public abstract boolean hasWindowFeature(int);
     method public abstract void installViewFactory();
     method public abstract void invalidateOptionsMenu();
     method public static boolean isCompatVectorFromResourcesEnabled();
     method public abstract boolean isHandleNativeActionModesEnabled();
-    method public abstract void onConfigurationChanged(android.content.res.Configuration);
-    method public abstract void onCreate(android.os.Bundle);
+    method public abstract void onConfigurationChanged(android.content.res.Configuration!);
+    method public abstract void onCreate(android.os.Bundle!);
     method public abstract void onDestroy();
-    method public abstract void onPostCreate(android.os.Bundle);
+    method public abstract void onPostCreate(android.os.Bundle!);
     method public abstract void onPostResume();
-    method public abstract void onSaveInstanceState(android.os.Bundle);
+    method public abstract void onSaveInstanceState(android.os.Bundle!);
     method public abstract void onStart();
     method public abstract void onStop();
     method public abstract boolean requestWindowFeature(int);
     method public static void setCompatVectorFromResourcesEnabled(boolean);
-    method public abstract void setContentView(android.view.View);
-    method public abstract void setContentView(int);
-    method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public abstract void setContentView(android.view.View!);
+    method public abstract void setContentView(@LayoutRes int);
+    method public abstract void setContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
     method public static void setDefaultNightMode(int);
     method public abstract void setHandleNativeActionModesEnabled(boolean);
     method public abstract void setLocalNightMode(int);
-    method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar);
-    method public abstract void setTitle(java.lang.CharSequence);
-    method public abstract androidx.appcompat.view.ActionMode startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+    method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+    method public abstract void setTitle(CharSequence?);
+    method public abstract androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
     field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
     field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
     field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
@@ -293,14 +294,14 @@
   }
 
   public class AppCompatDialog extends android.app.Dialog implements androidx.appcompat.app.AppCompatCallback {
-    ctor public AppCompatDialog(android.content.Context);
-    ctor public AppCompatDialog(android.content.Context, int);
-    ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
-    method public androidx.appcompat.app.AppCompatDelegate getDelegate();
-    method public androidx.appcompat.app.ActionBar getSupportActionBar();
-    method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
-    method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
-    method public androidx.appcompat.view.ActionMode onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+    ctor public AppCompatDialog(android.content.Context!);
+    ctor public AppCompatDialog(android.content.Context!, int);
+    ctor protected AppCompatDialog(android.content.Context!, boolean, android.content.DialogInterface.OnCancelListener!);
+    method public androidx.appcompat.app.AppCompatDelegate! getDelegate();
+    method public androidx.appcompat.app.ActionBar! getSupportActionBar();
+    method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+    method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+    method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
     method public boolean supportRequestWindowFeature(int);
   }
 
@@ -310,20 +311,20 @@
 
   public class AppCompatViewInflater {
     ctor public AppCompatViewInflater();
-    method protected androidx.appcompat.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatButton createButton(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatCheckBox createCheckBox(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatEditText createEditText(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatImageButton createImageButton(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatImageView createImageView(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatRadioButton createRadioButton(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatRatingBar createRatingBar(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatSeekBar createSeekBar(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context, android.util.AttributeSet);
-    method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context, android.util.AttributeSet);
-    method protected android.view.View createView(android.content.Context, java.lang.String, android.util.AttributeSet);
+    method protected androidx.appcompat.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatButton createButton(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatCheckBox createCheckBox(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatEditText createEditText(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatImageButton createImageButton(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatImageView createImageView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatRadioButton createRadioButton(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatRatingBar createRatingBar(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatSeekBar createSeekBar(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
   }
 
 }
@@ -331,8 +332,8 @@
 package androidx.appcompat.content.res {
 
   public final class AppCompatResources {
-    method public static android.content.res.ColorStateList getColorStateList(android.content.Context, int);
-    method public static android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+    method public static android.content.res.ColorStateList! getColorStateList(android.content.Context, @ColorRes int);
+    method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
   }
 
 }
@@ -343,36 +344,36 @@
     ctor public AnimatedStateListDrawableCompat();
     method public void addState(int[], android.graphics.drawable.Drawable, int);
     method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
-    method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat create(android.content.Context, int, android.content.res.Resources.Theme);
-    method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public void inflate(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat? create(android.content.Context, @DrawableRes int, android.content.res.Resources.Theme?);
+    method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat! createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void inflate(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method protected void setConstantState(androidx.appcompat.graphics.drawable.DrawableContainer.DrawableContainerState);
   }
 
   public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
-    ctor public DrawerArrowDrawable(android.content.Context);
-    method public void draw(android.graphics.Canvas);
+    ctor public DrawerArrowDrawable(android.content.Context!);
+    method public void draw(android.graphics.Canvas!);
     method public float getArrowHeadLength();
     method public float getArrowShaftLength();
     method public float getBarLength();
     method public float getBarThickness();
-    method public int getColor();
+    method @ColorInt public int getColor();
     method public int getDirection();
     method public float getGapSize();
     method public int getOpacity();
-    method public final android.graphics.Paint getPaint();
-    method public float getProgress();
+    method public final android.graphics.Paint! getPaint();
+    method @FloatRange(from=0.0, to=1.0) public float getProgress();
     method public boolean isSpinEnabled();
     method public void setAlpha(int);
     method public void setArrowHeadLength(float);
     method public void setArrowShaftLength(float);
     method public void setBarLength(float);
     method public void setBarThickness(float);
-    method public void setColor(int);
-    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setColor(@ColorInt int);
+    method public void setColorFilter(android.graphics.ColorFilter!);
     method public void setDirection(int);
     method public void setGapSize(float);
-    method public void setProgress(float);
+    method public void setProgress(@FloatRange(from=0.0, to=1.0) float);
     method public void setSpinEnabled(boolean);
     method public void setVerticalMirror(boolean);
     field public static final int ARROW_DIRECTION_END = 3; // 0x3
@@ -388,43 +389,43 @@
   public abstract class ActionMode {
     ctor public ActionMode();
     method public abstract void finish();
-    method public abstract android.view.View getCustomView();
-    method public abstract android.view.Menu getMenu();
-    method public abstract android.view.MenuInflater getMenuInflater();
-    method public abstract java.lang.CharSequence getSubtitle();
-    method public java.lang.Object getTag();
-    method public abstract java.lang.CharSequence getTitle();
+    method public abstract android.view.View! getCustomView();
+    method public abstract android.view.Menu! getMenu();
+    method public abstract android.view.MenuInflater! getMenuInflater();
+    method public abstract CharSequence! getSubtitle();
+    method public Object! getTag();
+    method public abstract CharSequence! getTitle();
     method public boolean getTitleOptionalHint();
     method public abstract void invalidate();
     method public boolean isTitleOptional();
-    method public abstract void setCustomView(android.view.View);
-    method public abstract void setSubtitle(java.lang.CharSequence);
+    method public abstract void setCustomView(android.view.View!);
+    method public abstract void setSubtitle(CharSequence!);
     method public abstract void setSubtitle(int);
-    method public void setTag(java.lang.Object);
-    method public abstract void setTitle(java.lang.CharSequence);
+    method public void setTag(Object!);
+    method public abstract void setTitle(CharSequence!);
     method public abstract void setTitle(int);
     method public void setTitleOptionalHint(boolean);
   }
 
-  public static abstract interface ActionMode.Callback {
-    method public abstract boolean onActionItemClicked(androidx.appcompat.view.ActionMode, android.view.MenuItem);
-    method public abstract boolean onCreateActionMode(androidx.appcompat.view.ActionMode, android.view.Menu);
-    method public abstract void onDestroyActionMode(androidx.appcompat.view.ActionMode);
-    method public abstract boolean onPrepareActionMode(androidx.appcompat.view.ActionMode, android.view.Menu);
+  public static interface ActionMode.Callback {
+    method public boolean onActionItemClicked(androidx.appcompat.view.ActionMode!, android.view.MenuItem!);
+    method public boolean onCreateActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+    method public void onDestroyActionMode(androidx.appcompat.view.ActionMode!);
+    method public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
   }
 
-  public abstract interface CollapsibleActionView {
-    method public abstract void onActionViewCollapsed();
-    method public abstract void onActionViewExpanded();
+  public interface CollapsibleActionView {
+    method public void onActionViewCollapsed();
+    method public void onActionViewExpanded();
   }
 
   public class ContextThemeWrapper extends android.content.ContextWrapper {
     ctor public ContextThemeWrapper();
-    ctor public ContextThemeWrapper(android.content.Context, int);
-    ctor public ContextThemeWrapper(android.content.Context, android.content.res.Resources.Theme);
-    method public void applyOverrideConfiguration(android.content.res.Configuration);
+    ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
+    ctor public ContextThemeWrapper(android.content.Context!, android.content.res.Resources.Theme!);
+    method public void applyOverrideConfiguration(android.content.res.Configuration!);
     method public int getThemeResId();
-    method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean);
+    method protected void onApplyThemeResource(android.content.res.Resources.Theme!, int, boolean);
   }
 
 }
@@ -432,202 +433,208 @@
 package androidx.appcompat.widget {
 
   public class ActionMenuView extends androidx.appcompat.widget.LinearLayoutCompat {
-    ctor public ActionMenuView(android.content.Context);
-    ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+    ctor public ActionMenuView(android.content.Context!);
+    ctor public ActionMenuView(android.content.Context!, android.util.AttributeSet!);
     method public void dismissPopupMenus();
-    method protected androidx.appcompat.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
-    method public androidx.appcompat.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected androidx.appcompat.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public android.view.Menu getMenu();
-    method public android.graphics.drawable.Drawable getOverflowIcon();
+    method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+    method public android.view.Menu! getMenu();
+    method public android.graphics.drawable.Drawable? getOverflowIcon();
     method public int getPopupTheme();
     method public boolean hideOverflowMenu();
     method public boolean isOverflowMenuShowing();
-    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onConfigurationChanged(android.content.res.Configuration!);
     method public void onDetachedFromWindow();
-    method public void setOnMenuItemClickListener(androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener);
-    method public void setOverflowIcon(android.graphics.drawable.Drawable);
-    method public void setPopupTheme(int);
+    method public void setOnMenuItemClickListener(androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener!);
+    method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+    method public void setPopupTheme(@StyleRes int);
     method public boolean showOverflowMenu();
   }
 
   public static class ActionMenuView.LayoutParams extends androidx.appcompat.widget.LinearLayoutCompat.LayoutParams {
-    ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
-    ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public ActionMenuView.LayoutParams(androidx.appcompat.widget.ActionMenuView.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+    ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+    ctor public ActionMenuView.LayoutParams(androidx.appcompat.widget.ActionMenuView.LayoutParams!);
     ctor public ActionMenuView.LayoutParams(int, int);
-    field public int cellsUsed;
-    field public boolean expandable;
-    field public int extraPixels;
-    field public boolean isOverflowButton;
-    field public boolean preventEdgeOffset;
+    field @android.view.ViewDebug.ExportedProperty public int cellsUsed;
+    field @android.view.ViewDebug.ExportedProperty public boolean expandable;
+    field @android.view.ViewDebug.ExportedProperty public int extraPixels;
+    field @android.view.ViewDebug.ExportedProperty public boolean isOverflowButton;
+    field @android.view.ViewDebug.ExportedProperty public boolean preventEdgeOffset;
   }
 
-  public static abstract interface ActionMenuView.OnMenuItemClickListener {
-    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  public static interface ActionMenuView.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem!);
   }
 
   public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.core.view.TintableBackgroundView {
-    ctor public AppCompatAutoCompleteTextView(android.content.Context);
-    ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTextAppearance(android.content.Context, int);
+    ctor public AppCompatAutoCompleteTextView(android.content.Context!);
+    ctor public AppCompatAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
   }
 
   public class AppCompatButton extends android.widget.Button implements androidx.core.widget.AutoSizeableTextView androidx.core.view.TintableBackgroundView {
-    ctor public AppCompatButton(android.content.Context);
-    ctor public AppCompatButton(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatButton(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
-    method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    ctor public AppCompatButton(android.content.Context!);
+    ctor public AppCompatButton(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatButton(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
     method public void setSupportAllCaps(boolean);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTextAppearance(android.content.Context, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
   }
 
   public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.core.widget.TintableCompoundButton {
-    ctor public AppCompatCheckBox(android.content.Context);
-    ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportButtonTintList();
-    method public android.graphics.PorterDuff.Mode getSupportButtonTintMode();
-    method public void setSupportButtonTintList(android.content.res.ColorStateList);
-    method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+    ctor public AppCompatCheckBox(android.content.Context!);
+    ctor public AppCompatCheckBox(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatCheckBox(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportButtonTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
   }
 
   public class AppCompatCheckedTextView extends android.widget.CheckedTextView {
-    ctor public AppCompatCheckedTextView(android.content.Context);
-    ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet, int);
-    method public void setTextAppearance(android.content.Context, int);
+    ctor public AppCompatCheckedTextView(android.content.Context!);
+    ctor public AppCompatCheckedTextView(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatCheckedTextView(android.content.Context!, android.util.AttributeSet!, int);
+    method public void setTextAppearance(android.content.Context!, int);
   }
 
   public class AppCompatEditText extends android.widget.EditText implements androidx.core.view.TintableBackgroundView {
-    ctor public AppCompatEditText(android.content.Context);
-    ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTextAppearance(android.content.Context, int);
+    ctor public AppCompatEditText(android.content.Context!);
+    ctor public AppCompatEditText(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatEditText(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
   }
 
   public class AppCompatImageButton extends android.widget.ImageButton implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableImageSourceView {
-    ctor public AppCompatImageButton(android.content.Context);
-    ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public android.content.res.ColorStateList getSupportImageTintList();
-    method public android.graphics.PorterDuff.Mode getSupportImageTintMode();
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
-    method public void setSupportImageTintList(android.content.res.ColorStateList);
-    method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode);
+    ctor public AppCompatImageButton(android.content.Context!);
+    ctor public AppCompatImageButton(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatImageButton(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportImageTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportImageTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
   }
 
   public class AppCompatImageView extends android.widget.ImageView implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableImageSourceView {
-    ctor public AppCompatImageView(android.content.Context);
-    ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public android.content.res.ColorStateList getSupportImageTintList();
-    method public android.graphics.PorterDuff.Mode getSupportImageTintMode();
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
-    method public void setSupportImageTintList(android.content.res.ColorStateList);
-    method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode);
+    ctor public AppCompatImageView(android.content.Context!);
+    ctor public AppCompatImageView(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatImageView(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportImageTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportImageTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
   }
 
   public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements androidx.core.view.TintableBackgroundView {
-    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
-    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTextAppearance(android.content.Context, int);
+    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context!);
+    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
   }
 
   public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.core.widget.TintableCompoundButton {
-    ctor public AppCompatRadioButton(android.content.Context);
-    ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportButtonTintList();
-    method public android.graphics.PorterDuff.Mode getSupportButtonTintMode();
-    method public void setSupportButtonTintList(android.content.res.ColorStateList);
-    method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+    ctor public AppCompatRadioButton(android.content.Context!);
+    ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportButtonTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
   }
 
   public class AppCompatRatingBar extends android.widget.RatingBar {
-    ctor public AppCompatRatingBar(android.content.Context);
-    ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public AppCompatRatingBar(android.content.Context!);
+    ctor public AppCompatRatingBar(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatRatingBar(android.content.Context!, android.util.AttributeSet!, int);
   }
 
   public class AppCompatSeekBar extends android.widget.SeekBar {
-    ctor public AppCompatSeekBar(android.content.Context);
-    ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public AppCompatSeekBar(android.content.Context!);
+    ctor public AppCompatSeekBar(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatSeekBar(android.content.Context!, android.util.AttributeSet!, int);
   }
 
   public class AppCompatSpinner extends android.widget.Spinner implements androidx.core.view.TintableBackgroundView {
-    ctor public AppCompatSpinner(android.content.Context);
-    ctor public AppCompatSpinner(android.content.Context, int);
-    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int);
-    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources.Theme);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    ctor public AppCompatSpinner(android.content.Context!);
+    ctor public AppCompatSpinner(android.content.Context!, int);
+    ctor public AppCompatSpinner(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatSpinner(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public AppCompatSpinner(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public AppCompatSpinner(android.content.Context!, android.util.AttributeSet!, int, int, android.content.res.Resources.Theme!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
   }
 
   public class AppCompatTextView extends android.widget.TextView implements androidx.core.widget.AutoSizeableTextView androidx.core.view.TintableBackgroundView {
-    ctor public AppCompatTextView(android.content.Context);
-    ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet);
-    ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet, int);
-    method public android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    ctor public AppCompatTextView(android.content.Context!);
+    ctor public AppCompatTextView(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatTextView(android.content.Context!, android.util.AttributeSet!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
     method public androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParamsCompat();
-    method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
-    method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
     method public void setPrecomputedText(androidx.core.text.PrecomputedTextCompat);
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTextAppearance(android.content.Context, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
     method public void setTextFuture(java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat>);
     method public void setTextMetricsParamsCompat(androidx.core.text.PrecomputedTextCompat.Params);
   }
 
+  public class AppCompatToggleButton extends android.widget.ToggleButton {
+    ctor public AppCompatToggleButton(android.content.Context!);
+    ctor public AppCompatToggleButton(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatToggleButton(android.content.Context!, android.util.AttributeSet!, int);
+  }
+
   public class LinearLayoutCompat extends android.view.ViewGroup {
-    ctor public LinearLayoutCompat(android.content.Context);
-    ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet);
-    ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet, int);
-    method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams generateDefaultLayoutParams();
-    method public androidx.appcompat.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public LinearLayoutCompat(android.content.Context!);
+    ctor public LinearLayoutCompat(android.content.Context!, android.util.AttributeSet!);
+    ctor public LinearLayoutCompat(android.content.Context!, android.util.AttributeSet!, int);
+    method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
     method public int getBaselineAlignedChildIndex();
-    method public android.graphics.drawable.Drawable getDividerDrawable();
+    method public android.graphics.drawable.Drawable! getDividerDrawable();
     method public int getDividerPadding();
     method public int getGravity();
     method public int getOrientation();
@@ -637,7 +644,7 @@
     method public boolean isMeasureWithLargestChildEnabled();
     method public void setBaselineAligned(boolean);
     method public void setBaselineAlignedChildIndex(int);
-    method public void setDividerDrawable(android.graphics.drawable.Drawable);
+    method public void setDividerDrawable(android.graphics.drawable.Drawable!);
     method public void setDividerPadding(int);
     method public void setGravity(int);
     method public void setHorizontalGravity(int);
@@ -655,36 +662,36 @@
   }
 
   public static class LinearLayoutCompat.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
-    ctor public LinearLayoutCompat.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public LinearLayoutCompat.LayoutParams(android.content.Context!, android.util.AttributeSet!);
     ctor public LinearLayoutCompat.LayoutParams(int, int);
     ctor public LinearLayoutCompat.LayoutParams(int, int, float);
-    ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public LinearLayoutCompat.LayoutParams(androidx.appcompat.widget.LinearLayoutCompat.LayoutParams);
+    ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams!);
+    ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+    ctor public LinearLayoutCompat.LayoutParams(androidx.appcompat.widget.LinearLayoutCompat.LayoutParams!);
     field public int gravity;
     field public float weight;
   }
 
   public class ListPopupWindow {
     ctor public ListPopupWindow(android.content.Context);
-    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet);
-    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int);
-    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?);
+    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int);
+    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int, @StyleRes int);
     method public void clearListSelection();
-    method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View);
+    method public android.view.View.OnTouchListener! createDragToOpenListener(android.view.View!);
     method public void dismiss();
-    method public android.view.View getAnchorView();
-    method public int getAnimationStyle();
-    method public android.graphics.drawable.Drawable getBackground();
+    method public android.view.View? getAnchorView();
+    method @StyleRes public int getAnimationStyle();
+    method public android.graphics.drawable.Drawable? getBackground();
     method public int getHeight();
     method public int getHorizontalOffset();
     method public int getInputMethodMode();
-    method public android.widget.ListView getListView();
+    method public android.widget.ListView? getListView();
     method public int getPromptPosition();
-    method public java.lang.Object getSelectedItem();
+    method public Object? getSelectedItem();
     method public long getSelectedItemId();
     method public int getSelectedItemPosition();
-    method public android.view.View getSelectedView();
+    method public android.view.View? getSelectedView();
     method public int getSoftInputMode();
     method public int getVerticalOffset();
     method public int getWidth();
@@ -696,22 +703,22 @@
     method public boolean onKeyUp(int, android.view.KeyEvent);
     method public boolean performItemClick(int);
     method public void postShow();
-    method public void setAdapter(android.widget.ListAdapter);
-    method public void setAnchorView(android.view.View);
-    method public void setAnimationStyle(int);
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setAdapter(android.widget.ListAdapter?);
+    method public void setAnchorView(android.view.View?);
+    method public void setAnimationStyle(@StyleRes int);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
     method public void setContentWidth(int);
     method public void setDropDownGravity(int);
     method public void setHeight(int);
     method public void setHorizontalOffset(int);
     method public void setInputMethodMode(int);
-    method public void setListSelector(android.graphics.drawable.Drawable);
+    method public void setListSelector(android.graphics.drawable.Drawable!);
     method public void setModal(boolean);
-    method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
-    method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener);
-    method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+    method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener?);
+    method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener?);
+    method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener?);
     method public void setPromptPosition(int);
-    method public void setPromptView(android.view.View);
+    method public void setPromptView(android.view.View?);
     method public void setSelection(int);
     method public void setSoftInputMode(int);
     method public void setVerticalOffset(int);
@@ -730,37 +737,37 @@
   public class PopupMenu {
     ctor public PopupMenu(android.content.Context, android.view.View);
     ctor public PopupMenu(android.content.Context, android.view.View, int);
-    ctor public PopupMenu(android.content.Context, android.view.View, int, int, int);
+    ctor public PopupMenu(android.content.Context, android.view.View, int, @AttrRes int, @StyleRes int);
     method public void dismiss();
     method public android.view.View.OnTouchListener getDragToOpenListener();
     method public int getGravity();
     method public android.view.Menu getMenu();
     method public android.view.MenuInflater getMenuInflater();
-    method public void inflate(int);
+    method public void inflate(@MenuRes int);
     method public void setGravity(int);
-    method public void setOnDismissListener(androidx.appcompat.widget.PopupMenu.OnDismissListener);
-    method public void setOnMenuItemClickListener(androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener);
+    method public void setOnDismissListener(androidx.appcompat.widget.PopupMenu.OnDismissListener?);
+    method public void setOnMenuItemClickListener(androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener?);
     method public void show();
   }
 
-  public static abstract interface PopupMenu.OnDismissListener {
-    method public abstract void onDismiss(androidx.appcompat.widget.PopupMenu);
+  public static interface PopupMenu.OnDismissListener {
+    method public void onDismiss(androidx.appcompat.widget.PopupMenu!);
   }
 
-  public static abstract interface PopupMenu.OnMenuItemClickListener {
-    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  public static interface PopupMenu.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem!);
   }
 
   public class SearchView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.view.CollapsibleActionView {
-    ctor public SearchView(android.content.Context);
-    ctor public SearchView(android.content.Context, android.util.AttributeSet);
-    ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SearchView(android.content.Context!);
+    ctor public SearchView(android.content.Context!, android.util.AttributeSet!);
+    ctor public SearchView(android.content.Context!, android.util.AttributeSet!, int);
     method public int getImeOptions();
     method public int getInputType();
     method public int getMaxWidth();
-    method public java.lang.CharSequence getQuery();
-    method public java.lang.CharSequence getQueryHint();
-    method public androidx.cursoradapter.widget.CursorAdapter getSuggestionsAdapter();
+    method public CharSequence! getQuery();
+    method public CharSequence? getQueryHint();
+    method public androidx.cursoradapter.widget.CursorAdapter! getSuggestionsAdapter();
     method public boolean isIconfiedByDefault();
     method public boolean isIconified();
     method public boolean isQueryRefinementEnabled();
@@ -772,105 +779,107 @@
     method public void setImeOptions(int);
     method public void setInputType(int);
     method public void setMaxWidth(int);
-    method public void setOnCloseListener(androidx.appcompat.widget.SearchView.OnCloseListener);
-    method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
-    method public void setOnQueryTextListener(androidx.appcompat.widget.SearchView.OnQueryTextListener);
-    method public void setOnSearchClickListener(android.view.View.OnClickListener);
-    method public void setOnSuggestionListener(androidx.appcompat.widget.SearchView.OnSuggestionListener);
-    method public void setQuery(java.lang.CharSequence, boolean);
-    method public void setQueryHint(java.lang.CharSequence);
+    method public void setOnCloseListener(androidx.appcompat.widget.SearchView.OnCloseListener!);
+    method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener!);
+    method public void setOnQueryTextListener(androidx.appcompat.widget.SearchView.OnQueryTextListener!);
+    method public void setOnSearchClickListener(android.view.View.OnClickListener!);
+    method public void setOnSuggestionListener(androidx.appcompat.widget.SearchView.OnSuggestionListener!);
+    method public void setQuery(CharSequence!, boolean);
+    method public void setQueryHint(CharSequence?);
     method public void setQueryRefinementEnabled(boolean);
-    method public void setSearchableInfo(android.app.SearchableInfo);
+    method public void setSearchableInfo(android.app.SearchableInfo!);
     method public void setSubmitButtonEnabled(boolean);
-    method public void setSuggestionsAdapter(androidx.cursoradapter.widget.CursorAdapter);
+    method public void setSuggestionsAdapter(androidx.cursoradapter.widget.CursorAdapter!);
   }
 
-  public static abstract interface SearchView.OnCloseListener {
-    method public abstract boolean onClose();
+  public static interface SearchView.OnCloseListener {
+    method public boolean onClose();
   }
 
-  public static abstract interface SearchView.OnQueryTextListener {
-    method public abstract boolean onQueryTextChange(java.lang.String);
-    method public abstract boolean onQueryTextSubmit(java.lang.String);
+  public static interface SearchView.OnQueryTextListener {
+    method public boolean onQueryTextChange(String!);
+    method public boolean onQueryTextSubmit(String!);
   }
 
-  public static abstract interface SearchView.OnSuggestionListener {
-    method public abstract boolean onSuggestionClick(int);
-    method public abstract boolean onSuggestionSelect(int);
+  public static interface SearchView.OnSuggestionListener {
+    method public boolean onSuggestionClick(int);
+    method public boolean onSuggestionSelect(int);
   }
 
   public class ShareActionProvider extends androidx.core.view.ActionProvider {
-    ctor public ShareActionProvider(android.content.Context);
-    method public android.view.View onCreateActionView();
-    method public void setOnShareTargetSelectedListener(androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener);
-    method public void setShareHistoryFileName(java.lang.String);
-    method public void setShareIntent(android.content.Intent);
-    field public static final java.lang.String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+    ctor public ShareActionProvider(android.content.Context!);
+    method public android.view.View! onCreateActionView();
+    method public void setOnShareTargetSelectedListener(androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener!);
+    method public void setShareHistoryFileName(String!);
+    method public void setShareIntent(android.content.Intent!);
+    field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
   }
 
-  public static abstract interface ShareActionProvider.OnShareTargetSelectedListener {
-    method public abstract boolean onShareTargetSelected(androidx.appcompat.widget.ShareActionProvider, android.content.Intent);
+  public static interface ShareActionProvider.OnShareTargetSelectedListener {
+    method public boolean onShareTargetSelected(androidx.appcompat.widget.ShareActionProvider!, android.content.Intent!);
   }
 
   public class SwitchCompat extends android.widget.CompoundButton {
-    ctor public SwitchCompat(android.content.Context);
-    ctor public SwitchCompat(android.content.Context, android.util.AttributeSet);
-    ctor public SwitchCompat(android.content.Context, android.util.AttributeSet, int);
+    ctor public SwitchCompat(android.content.Context!);
+    ctor public SwitchCompat(android.content.Context!, android.util.AttributeSet!);
+    ctor public SwitchCompat(android.content.Context!, android.util.AttributeSet!, int);
     method public boolean getShowText();
     method public boolean getSplitTrack();
     method public int getSwitchMinWidth();
     method public int getSwitchPadding();
-    method public java.lang.CharSequence getTextOff();
-    method public java.lang.CharSequence getTextOn();
-    method public android.graphics.drawable.Drawable getThumbDrawable();
+    method public CharSequence! getTextOff();
+    method public CharSequence! getTextOn();
+    method public android.graphics.drawable.Drawable! getThumbDrawable();
     method public int getThumbTextPadding();
-    method public android.content.res.ColorStateList getThumbTintList();
-    method public android.graphics.PorterDuff.Mode getThumbTintMode();
-    method public android.graphics.drawable.Drawable getTrackDrawable();
-    method public android.content.res.ColorStateList getTrackTintList();
-    method public android.graphics.PorterDuff.Mode getTrackTintMode();
+    method public android.content.res.ColorStateList? getThumbTintList();
+    method public android.graphics.PorterDuff.Mode? getThumbTintMode();
+    method public android.graphics.drawable.Drawable! getTrackDrawable();
+    method public android.content.res.ColorStateList? getTrackTintList();
+    method public android.graphics.PorterDuff.Mode? getTrackTintMode();
     method public void onMeasure(int, int);
     method public void setShowText(boolean);
     method public void setSplitTrack(boolean);
     method public void setSwitchMinWidth(int);
     method public void setSwitchPadding(int);
-    method public void setSwitchTextAppearance(android.content.Context, int);
-    method public void setSwitchTypeface(android.graphics.Typeface, int);
-    method public void setSwitchTypeface(android.graphics.Typeface);
-    method public void setTextOff(java.lang.CharSequence);
-    method public void setTextOn(java.lang.CharSequence);
-    method public void setThumbDrawable(android.graphics.drawable.Drawable);
+    method public void setSwitchTextAppearance(android.content.Context!, int);
+    method public void setSwitchTypeface(android.graphics.Typeface!, int);
+    method public void setSwitchTypeface(android.graphics.Typeface!);
+    method public void setTextOff(CharSequence!);
+    method public void setTextOn(CharSequence!);
+    method public void setThumbDrawable(android.graphics.drawable.Drawable!);
     method public void setThumbResource(int);
     method public void setThumbTextPadding(int);
-    method public void setThumbTintList(android.content.res.ColorStateList);
-    method public void setThumbTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTrackDrawable(android.graphics.drawable.Drawable);
+    method public void setThumbTintList(android.content.res.ColorStateList?);
+    method public void setThumbTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTrackDrawable(android.graphics.drawable.Drawable!);
     method public void setTrackResource(int);
-    method public void setTrackTintList(android.content.res.ColorStateList);
-    method public void setTrackTintMode(android.graphics.PorterDuff.Mode);
+    method public void setTrackTintList(android.content.res.ColorStateList?);
+    method public void setTrackTintMode(android.graphics.PorterDuff.Mode?);
   }
 
-  public abstract interface ThemedSpinnerAdapter implements android.widget.SpinnerAdapter {
-    method public abstract android.content.res.Resources.Theme getDropDownViewTheme();
-    method public abstract void setDropDownViewTheme(android.content.res.Resources.Theme);
+  public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
+    method public android.content.res.Resources.Theme? getDropDownViewTheme();
+    method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
   }
 
   public static final class ThemedSpinnerAdapter.Helper {
     ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
     method public android.view.LayoutInflater getDropDownViewInflater();
-    method public android.content.res.Resources.Theme getDropDownViewTheme();
-    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+    method public android.content.res.Resources.Theme? getDropDownViewTheme();
+    method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
   }
 
   public class Toolbar extends android.view.ViewGroup {
-    ctor public Toolbar(android.content.Context);
-    ctor public Toolbar(android.content.Context, android.util.AttributeSet);
-    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+    ctor public Toolbar(android.content.Context!);
+    ctor public Toolbar(android.content.Context!, android.util.AttributeSet?);
+    ctor public Toolbar(android.content.Context!, android.util.AttributeSet?, int);
     method public void collapseActionView();
     method public void dismissPopupMenus();
-    method protected androidx.appcompat.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
-    method public androidx.appcompat.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected androidx.appcompat.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+    method public CharSequence? getCollapseContentDescription();
+    method public android.graphics.drawable.Drawable? getCollapseIcon();
     method public int getContentInsetEnd();
     method public int getContentInsetEndWithActions();
     method public int getContentInsetLeft();
@@ -881,79 +890,83 @@
     method public int getCurrentContentInsetLeft();
     method public int getCurrentContentInsetRight();
     method public int getCurrentContentInsetStart();
-    method public android.graphics.drawable.Drawable getLogo();
-    method public java.lang.CharSequence getLogoDescription();
-    method public android.view.Menu getMenu();
-    method public java.lang.CharSequence getNavigationContentDescription();
-    method public android.graphics.drawable.Drawable getNavigationIcon();
-    method public android.graphics.drawable.Drawable getOverflowIcon();
+    method public android.graphics.drawable.Drawable! getLogo();
+    method public CharSequence! getLogoDescription();
+    method public android.view.Menu! getMenu();
+    method public CharSequence? getNavigationContentDescription();
+    method public android.graphics.drawable.Drawable? getNavigationIcon();
+    method public android.graphics.drawable.Drawable? getOverflowIcon();
     method public int getPopupTheme();
-    method public java.lang.CharSequence getSubtitle();
-    method public java.lang.CharSequence getTitle();
+    method public CharSequence! getSubtitle();
+    method public CharSequence! getTitle();
     method public int getTitleMarginBottom();
     method public int getTitleMarginEnd();
     method public int getTitleMarginStart();
     method public int getTitleMarginTop();
     method public boolean hasExpandedActionView();
     method public boolean hideOverflowMenu();
-    method public void inflateMenu(int);
+    method public void inflateMenu(@MenuRes int);
     method public boolean isOverflowMenuShowing();
+    method public void setCollapseContentDescription(@StringRes int);
+    method public void setCollapseContentDescription(CharSequence?);
+    method public void setCollapseIcon(@DrawableRes int);
+    method public void setCollapseIcon(android.graphics.drawable.Drawable?);
     method public void setContentInsetEndWithActions(int);
     method public void setContentInsetStartWithNavigation(int);
     method public void setContentInsetsAbsolute(int, int);
     method public void setContentInsetsRelative(int, int);
-    method public void setLogo(int);
-    method public void setLogo(android.graphics.drawable.Drawable);
-    method public void setLogoDescription(int);
-    method public void setLogoDescription(java.lang.CharSequence);
-    method public void setNavigationContentDescription(int);
-    method public void setNavigationContentDescription(java.lang.CharSequence);
-    method public void setNavigationIcon(int);
-    method public void setNavigationIcon(android.graphics.drawable.Drawable);
-    method public void setNavigationOnClickListener(android.view.View.OnClickListener);
-    method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener);
-    method public void setOverflowIcon(android.graphics.drawable.Drawable);
-    method public void setPopupTheme(int);
-    method public void setSubtitle(int);
-    method public void setSubtitle(java.lang.CharSequence);
-    method public void setSubtitleTextAppearance(android.content.Context, int);
-    method public void setSubtitleTextColor(int);
-    method public void setTitle(int);
-    method public void setTitle(java.lang.CharSequence);
+    method public void setLogo(@DrawableRes int);
+    method public void setLogo(android.graphics.drawable.Drawable!);
+    method public void setLogoDescription(@StringRes int);
+    method public void setLogoDescription(CharSequence!);
+    method public void setNavigationContentDescription(@StringRes int);
+    method public void setNavigationContentDescription(CharSequence?);
+    method public void setNavigationIcon(@DrawableRes int);
+    method public void setNavigationIcon(android.graphics.drawable.Drawable?);
+    method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
+    method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
+    method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+    method public void setPopupTheme(@StyleRes int);
+    method public void setSubtitle(@StringRes int);
+    method public void setSubtitle(CharSequence!);
+    method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
+    method public void setSubtitleTextColor(@ColorInt int);
+    method public void setTitle(@StringRes int);
+    method public void setTitle(CharSequence!);
     method public void setTitleMargin(int, int, int, int);
     method public void setTitleMarginBottom(int);
     method public void setTitleMarginEnd(int);
     method public void setTitleMarginStart(int);
     method public void setTitleMarginTop(int);
-    method public void setTitleTextAppearance(android.content.Context, int);
-    method public void setTitleTextColor(int);
+    method public void setTitleTextAppearance(android.content.Context!, @StyleRes int);
+    method public void setTitleTextColor(@ColorInt int);
     method public boolean showOverflowMenu();
   }
 
   public static class Toolbar.LayoutParams extends androidx.appcompat.app.ActionBar.LayoutParams {
-    ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet!);
     ctor public Toolbar.LayoutParams(int, int);
     ctor public Toolbar.LayoutParams(int, int, int);
     ctor public Toolbar.LayoutParams(int);
-    ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams);
-    ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams);
-    ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
+    ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
   }
 
-  public static abstract interface Toolbar.OnMenuItemClickListener {
-    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  public static interface Toolbar.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem!);
   }
 
   public static class Toolbar.SavedState extends androidx.customview.view.AbsSavedState {
-    ctor public Toolbar.SavedState(android.os.Parcel);
-    ctor public Toolbar.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public Toolbar.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<androidx.appcompat.widget.Toolbar.SavedState> CREATOR;
+    ctor public Toolbar.SavedState(android.os.Parcel!);
+    ctor public Toolbar.SavedState(android.os.Parcel!, ClassLoader!);
+    ctor public Toolbar.SavedState(android.os.Parcelable!);
+    field public static final android.os.Parcelable.Creator<androidx.appcompat.widget.Toolbar.SavedState>! CREATOR;
   }
 
   public class TooltipCompat {
-    method public static void setTooltipText(android.view.View, java.lang.CharSequence);
+    method public static void setTooltipText(android.view.View, CharSequence?);
   }
 
 }
diff --git a/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java b/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
index 588b8eec..82c52eb 100644
--- a/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
+++ b/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
@@ -15,24 +15,31 @@
  */
 package androidx.appcompat.widget;
 
+import static android.text.Layout.Alignment.ALIGN_NORMAL;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import android.content.Context;
 import android.os.Build;
+import android.text.StaticLayout;
 import android.text.method.SingleLineTransformationMethod;
 import android.util.AttributeSet;
 import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import androidx.annotation.Nullable;
 import androidx.appcompat.test.R;
 import androidx.core.widget.TextViewCompat;
 import androidx.test.filters.MediumTest;
+import androidx.test.filters.SdkSuppress;
 import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.lang.reflect.Field;
+
 @MediumTest
 @RunWith(AndroidJUnit4.class)
 public class AppCompatTextViewAutoSizeTest extends
@@ -88,6 +95,52 @@
         assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod);
     }
 
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
+    public void testSpacingIsSetPre16() throws NoSuchFieldException, IllegalAccessException {
+        final AppCompatTextView textView = (AppCompatTextView) mActivity
+                .getLayoutInflater().inflate(R.layout.textview_autosize_maxlines, null);
+        textView.setLineSpacing(5, 5);
+
+        final AppCompatTextViewAutoSizeHelper helper =
+                new AppCompatTextViewAutoSizeHelper(textView);
+        helper.initTempTextPaint(100);
+
+        final String text = mActivity.getResources().getString(R.string.sample_text1);
+        StaticLayout staticLayout = helper.createLayout(text, ALIGN_NORMAL, 100, 1);
+
+        final Field spacingMultField = TextView.class.getDeclaredField("mSpacingMult");
+        spacingMultField.setAccessible(true);
+        final float spacingMultReference = (float) spacingMultField.get(textView);
+        final float spacingMultActual = staticLayout.getSpacingMultiplier();
+        assertEquals(spacingMultReference, spacingMultActual, 0f);
+
+        final Field spacingAddField = TextView.class.getDeclaredField("mSpacingAdd");
+        spacingAddField.setAccessible(true);
+        final float spacingAddReference = (float) spacingAddField.get(textView);
+        final float spacingAddActual = staticLayout.getSpacingAdd();
+        assertEquals(spacingAddReference, spacingAddActual, 0f);
+
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
+    public void testSpacingIsSet() {
+        final AppCompatTextView textView = (AppCompatTextView) mActivity
+                .getLayoutInflater().inflate(R.layout.textview_autosize_maxlines,  null);
+        textView.setLineSpacing(5, 5);
+
+        final AppCompatTextViewAutoSizeHelper helper =
+                new AppCompatTextViewAutoSizeHelper(textView);
+        helper.initTempTextPaint(100);
+
+        final String text = mActivity.getResources().getString(R.string.sample_text1);
+        StaticLayout staticLayout = helper.createLayout(text, ALIGN_NORMAL, 100, 1);
+
+        assertEquals(textView.getLineSpacingMultiplier(), staticLayout.getSpacingMultiplier(), 0f);
+        assertEquals(textView.getLineSpacingExtra(), staticLayout.getSpacingAdd(), 0f);
+    }
+
     public static class CustomTextViewWithTransformationMethod extends AppCompatTextView {
         public CustomTextViewWithTransformationMethod(Context context) {
             super(context);
diff --git a/appcompat/src/androidTest/res/layout/appcompat_textview_autosize_activity.xml b/appcompat/src/androidTest/res/layout/appcompat_textview_autosize_activity.xml
index adfae6e..47d74bb 100644
--- a/appcompat/src/androidTest/res/layout/appcompat_textview_autosize_activity.xml
+++ b/appcompat/src/androidTest/res/layout/appcompat_textview_autosize_activity.xml
@@ -63,4 +63,11 @@
         app:autoSizeMaxTextSize="50dp"
         app:autoSizeStepGranularity="1px" />
 
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/textview_linespacing"
+        android:layout_width="100dp"
+        android:layout_height="200dp"
+        app:autoSizeMaxTextSize="20dp"
+        android:text="@string/sample_text1" />
+
 </LinearLayout>
\ No newline at end of file
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java b/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
index fd2bf85..8716f13 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
@@ -39,9 +39,11 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.R;
 import androidx.core.widget.TextViewCompat;
 
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -69,6 +71,10 @@
     // the method itself or null if it can not be found.
     private static ConcurrentHashMap<String, Method> sTextViewMethodByNameCache =
             new ConcurrentHashMap<>();
+    // Cache of TextView fields used via reflection; the key is the field name and the value is
+    // the field itself or null if it can not be found.
+    private static ConcurrentHashMap<String, Field> sTextViewFieldByNameCache =
+            new ConcurrentHashMap<>();
     // Use this to specify that any of the auto-size configuration int values have not been set.
     static final float UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE = -1f;
     // Ported from TextView#VERY_WIDE. Represents a maximum width in pixels the TextView takes when
@@ -655,6 +661,29 @@
         return mAutoSizeTextSizesInPx[bestSizeIndex];
     }
 
+    @VisibleForTesting
+    void initTempTextPaint(final int suggestedSizeInPx) {
+        if (mTempTextPaint == null) {
+            mTempTextPaint = new TextPaint();
+        } else {
+            mTempTextPaint.reset();
+        }
+        mTempTextPaint.set(mTextView.getPaint());
+        mTempTextPaint.setTextSize(suggestedSizeInPx);
+    }
+
+    @VisibleForTesting
+    StaticLayout createLayout(CharSequence text, Layout.Alignment alignment, int availableWidth,
+            int maxLines) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            return createStaticLayoutForMeasuring(text, alignment, availableWidth, maxLines);
+        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+            return createStaticLayoutForMeasuringPre23(text, alignment, availableWidth);
+        } else {
+            return createStaticLayoutForMeasuringPre16(text, alignment, availableWidth);
+        }
+    }
+
     private boolean suggestedSizeFitsInSpace(int suggestedSizeInPx, RectF availableSpace) {
         CharSequence text = mTextView.getText();
         TransformationMethod transformationMethod = mTextView.getTransformationMethod();
@@ -666,22 +695,13 @@
         }
 
         final int maxLines = Build.VERSION.SDK_INT >= 16 ? mTextView.getMaxLines() : -1;
-        if (mTempTextPaint == null) {
-            mTempTextPaint = new TextPaint();
-        } else {
-            mTempTextPaint.reset();
-        }
-        mTempTextPaint.set(mTextView.getPaint());
-        mTempTextPaint.setTextSize(suggestedSizeInPx);
+        initTempTextPaint(suggestedSizeInPx);
 
         // Needs reflection call due to being private.
         Layout.Alignment alignment = invokeAndReturnWithDefault(
                 mTextView, "getLayoutAlignment", Layout.Alignment.ALIGN_NORMAL);
-        final StaticLayout layout = Build.VERSION.SDK_INT >= 23
-                ? createStaticLayoutForMeasuring(
-                        text, alignment, Math.round(availableSpace.right), maxLines)
-                : createStaticLayoutForMeasuringPre23(
-                        text, alignment, Math.round(availableSpace.right));
+        final StaticLayout layout = createLayout(text, alignment, Math.round(availableSpace.right),
+                maxLines);
         // Lines overflow.
         if (maxLines != -1 && (layout.getLineCount() > maxLines
                 || (layout.getLineEnd(layout.getLineCount() - 1)) != text.length())) {
@@ -720,28 +740,12 @@
                 .build();
     }
 
+    @RequiresApi(16)
     private StaticLayout createStaticLayoutForMeasuringPre23(CharSequence text,
             Layout.Alignment alignment, int availableWidth) {
-        // Setup defaults.
-        float lineSpacingMultiplier = 1.0f;
-        float lineSpacingAdd = 0.0f;
-        boolean includePad = true;
-
-        if (Build.VERSION.SDK_INT >= 16) {
-            // Call public methods.
-            lineSpacingMultiplier = mTextView.getLineSpacingMultiplier();
-            lineSpacingAdd = mTextView.getLineSpacingExtra();
-            includePad = mTextView.getIncludeFontPadding();
-        } else {
-            // Call private methods and make sure to provide fallback defaults in case something
-            // goes wrong. The default values have been inlined with the StaticLayout defaults.
-            lineSpacingMultiplier = invokeAndReturnWithDefault(mTextView,
-                    "getLineSpacingMultiplier", lineSpacingMultiplier);
-            lineSpacingAdd = invokeAndReturnWithDefault(mTextView,
-                    "getLineSpacingExtra", lineSpacingAdd);
-            includePad = invokeAndReturnWithDefault(mTextView,
-                    "getIncludeFontPadding", includePad);
-        }
+        final float lineSpacingMultiplier = mTextView.getLineSpacingMultiplier();
+        final float lineSpacingAdd = mTextView.getLineSpacingExtra();
+        final boolean includePad = mTextView.getIncludeFontPadding();
 
         // The layout could not be constructed using the builder so fall back to the
         // most broad constructor.
@@ -752,7 +756,25 @@
                 includePad);
     }
 
-    private <T> T invokeAndReturnWithDefault(@NonNull Object object,
+    private StaticLayout createStaticLayoutForMeasuringPre16(CharSequence text,
+            Layout.Alignment alignment, int availableWidth) {
+        // The default values have been inlined with the StaticLayout defaults.
+
+        final float lineSpacingMultiplier = accessAndReturnWithDefault(mTextView,
+                "mSpacingMult", 1.0f);
+        final float lineSpacingAdd = accessAndReturnWithDefault(mTextView,
+                "mSpacingAdd", 0.0f);
+        final boolean includePad = accessAndReturnWithDefault(mTextView,
+                "mIncludePad", true);
+
+        return new StaticLayout(text, mTempTextPaint, availableWidth,
+                alignment,
+                lineSpacingMultiplier,
+                lineSpacingAdd,
+                includePad);
+    }
+
+    private static <T> T invokeAndReturnWithDefault(@NonNull Object object,
             @NonNull final String methodName, @NonNull final T defaultValue) {
         T result = null;
         boolean exceptionThrown = false;
@@ -773,8 +795,23 @@
         return result;
     }
 
+    private static <T> T accessAndReturnWithDefault(@NonNull Object object,
+            @NonNull final String fieldName, @NonNull final T defaultValue) {
+        try {
+            final Field field = getTextViewField(fieldName);
+            if (field == null) {
+                return defaultValue;
+            }
+
+            return (T) field.get(object);
+        }  catch (IllegalAccessException e) {
+            Log.w(TAG, "Failed to access TextView#" + fieldName + " member", e);
+            return defaultValue;
+        }
+    }
+
     @Nullable
-    private Method getTextViewMethod(@NonNull final String methodName) {
+    private static Method getTextViewMethod(@NonNull final String methodName) {
         try {
             Method method = sTextViewMethodByNameCache.get(methodName);
             if (method == null) {
@@ -793,6 +830,25 @@
         }
     }
 
+    @Nullable
+    private static Field getTextViewField(@NonNull final String fieldName) {
+        try {
+            Field field = sTextViewFieldByNameCache.get(fieldName);
+            if (field == null) {
+                field = TextView.class.getDeclaredField(fieldName);
+                if (field != null) {
+                    field.setAccessible(true);
+                    sTextViewFieldByNameCache.put(fieldName, field);
+                }
+            }
+
+            return field;
+        } catch (NoSuchFieldException e) {
+            Log.w(TAG, "Failed to access TextView#" + fieldName + " member", e);
+            return null;
+        }
+    }
+
     /**
      * @return {@code true} if this widget supports auto-sizing text and has been configured to
      * auto-size.
diff --git a/biometric/res/values-bn/strings.xml b/biometric/res/values-bn/strings.xml
new file mode 100644
index 0000000..94759b1
--- /dev/null
+++ b/biometric/res/values-bn/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"আঙ্গুলের ছাপের সেন্সর টাচ করুন"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"শনাক্ত করা যায়নি"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"সহায়তার মেসেজ দেখানোর জায়গা"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার উপলভ্য নয়।"</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"কোনও আঙ্গুলের ছাপ নথিভুক্ত নেই।"</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"এই ডিভাইসে আঙ্গুলের ছাপ নেওয়ার সেন্সর নেই"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"ব্যবহারকারী আঙ্গুলের ছাপ নেওয়ার অপারেশনটি বাতিল করেছেন।"</string>
+</resources>
diff --git a/biometric/res/values-de/strings.xml b/biometric/res/values-de/strings.xml
index f045682..2b53818 100644
--- a/biometric/res/values-de/strings.xml
+++ b/biometric/res/values-de/strings.xml
@@ -17,7 +17,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Berühre den Fingerabdrucksensor"</string>
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Fingerabdrucksensor berühren"</string>
     <string name="fingerprint_not_recognized" msgid="5491287833813257925">"Nicht erkannt"</string>
     <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"Bereich für die Hilfemeldung"</string>
     <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"Fingerabdruckhardware nicht verfügbar."</string>
diff --git a/biometric/res/values-fr-rCA/strings.xml b/biometric/res/values-fr-rCA/strings.xml
index 02122d7..9fcafb5 100644
--- a/biometric/res/values-fr-rCA/strings.xml
+++ b/biometric/res/values-fr-rCA/strings.xml
@@ -23,5 +23,5 @@
     <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"Le matériel de lecture d\'empreintes digitales n\'est pas accessible."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"Aucune empreinte digitale enregistrée."</string>
     <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"Cet appareil ne possède pas de capteur d\'empreintes digitales"</string>
-    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"L\'opération d\'empreinte digitale a été annulée par l\'utilisateur."</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"L\'opération d\'authentification par empreinte digitale a été annulée par l\'utilisateur."</string>
 </resources>
diff --git a/biometric/res/values-fr/strings.xml b/biometric/res/values-fr/strings.xml
index 3f94cbb..6c87c96 100644
--- a/biometric/res/values-fr/strings.xml
+++ b/biometric/res/values-fr/strings.xml
@@ -17,10 +17,10 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Appuyez sur lecteur empr. dig."</string>
-    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"Non reconnu"</string>
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Appuyez sur lecteur d\'empreinte"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"Non reconnue"</string>
     <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"Zone de message d\'aide"</string>
-    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"Matériel d\'empreinte numérique indisponible."</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"Matériel de lecture d\'empreinte digitale indisponible."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"Aucune empreinte digitale enregistrée."</string>
     <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"Aucun lecteur d\'empreinte digitale n\'est installé sur cet appareil"</string>
     <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"Opération d\'authentification par empreinte digitale annulée par l\'utilisateur."</string>
diff --git a/biometric/res/values-gl/strings.xml b/biometric/res/values-gl/strings.xml
index d24c5c3..627f843 100644
--- a/biometric/res/values-gl/strings.xml
+++ b/biometric/res/values-gl/strings.xml
@@ -17,7 +17,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Toca sensor impresión dixital"</string>
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Toca o sensor de impresión dixital"</string>
     <string name="fingerprint_not_recognized" msgid="5491287833813257925">"Non se recoñeceu"</string>
     <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"Área de mensaxes de axuda"</string>
     <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"O hardware de impresión dixital non está dispoñible."</string>
diff --git a/biometric/res/values-gu/strings.xml b/biometric/res/values-gu/strings.xml
new file mode 100644
index 0000000..f40c47a
--- /dev/null
+++ b/biometric/res/values-gu/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"ફિંગરપ્રિન્ટના સેન્સરને સ્પર્શ કરો"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"ઓળખાયેલ નથી"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"સહાય સંદેશનું ક્ષેત્ર"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"ફિંગરપ્રિન્ટ હાર્ડવેર ઉપલબ્ધ નથી."</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"કોઈ ફિંગરપ્રિન્ટની નોંધણી કરવામાં આવી નથી."</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"આ ડિવાઇસમાં કોઈ ફિંગરપ્રિન્ટ સેન્સર નથી"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"ફિંગરપ્રિન્ટ ચકાસવાની પ્રક્રિયા વપરાશકર્તાએ રદ કરી."</string>
+</resources>
diff --git a/biometric/res/values-it/strings.xml b/biometric/res/values-it/strings.xml
index 433f001..7fa3559 100644
--- a/biometric/res/values-it/strings.xml
+++ b/biometric/res/values-it/strings.xml
@@ -17,8 +17,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Tocca il sensore di impronte digitali"</string>
-    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"Non riconosciuto"</string>
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Tocca sensore impronte digitali"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"Non riconosciuta"</string>
     <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"Area dei messaggi di assistenza"</string>
     <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"Hardware per l\'impronta digitale non disponibile."</string>
     <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"Nessuna impronta digitale registrata."</string>
diff --git a/biometric/res/values-km/strings.xml b/biometric/res/values-km/strings.xml
index 38beac95..8604351 100644
--- a/biometric/res/values-km/strings.xml
+++ b/biometric/res/values-km/strings.xml
@@ -20,8 +20,8 @@
     <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"ប៉ះ​ឧបករណ៍​ចាប់ស្នាម​ម្រាមដៃ"</string>
     <string name="fingerprint_not_recognized" msgid="5491287833813257925">"មិនអាចសម្គាល់បានទេ"</string>
     <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"តំបន់សារ​ជំនួយ"</string>
-    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"មិន​អាច​ប្រើផ្នែករឹង​ស្នាមម្រាមដៃបាន​ទេ។"</string>
-    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"មិន​មាន​ការ​ចុះឈ្មោះស្នាម​ម្រាមដៃទេ។"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"មិន​អាច​ប្រើហាតវែរ​ស្នាមម្រាមដៃបាន​ទេ។"</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"មិន​មាន​ការ​ថតបញ្ចូល​ស្នាម​ម្រាមដៃទេ។"</string>
     <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"ឧបករណ៍នេះ​មិនមាន​ឧបករណ៍ចាប់​ស្នាមម្រាមដៃទេ"</string>
     <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"ប្រតិបត្តិការ​ស្នាម​ម្រាម​ដៃ​ត្រូវ​បាន​បោះ​បង់​ដោយ​អ្នក​ប្រើប្រាស់។"</string>
 </resources>
diff --git a/biometric/res/values-ne/strings.xml b/biometric/res/values-ne/strings.xml
new file mode 100644
index 0000000..c09084f
--- /dev/null
+++ b/biometric/res/values-ne/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"फिंगरप्रिन्ट सेन्सरमा छुनुहोस्‌"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"पहिचान भएन"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"मद्दतसम्बन्धी सन्देशको क्षेत्र"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"फिंगरप्रिन्ट हार्डवेयर उपलब्ध छैन।"</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"कुनै पनि फिंगरप्रिन्ट दर्ता गरिएको छैन।"</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"यो यन्त्रमा कुनै फिंगरप्रिन्ट सेन्सर छैन"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"प्रयोगकर्ताले फिंगरप्रिन्टसम्बन्धी कारबाही रद्द गर्नुभयो।"</string>
+</resources>
diff --git a/biometric/res/values-or/strings.xml b/biometric/res/values-or/strings.xml
new file mode 100644
index 0000000..8505536
--- /dev/null
+++ b/biometric/res/values-or/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନସର୍‌କୁ ଛୁଅଁନ୍ତୁ"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"ଚିହ୍ନଟ ହେଲାନାହିଁ"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"ସହାୟତା ମେସେଜ୍ କ୍ଷେତ୍ର"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ହାର୍ଡୱେର୍‍ ଉପଲବ୍ଧ ନାହିଁ।"</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"କୌଣସି ଆଙ୍ଗୁଠି ଚିହ୍ନ ପଞ୍ଜୀକୃତ ହୋଇନାହିଁ।"</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"ଏହି ଡିଭାଇସ୍‌ରେ ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନସର୍‌ ନାହିଁ"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"ୟୁଜର୍‌ଙ୍କ ଦ୍ଵାରା ଆଙ୍ଗୁଠି ଚିହ୍ନ ନେବା କାମକୁ କ୍ୟାନ୍ସଲ୍ କରିଦିଆଯାଇଛି।"</string>
+</resources>
diff --git a/biometric/res/values-pa/strings.xml b/biometric/res/values-pa/strings.xml
new file mode 100644
index 0000000..a9c8aca
--- /dev/null
+++ b/biometric/res/values-pa/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"ਮਦਦ ਸੁਨੇਹਾ ਖੇਤਰ"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਾਰਡਵੇਅਰ ਉਪਲਬਧ ਨਹੀਂ।"</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"ਕੋਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਰਜ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।"</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨਹੀਂ ਹੈ"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੇ ਪੁਸ਼ਟੀਕਰਨ ਦੀ ਕਾਰਵਾਈ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ ਰੱਦ ਕੀਤੀ ਗਈ।"</string>
+</resources>
diff --git a/biometric/res/values-pt-rPT/strings.xml b/biometric/res/values-pt-rPT/strings.xml
index 0e837d4..753ae64 100644
--- a/biometric/res/values-pt-rPT/strings.xml
+++ b/biometric/res/values-pt-rPT/strings.xml
@@ -17,7 +17,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Toque no sensor impr. digit."</string>
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"Toque no sensor de impressões digitais"</string>
     <string name="fingerprint_not_recognized" msgid="5491287833813257925">"Não reconhecida."</string>
     <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"Área da mensagem de ajuda"</string>
     <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"Hardware de impressão digital não disponível."</string>
diff --git a/biometric/res/values-ta/strings.xml b/biometric/res/values-ta/strings.xml
new file mode 100644
index 0000000..1aa662d
--- /dev/null
+++ b/biometric/res/values-ta/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"கைரேகை சென்சாரைத் தொடுக"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"பொருந்தவில்லை"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"உதவிச் செய்திக்கான பகுதி"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"கைரேகை வன்பொருள் இல்லை."</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"கைரேகைப் பதிவுகள் எதுவுமில்லை."</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"இந்தச் சாதனத்தில் கைரேகை சென்சார் இல்லை"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"கைரேகைச் சரிபார்ப்பு பயனரால் ரத்துசெய்யப்பட்டது."</string>
+</resources>
diff --git a/biometric/res/values-te/strings.xml b/biometric/res/values-te/strings.xml
new file mode 100644
index 0000000..d995f7b
--- /dev/null
+++ b/biometric/res/values-te/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"వేలిముద్ర సెన్సార్‌ను తాకండి"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"గుర్తించబడలేదు"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"సహాయ సందేశ ప్రాంతం"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"వేలిముద్ర హార్డ్‌వేర్ అందుబాటులో లేదు."</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"వేలిముద్రలు నమోదు చేయబడలేదు."</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"ఈ పరికరంలో వేలిముద్ర సెన్సార్ లేదు"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"వేలిముద్ర చర్యని వినియోగదారు రద్దు చేసారు."</string>
+</resources>
diff --git a/biometric/res/values-ur/strings.xml b/biometric/res/values-ur/strings.xml
new file mode 100644
index 0000000..183145d
--- /dev/null
+++ b/biometric/res/values-ur/strings.xml
@@ -0,0 +1,27 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"فنگر پرنٹ سینسر کو ٹچ کریں"</string>
+    <string name="fingerprint_not_recognized" msgid="5491287833813257925">"شناخت نہیں ہو سکی"</string>
+    <string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"مدد کے پیغام کا علاقہ"</string>
+    <string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"فنگر پرنٹ ہارڈ ویئر دستیاب نہیں ہے۔"</string>
+    <string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"کوئی فنگر پرنٹ مندرج نہیں ہے۔"</string>
+    <string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"اس آلہ میں فنگر پرنٹ سینسر نہیں ہے"</string>
+    <string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"صارف نے فنگر پرنٹ کی کارروائی منسوخ کر دی۔"</string>
+</resources>
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 6ed2006..0eb051b 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -49,7 +49,7 @@
     val DYNAMICANIMATION_KTX = Version("1.0.0-alpha01")
     val EMOJI = Version("1.0.0")
     val EXIFINTERFACE = Version("1.0.0")
-    val FRAGMENT = Version("1.1.0-alpha01")
+    val FRAGMENT = Version("1.1.0-alpha02")
     val FUTURES = Version("1.0.0-alpha02")
     val GRIDLAYOUT = Version("1.1.0-alpha01")
     val HEIFWRITER = Version("1.0.0")
@@ -58,7 +58,7 @@
     val LEANBACK = Version("1.1.0-alpha01")
     val LEANBACK_PREFERENCE = Version("1.1.0-alpha01")
     val LEGACY = Version("1.0.0")
-    val LOCALBROADCASTMANAGER = Version("1.0.0")
+    val LOCALBROADCASTMANAGER = Version("1.1.0-alpha01")
     val LIFECYCLE = Version("2.1.0-alpha01")
     val LIFECYCLES_SAVEDSTATE = Version("1.0.0-alpha01")
     val LOADER = Version("1.1.0-alpha01")
@@ -95,5 +95,5 @@
     val VIEWPAGER2 = Version("1.0.0")
     val WEAR = Version("1.0.0")
     val WEBKIT = Version("1.1.0-alpha01")
-    val WORKMANAGER = Version("1.0.0-alpha11")
+    val WORKMANAGER = Version("1.0.0-alpha12")
 }
diff --git a/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt
index 808174a..df154fb 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt
@@ -117,7 +117,9 @@
         // only run aotCompile on N+, where it's supported
         val inject = "if ((`getprop ro.build.version.sdk` >= 24)); then $aotCompile; fi"
         // NOTE: we assume here that all benchmarks have apk name $projectname-debug-androidTest.apk
-        val options = "/data/local/tmp/$name-debug-androidTest.apk && $inject #"
+        // This will only run benchmark generated by minDepVersions builds.
+        // TODO(obenabde): test both build flavors instead of only minDepVersions
+        val options = "/data/local/tmp/$name-minDepVersions-debug-androidTest.apk && $inject #"
         extension.adbOptions.setInstallOptions(*options.split(" ").toTypedArray())
     }
 }
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiTask.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiCompatibilityTask.kt
similarity index 89%
rename from buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiTask.kt
rename to buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiCompatibilityTask.kt
index 7dddb6e..1bae9fb 100644
--- a/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiCompatibilityTask.kt
@@ -27,7 +27,7 @@
 import java.io.File
 
 /** Validate an API signature text file against a set of source files. */
-open class CheckApiTask : MetalavaTask() {
+open class CheckApiCompatibilityTask : MetalavaTask() {
     /**
      * Text file from which the API signatures will be obtained.
      *
@@ -37,10 +37,6 @@
     @get:OutputFile
     var apiTxtFile: File? = null
 
-    /** Whether to permit API additions **/
-    @get:Input
-    var allowApiAdditions: Boolean = false
-
     @TaskAction
     fun exec() {
         val dependencyClasspath = checkNotNull(
@@ -56,7 +52,7 @@
             "--source-path",
             sourcePaths.filter { it.exists() }.joinToString(File.pathSeparator),
 
-            "--check-compatibility:api:" + if (allowApiAdditions) { "released" } else { "current" },
+            "--check-compatibility:api:released",
             apiTxtFile.toString(),
 
             "--compatible-output=no",
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
new file mode 100644
index 0000000..55866e1
--- /dev/null
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.build.metalava
+
+import com.android.build.gradle.BaseExtension
+import com.android.build.gradle.api.BaseVariant
+import org.apache.commons.io.FileUtils
+import org.gradle.api.attributes.Attribute
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.FileCollection
+import org.gradle.api.GradleException
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.TaskAction
+import java.io.File
+
+/** Compares two API txt files against each other. */
+open class CheckApiEquivalenceTask : DefaultTask() {
+    /**
+     * Api file (in the build dir) to check
+     *
+     * Note: Marked as an output so that this task will be properly incremental.
+     */
+    @get:InputFile
+    @get:OutputFile
+    var file1: File? = null
+
+    /**
+     * Api file (in source control) to compare against
+     */
+    @get:InputFile
+    var file2: File? = null
+
+    /**
+     * Message to show on failure
+     */
+    var failureMessage: String = "Public API definition has changed. Please run ./gradlew updateApi to confirm\n" +
+                "these changes are intentional by updating the public API definition."
+
+    @TaskAction
+    fun exec() {
+        val file1 = checkNotNull(file1) { "file1 not set" }
+        val file2 = checkNotNull(file2) { "file2 not set" }
+        if (!FileUtils.contentEquals(file1, file2)) {
+            throw GradleException(failureMessage);
+        }
+    }
+}
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiTask.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/GenerateApiTask.kt
similarity index 67%
copy from buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiTask.kt
copy to buildSrc/src/main/kotlin/androidx/build/metalava/GenerateApiTask.kt
index 7dddb6e..01bd23d 100644
--- a/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/GenerateApiTask.kt
@@ -18,34 +18,25 @@
 
 import com.android.build.gradle.BaseExtension
 import com.android.build.gradle.api.BaseVariant
+import com.google.common.io.Files
 import org.gradle.api.attributes.Attribute
 import org.gradle.api.file.FileCollection
-import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.InputFiles
 import org.gradle.api.tasks.OutputFile
 import org.gradle.api.tasks.TaskAction
 import java.io.File
 
-/** Validate an API signature text file against a set of source files. */
-open class CheckApiTask : MetalavaTask() {
-    /**
-     * Text file from which the API signatures will be obtained.
-     *
-     * Note: Marked as an output so that this task will be properly incremental.
-     */
-    @get:InputFile
+/** Generate an API signature text file from a set of source files. */
+open class GenerateApiTask : MetalavaTask() {
+    /** Text file to which API signatures will be written. */
     @get:OutputFile
-    var apiTxtFile: File? = null
-
-    /** Whether to permit API additions **/
-    @get:Input
-    var allowApiAdditions: Boolean = false
+    var apiFile: File? = null
 
     @TaskAction
     fun exec() {
         val dependencyClasspath = checkNotNull(
                 dependencyClasspath) { "Dependency classpath not set." }
-        val apiTxtFile = checkNotNull(apiTxtFile) { "Current API file not set." }
+        val apiFile = checkNotNull(apiFile) { "Current API file not set." }
         check(bootClasspath.isNotEmpty()) { "Android boot classpath not set." }
         check(sourcePaths.isNotEmpty()) { "Source paths not set." }
 
@@ -56,12 +47,12 @@
             "--source-path",
             sourcePaths.filter { it.exists() }.joinToString(File.pathSeparator),
 
-            "--check-compatibility:api:" + if (allowApiAdditions) { "released" } else { "current" },
-            apiTxtFile.toString(),
+            "--api",
+            apiFile.toString(),
 
             "--compatible-output=no",
             "--omit-common-packages=yes",
-            "--input-kotlin-nulls=yes"
+            "--output-kotlin-nulls=yes"
         )
     }
 }
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/Metalava.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/Metalava.kt
index 8618477..cc76bcf 100644
--- a/buildSrc/src/main/kotlin/androidx/build/metalava/Metalava.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/Metalava.kt
@@ -23,6 +23,7 @@
 import androidx.build.checkapi.getRequiredCompatibilityApiFile
 import androidx.build.checkapi.hasApiFolder
 import androidx.build.checkapi.hasApiTasks
+import androidx.build.docsDir
 import androidx.build.java.JavaCompileInputs
 import androidx.build.Release
 import com.android.build.gradle.LibraryExtension
@@ -30,6 +31,7 @@
 import org.gradle.api.artifacts.Configuration
 import org.gradle.api.plugins.JavaPluginConvention
 import org.gradle.kotlin.dsl.getPlugin
+import java.io.File
 
 object Metalava {
     private fun Project.createMetalavaConfiguration(): Configuration {
@@ -48,8 +50,6 @@
             return
         }
 
-        val metalavaConfiguration = project.createMetalavaConfiguration()
-
         library.libraryVariants.all { variant ->
             if (variant.name == Release.DEFAULT_PUBLISH_CONFIG) {
                 if (!project.hasApiFolder()) {
@@ -58,26 +58,8 @@
                     return@all
                 }
 
-                val apiTxt = project.getCurrentApiFile()
-
                 val javaInputs = JavaCompileInputs.fromLibraryVariant(library, variant)
-
-                val checkApi = project.tasks.create("checkApi", CheckApiTask::class.java) { task ->
-                    task.configuration = metalavaConfiguration
-                    task.apiTxtFile = apiTxt
-                    task.dependsOn(metalavaConfiguration)
-                }
-                applyInputs(javaInputs, checkApi)
-
-                project.tasks.getByName("check").dependsOn(checkApi)
-                project.rootProject.tasks.getByName(BUILD_ON_SERVER_TASK).dependsOn(checkApi)
-
-                val updateApi = project.tasks.create("updateApi", UpdateApiTask::class.java) { task ->
-                    task.configuration = metalavaConfiguration
-                    task.apiTxtFile = apiTxt
-                    task.dependsOn(metalavaConfiguration)
-                }
-                applyInputs(javaInputs, updateApi)
+                setupProject(project, javaInputs)
             }
         }
     }
@@ -95,43 +77,10 @@
             return
         }
 
-        val metalavaConfiguration = project.createMetalavaConfiguration()
-
         val javaPluginConvention = project.convention.getPlugin<JavaPluginConvention>()
         val mainSourceSet = javaPluginConvention.sourceSets.getByName("main")
-
-        val currentApiFile = project.getCurrentApiFile()
-
         val javaInputs = JavaCompileInputs.fromSourceSet(mainSourceSet, project)
-
-        val checkApi = project.tasks.create("checkApi", CheckApiTask::class.java) { task ->
-            task.configuration = metalavaConfiguration
-            task.apiTxtFile = currentApiFile
-            task.dependsOn(metalavaConfiguration)
-        }
-        applyInputs(javaInputs, checkApi)
-
-        val lastReleasedApiFile = project.getRequiredCompatibilityApiFile()
-        if (lastReleasedApiFile != null) {
-            val checkApiRelease = project.tasks.create("checkApiRelease", CheckApiTask::class.java) { task ->
-                 task.configuration = metalavaConfiguration
-                 task.apiTxtFile = lastReleasedApiFile
-                 task.allowApiAdditions = true
-                 task.dependsOn(metalavaConfiguration)
-             }
-             applyInputs(javaInputs, checkApiRelease)
-             checkApi.dependsOn(checkApiRelease)
-        }
-
-        val updateApi = project.tasks.create("updateApi", UpdateApiTask::class.java) { task ->
-            task.configuration = metalavaConfiguration
-            task.apiTxtFile = currentApiFile
-            task.dependsOn(metalavaConfiguration)
-        }
-        applyInputs(javaInputs, updateApi)
-
-        project.tasks.getByName("check").dependsOn(checkApi)
-        project.rootProject.tasks.getByName(BUILD_ON_SERVER_TASK).dependsOn(checkApi)
+        setupProject(project, javaInputs)
     }
 
     fun applyInputs(inputs: JavaCompileInputs, task: MetalavaTask) {
@@ -139,4 +88,43 @@
         task.dependencyClasspath = inputs.dependencyClasspath
         task.bootClasspath = inputs.bootClasspath
     }
+
+    fun setupProject(project: Project, javaCompileInputs: JavaCompileInputs) {
+        val metalavaConfiguration = project.createMetalavaConfiguration()
+        val currentApiFile = project.getCurrentApiFile()
+
+        var generateApi = project.tasks.create("generateApi", GenerateApiTask::class.java) { task ->
+            task.apiFile = File(project.docsDir(), "release/${project.name}/current.txt")
+            task.configuration = metalavaConfiguration
+            task.dependsOn(metalavaConfiguration)
+        }
+        applyInputs(javaCompileInputs, generateApi)
+
+        val checkApi = project.tasks.create("checkApi", CheckApiEquivalenceTask::class.java) { task ->
+            task.file1 = currentApiFile
+            task.file2 = generateApi.apiFile
+            task.dependsOn(generateApi)
+        }
+
+        val lastReleasedApiFile = project.getRequiredCompatibilityApiFile()
+        if (lastReleasedApiFile != null) {
+            val checkApiRelease = project.tasks.create("checkApiRelease", CheckApiCompatibilityTask::class.java) { task ->
+                 task.configuration = metalavaConfiguration
+                 task.apiTxtFile = lastReleasedApiFile
+                 task.dependsOn(metalavaConfiguration)
+             }
+             applyInputs(javaCompileInputs, checkApiRelease)
+             checkApi.dependsOn(checkApiRelease)
+        }
+
+        val updateApi = project.tasks.create("updateApi", UpdateApiTask::class.java) { task ->
+            task.inputApiFile = generateApi.apiFile
+            task.outputApiFile = currentApiFile
+            task.dependsOn(generateApi)
+        }
+
+        project.tasks.getByName("check").dependsOn(checkApi)
+        project.rootProject.tasks.getByName(BUILD_ON_SERVER_TASK).dependsOn(checkApi)
+
+    }
 }
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
index 65a2dd6..9cf259e 100644
--- a/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
@@ -20,42 +20,35 @@
 import com.android.build.gradle.api.BaseVariant
 import com.google.common.io.Files
 import org.gradle.api.attributes.Attribute
+import org.gradle.api.DefaultTask
 import org.gradle.api.file.FileCollection
+import org.gradle.api.logging.Logger
 import org.gradle.api.tasks.InputFiles
 import org.gradle.api.tasks.OutputFile
 import org.gradle.api.tasks.TaskAction
 import java.io.File
 
 /** Generate an API signature text file from a set of source files. */
-open class UpdateApiTask : MetalavaTask() {
+open class UpdateApiTask : DefaultTask() {
     /** Text file to which API signatures will be written. */
     @get:OutputFile
-    var apiTxtFile: File? = null
+    var outputApiFile: File? = null
+
+    /** Text file from which API signatures will be read. */
+    var inputApiFile: File? = null
 
     @TaskAction
     fun exec() {
-        val dependencyClasspath = checkNotNull(
-                dependencyClasspath) { "Dependency classpath not set." }
-        val apiTxtFile = checkNotNull(apiTxtFile) { "Current API file not set." }
-        check(bootClasspath.isNotEmpty()) { "Android boot classpath not set." }
-        check(sourcePaths.isNotEmpty()) { "Source paths not set." }
-
-        runWithArgs(
-            "--classpath",
-            (bootClasspath + dependencyClasspath.files).joinToString(File.pathSeparator),
-
-            "--source-path",
-            sourcePaths.filter { it.exists() }.joinToString(File.pathSeparator),
-
-            "--api",
-            apiTxtFile.toString(),
-
-            "--compatible-output=no",
-            "--omit-common-packages=yes",
-            "--output-kotlin-nulls=yes"
-        )
-        if (apiTxtFile.name != "current.txt") {
-            Files.copy(apiTxtFile, File(apiTxtFile.parentFile, "current.txt"))
+        val inputApiFile = checkNotNull(inputApiFile) { "inputApiFile not set" }
+        val outputApiFile = checkNotNull(outputApiFile) { "outputApiFile not set" }
+        copy(inputApiFile, outputApiFile, project.logger)
+        if (outputApiFile.name != "current.txt") {
+            copy(outputApiFile, File(outputApiFile.parentFile, "current.txt"), project.logger)
         }
     }
+
+    fun copy(source: File, dest: File, logger: Logger) {
+        Files.copy(source, dest)
+        logger.lifecycle("Copied ${source} to ${dest}")
+    }
 }
diff --git a/car/core/res/layout/car_checkbox_widget.xml b/car/core/res/layout/car_checkbox_widget.xml
index 14a0f1f..4e8ca3b 100644
--- a/car/core/res/layout/car_checkbox_widget.xml
+++ b/car/core/res/layout/car_checkbox_widget.xml
@@ -15,13 +15,10 @@
   ~ limitations under the License.
   -->
 
-<!-- This layout is inflated by android.R.layout.preference so the id cannot change -->
 <CheckBox
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@android:id/checkbox"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:button="@drawable/car_checkbox"
-    android:focusable="false"
-    android:clickable="false"
     android:background="?android:attr/listChoiceIndicatorMultiple" />
\ No newline at end of file
diff --git a/car/core/res/layout/car_switch_compat_widget.xml b/car/core/res/layout/car_switch_compat_widget.xml
index 7a525b8..f36cd8d 100644
--- a/car/core/res/layout/car_switch_compat_widget.xml
+++ b/car/core/res/layout/car_switch_compat_widget.xml
@@ -15,12 +15,8 @@
   ~ limitations under the License.
   -->
 
-<!-- This layout is inflated by android.R.layout.preference so the id cannot change -->
 <androidx.appcompat.widget.SwitchCompat
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/switchWidget"
     android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:focusable="false"
-    android:clickable="false"
-    android:background="@null"/>
\ No newline at end of file
+    android:layout_height="wrap_content"/>
\ No newline at end of file
diff --git a/car/core/res/layout/car_switch_widget.xml b/car/core/res/layout/car_switch_widget.xml
index adea0f8..58607ee 100644
--- a/car/core/res/layout/car_switch_widget.xml
+++ b/car/core/res/layout/car_switch_widget.xml
@@ -15,13 +15,9 @@
   ~ limitations under the License.
   -->
 
-<!-- This layout is inflated by android.R.layout.preference so the id cannot change -->
 <Switch
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@android:id/switch_widget"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:focusable="false"
-    android:clickable="false"
-    android:background="@null"
-    style="@style/Widget.Car.Switch"/>
\ No newline at end of file
+    style="?attr/switchStyle"/>
\ No newline at end of file
diff --git a/car/core/res/layout/preference_car_checkbox_widget.xml b/car/core/res/layout/preference_car_checkbox_widget.xml
new file mode 100644
index 0000000..14a0f1f
--- /dev/null
+++ b/car/core/res/layout/preference_car_checkbox_widget.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<!-- This layout is inflated by android.R.layout.preference so the id cannot change -->
+<CheckBox
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/checkbox"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:button="@drawable/car_checkbox"
+    android:focusable="false"
+    android:clickable="false"
+    android:background="?android:attr/listChoiceIndicatorMultiple" />
\ No newline at end of file
diff --git a/media-widget/src/androidTest/res/layout/videoview2_layout.xml b/car/core/res/layout/preference_car_switch_compat_widget.xml
similarity index 62%
copy from media-widget/src/androidTest/res/layout/videoview2_layout.xml
copy to car/core/res/layout/preference_car_switch_compat_widget.xml
index 40e07d5..7a525b8 100644
--- a/media-widget/src/androidTest/res/layout/videoview2_layout.xml
+++ b/car/core/res/layout/preference_car_switch_compat_widget.xml
@@ -14,13 +14,13 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
 
-    <androidx.media.widget.VideoView2
-        android:id="@+id/videoview"
-        android:layout_width="160dp"
-        android:layout_height="120dp"/>
-</LinearLayout>
+<!-- This layout is inflated by android.R.layout.preference so the id cannot change -->
+<androidx.appcompat.widget.SwitchCompat
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/switchWidget"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:focusable="false"
+    android:clickable="false"
+    android:background="@null"/>
\ No newline at end of file
diff --git a/media-widget/src/androidTest/res/layout/mediacontrolview2test_layout.xml b/car/core/res/layout/preference_car_switch_widget.xml
similarity index 61%
copy from media-widget/src/androidTest/res/layout/mediacontrolview2test_layout.xml
copy to car/core/res/layout/preference_car_switch_widget.xml
index 9671f72..6a8cea0 100644
--- a/media-widget/src/androidTest/res/layout/mediacontrolview2test_layout.xml
+++ b/car/core/res/layout/preference_car_switch_widget.xml
@@ -14,13 +14,14 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:orientation="vertical"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent">
 
-    <androidx.media.widget.VideoView2
-            android:id="@+id/videoview"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"/>
-</LinearLayout>
\ No newline at end of file
+<!-- This layout is inflated by android.R.layout.preference so the id cannot change -->
+<Switch
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/switch_widget"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:focusable="false"
+    android:clickable="false"
+    android:background="@null"
+    style="?attr/switchStyle"/>
\ No newline at end of file
diff --git a/car/core/res/values/styles.xml b/car/core/res/values/styles.xml
index 46ad7dd..3f4d207 100644
--- a/car/core/res/values/styles.xml
+++ b/car/core/res/values/styles.xml
@@ -499,17 +499,17 @@
 
     <style name="CarPreference.CheckBoxPreference">
         <item name="android:layout">@layout/preference_material_car</item>
-        <item name="android:widgetLayout">@layout/car_checkbox_widget</item>
+        <item name="android:widgetLayout">@layout/preference_car_checkbox_widget</item>
     </style>
 
     <style name="CarPreference.SwitchPreferenceCompat">
         <item name="android:layout">@layout/preference_material_car</item>
-        <item name="android:widgetLayout">@layout/car_switch_compat_widget</item>
+        <item name="android:widgetLayout">@layout/preference_car_switch_compat_widget</item>
     </style>
 
     <style name="CarPreference.SwitchPreference">
         <item name="android:layout">@layout/preference_material_car</item>
-        <item name="android:widgetLayout">@layout/car_switch_widget</item>
+        <item name="android:widgetLayout">@layout/preference_car_switch_widget</item>
     </style>
 
     <style name="CarPreference.SeekBarPreference">
diff --git a/coordinatorlayout/api/1.0.0.txt b/coordinatorlayout/api/1.0.0.txt
index b6242e3..37c4526 100644
--- a/coordinatorlayout/api/1.0.0.txt
+++ b/coordinatorlayout/api/1.0.0.txt
@@ -1,45 +1,46 @@
+// Signature format: 2.0
 package androidx.coordinatorlayout.widget {
 
   public class CoordinatorLayout extends android.view.ViewGroup implements androidx.core.view.NestedScrollingParent2 {
     ctor public CoordinatorLayout(android.content.Context);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet?);
+    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet?, @AttrRes int);
     method public void dispatchDependentViewsChanged(android.view.View);
     method public boolean doViewsOverlap(android.view.View, android.view.View);
-    method protected androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams generateDefaultLayoutParams();
-    method public androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method protected androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+    method protected androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
     method public java.util.List<android.view.View> getDependencies(android.view.View);
     method public java.util.List<android.view.View> getDependents(android.view.View);
-    method public android.graphics.drawable.Drawable getStatusBarBackground();
+    method public android.graphics.drawable.Drawable? getStatusBarBackground();
     method public boolean isPointInChildBounds(android.view.View, int, int);
     method public void onAttachedToWindow();
     method public void onDetachedFromWindow();
-    method public void onDraw(android.graphics.Canvas);
+    method public void onDraw(android.graphics.Canvas!);
     method public void onLayoutChild(android.view.View, int);
-    method public void onMeasureChild(android.view.View, int, int, int, int);
-    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View, int);
-    method public void setStatusBarBackground(android.graphics.drawable.Drawable);
-    method public void setStatusBarBackgroundColor(int);
-    method public void setStatusBarBackgroundResource(int);
+    method public void onMeasureChild(android.view.View!, int, int, int, int);
+    method public void onNestedPreScroll(android.view.View!, int, int, int[]!, int);
+    method public void onNestedScroll(android.view.View!, int, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View!, android.view.View!, int, int);
+    method public boolean onStartNestedScroll(android.view.View!, android.view.View!, int, int);
+    method public void onStopNestedScroll(android.view.View!, int);
+    method public void setStatusBarBackground(android.graphics.drawable.Drawable?);
+    method public void setStatusBarBackgroundColor(@ColorInt int);
+    method public void setStatusBarBackgroundResource(@DrawableRes int);
   }
 
-  public static abstract interface CoordinatorLayout.AttachedBehavior {
-    method public abstract androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior getBehavior();
+  public static interface CoordinatorLayout.AttachedBehavior {
+    method public androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior getBehavior();
   }
 
-  public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
+  public abstract static class CoordinatorLayout.Behavior<V extends android.view.View> {
     ctor public CoordinatorLayout.Behavior();
-    ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
+    ctor public CoordinatorLayout.Behavior(android.content.Context!, android.util.AttributeSet!);
     method public boolean blocksInteractionBelow(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
     method public boolean getInsetDodgeRect(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.graphics.Rect);
-    method public int getScrimColor(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
-    method public float getScrimOpacity(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
-    method public static java.lang.Object getTag(android.view.View);
+    method @ColorInt public int getScrimColor(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
+    method @FloatRange(from=0, to=1) public float getScrimOpacity(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
+    method public static Object? getTag(android.view.View);
     method public boolean layoutDependsOn(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View);
     method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(androidx.coordinatorlayout.widget.CoordinatorLayout, V, androidx.core.view.WindowInsetsCompat);
     method public void onAttachedToLayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
@@ -51,35 +52,36 @@
     method public boolean onMeasureChild(androidx.coordinatorlayout.widget.CoordinatorLayout, V, int, int, int, int);
     method public boolean onNestedFling(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
     method public boolean onNestedPreFling(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, float, float);
-    method public deprecated void onNestedPreScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+    method @Deprecated public void onNestedPreScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
     method public void onNestedPreScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
-    method public deprecated void onNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
+    method @Deprecated public void onNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
     method public void onNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
-    method public deprecated void onNestedScrollAccepted(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+    method @Deprecated public void onNestedScrollAccepted(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
     method public void onNestedScrollAccepted(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
     method public boolean onRequestChildRectangleOnScreen(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
     method public void onRestoreInstanceState(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
-    method public deprecated boolean onStartNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+    method public android.os.Parcelable? onSaveInstanceState(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
+    method @Deprecated public boolean onStartNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
     method public boolean onStartNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
-    method public deprecated void onStopNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View);
+    method @Deprecated public void onStopNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View);
     method public void onStopNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int);
     method public boolean onTouchEvent(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.MotionEvent);
-    method public static void setTag(android.view.View, java.lang.Object);
+    method public static void setTag(android.view.View, Object?);
   }
 
-  public static abstract deprecated class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public static @interface CoordinatorLayout.DefaultBehavior {
+    method @Deprecated public abstract Class<? extends androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior> value();
   }
 
   public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
     ctor public CoordinatorLayout.LayoutParams(int, int);
-    ctor public CoordinatorLayout.LayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    method public int getAnchorId();
-    method public androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior getBehavior();
-    method public void setAnchorId(int);
-    method public void setBehavior(androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior);
+    ctor public CoordinatorLayout.LayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams!);
+    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
+    method @IdRes public int getAnchorId();
+    method public androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior? getBehavior();
+    method public void setAnchorId(@IdRes int);
+    method public void setBehavior(androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior?);
     field public int anchorGravity;
     field public int dodgeInsetEdges;
     field public int gravity;
@@ -88,9 +90,9 @@
   }
 
   protected static class CoordinatorLayout.SavedState extends androidx.customview.view.AbsSavedState {
-    ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<androidx.coordinatorlayout.widget.CoordinatorLayout.SavedState> CREATOR;
+    ctor public CoordinatorLayout.SavedState(android.os.Parcel!, ClassLoader!);
+    ctor public CoordinatorLayout.SavedState(android.os.Parcelable!);
+    field public static final android.os.Parcelable.Creator<androidx.coordinatorlayout.widget.CoordinatorLayout.SavedState>! CREATOR;
   }
 
 }
diff --git a/core/api/1.0.0.txt b/core/api/1.0.0.txt
index 999faa6..094ed6c 100644
--- a/core/api/1.0.0.txt
+++ b/core/api/1.0.0.txt
@@ -1,11 +1,12 @@
+// Signature format: 2.0
 package androidx.core.accessibilityservice {
 
   public final class AccessibilityServiceInfoCompat {
-    method public static java.lang.String capabilityToString(int);
-    method public static java.lang.String feedbackTypeToString(int);
-    method public static java.lang.String flagToString(int);
+    method public static String capabilityToString(int);
+    method public static String feedbackTypeToString(int);
+    method public static String? flagToString(int);
     method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
-    method public static java.lang.String loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+    method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
     field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
     field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
     field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
@@ -27,28 +28,28 @@
     ctor protected ActivityCompat();
     method public static void finishAffinity(android.app.Activity);
     method public static void finishAfterTransition(android.app.Activity);
-    method public static android.net.Uri getReferrer(android.app.Activity);
-    method public static deprecated boolean invalidateOptionsMenu(android.app.Activity);
+    method public static android.net.Uri? getReferrer(android.app.Activity);
+    method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
     method public static void postponeEnterTransition(android.app.Activity);
-    method public static androidx.core.view.DragAndDropPermissionsCompat requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
-    method public static void requestPermissions(android.app.Activity, java.lang.String[], int);
-    method public static <T extends android.view.View> T requireViewById(android.app.Activity, int);
-    method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback);
-    method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback);
-    method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate);
-    method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String);
-    method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle);
-    method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity!, android.view.DragEvent!);
+    method public static void requestPermissions(android.app.Activity, String[], @IntRange(from=0) int);
+    method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+    method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+    method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+    method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+    method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
+    method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
+    method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
     method public static void startPostponedEnterTransition(android.app.Activity);
   }
 
-  public static abstract interface ActivityCompat.OnRequestPermissionsResultCallback {
-    method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+  public static interface ActivityCompat.OnRequestPermissionsResultCallback {
+    method public void onRequestPermissionsResult(int, String[], int[]);
   }
 
-  public static abstract interface ActivityCompat.PermissionCompatDelegate {
-    method public abstract boolean onActivityResult(android.app.Activity, int, int, android.content.Intent);
-    method public abstract boolean requestPermissions(android.app.Activity, java.lang.String[], int);
+  public static interface ActivityCompat.PermissionCompatDelegate {
+    method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+    method public boolean requestPermissions(android.app.Activity, String[], @IntRange(from=0) int);
   }
 
   public final class ActivityManagerCompat {
@@ -57,21 +58,21 @@
 
   public class ActivityOptionsCompat {
     ctor protected ActivityOptionsCompat();
-    method public android.graphics.Rect getLaunchBounds();
+    method public android.graphics.Rect? getLaunchBounds();
     method public static androidx.core.app.ActivityOptionsCompat makeBasic();
     method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
     method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
     method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
-    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, java.lang.String);
-    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View, java.lang.String>...);
+    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View,java.lang.String>...!);
     method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
     method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
     method public void requestUsageTimeReport(android.app.PendingIntent);
-    method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect);
-    method public android.os.Bundle toBundle();
+    method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+    method public android.os.Bundle? toBundle();
     method public void update(androidx.core.app.ActivityOptionsCompat);
-    field public static final java.lang.String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
-    field public static final java.lang.String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+    field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+    field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
   }
 
   public final class AlarmManagerCompat {
@@ -81,32 +82,32 @@
     method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
   }
 
-  public class AppComponentFactory extends android.app.AppComponentFactory {
+  @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
     ctor public AppComponentFactory();
-    method public final android.app.Activity instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Activity instantiateActivityCompat(java.lang.ClassLoader, java.lang.String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.app.Application instantiateApplication(java.lang.ClassLoader, java.lang.String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Application instantiateApplicationCompat(java.lang.ClassLoader, java.lang.String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.content.ContentProvider instantiateProvider(java.lang.ClassLoader, java.lang.String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.content.ContentProvider instantiateProviderCompat(java.lang.ClassLoader, java.lang.String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.content.BroadcastReceiver instantiateReceiver(java.lang.ClassLoader, java.lang.String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.content.BroadcastReceiver instantiateReceiverCompat(java.lang.ClassLoader, java.lang.String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.app.Service instantiateService(java.lang.ClassLoader, java.lang.String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Service instantiateServiceCompat(java.lang.ClassLoader, java.lang.String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.app.Activity! instantiateActivity(ClassLoader!, String!, android.content.Intent!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.app.Application! instantiateApplication(ClassLoader!, String!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.content.ContentProvider! instantiateProvider(ClassLoader!, String!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.content.BroadcastReceiver! instantiateReceiver(ClassLoader!, String!, android.content.Intent!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.app.Service! instantiateService(ClassLoader!, String!, android.content.Intent!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
   public class AppLaunchChecker {
-    ctor public deprecated AppLaunchChecker();
+    ctor @Deprecated public AppLaunchChecker();
     method public static boolean hasStartedFromLauncher(android.content.Context);
     method public static void onActivityCreate(android.app.Activity);
   }
 
   public final class AppOpsManagerCompat {
-    method public static int noteOp(android.content.Context, java.lang.String, int, java.lang.String);
-    method public static int noteOpNoThrow(android.content.Context, java.lang.String, int, java.lang.String);
-    method public static int noteProxyOp(android.content.Context, java.lang.String, java.lang.String);
-    method public static int noteProxyOpNoThrow(android.content.Context, java.lang.String, java.lang.String);
-    method public static java.lang.String permissionToOp(java.lang.String);
+    method public static int noteOp(android.content.Context, String, int, String);
+    method public static int noteOpNoThrow(android.content.Context, String, int, String);
+    method public static int noteProxyOp(android.content.Context, String, String);
+    method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+    method public static String? permissionToOp(String);
     field public static final int MODE_ALLOWED = 0; // 0x0
     field public static final int MODE_DEFAULT = 3; // 0x3
     field public static final int MODE_ERRORED = 2; // 0x2
@@ -114,18 +115,18 @@
   }
 
   public final class BundleCompat {
-    method public static android.os.IBinder getBinder(android.os.Bundle, java.lang.String);
-    method public static void putBinder(android.os.Bundle, java.lang.String, android.os.IBinder);
+    method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
+    method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
   }
 
   public class FrameMetricsAggregator {
     ctor public FrameMetricsAggregator();
     ctor public FrameMetricsAggregator(int);
     method public void add(android.app.Activity);
-    method public android.util.SparseIntArray[] getMetrics();
-    method public android.util.SparseIntArray[] remove(android.app.Activity);
-    method public android.util.SparseIntArray[] reset();
-    method public android.util.SparseIntArray[] stop();
+    method public android.util.SparseIntArray[]? getMetrics();
+    method public android.util.SparseIntArray[]? remove(android.app.Activity);
+    method public android.util.SparseIntArray[]? reset();
+    method public android.util.SparseIntArray[]? stop();
     field public static final int ANIMATION_DURATION = 256; // 0x100
     field public static final int ANIMATION_INDEX = 8; // 0x8
     field public static final int COMMAND_DURATION = 32; // 0x20
@@ -149,101 +150,101 @@
 
   public abstract class JobIntentService extends android.app.Service {
     ctor public JobIntentService();
-    method public static void enqueueWork(android.content.Context, java.lang.Class, int, android.content.Intent);
+    method public static void enqueueWork(android.content.Context, Class, int, android.content.Intent);
     method public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
     method public boolean isStopped();
-    method public android.os.IBinder onBind(android.content.Intent);
+    method public android.os.IBinder! onBind(android.content.Intent);
     method protected abstract void onHandleWork(android.content.Intent);
     method public boolean onStopCurrentWork();
     method public void setInterruptIfStopped(boolean);
   }
 
   public final class NavUtils {
-    method public static android.content.Intent getParentActivityIntent(android.app.Activity);
-    method public static android.content.Intent getParentActivityIntent(android.content.Context, java.lang.Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static android.content.Intent getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static java.lang.String getParentActivityName(android.app.Activity);
-    method public static java.lang.String getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+    method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static String? getParentActivityName(android.app.Activity);
+    method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
     method public static void navigateUpFromSameTask(android.app.Activity);
     method public static void navigateUpTo(android.app.Activity, android.content.Intent);
     method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
-    field public static final java.lang.String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+    field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
   }
 
   public class NotificationCompat {
-    ctor public deprecated NotificationCompat();
-    method public static androidx.core.app.NotificationCompat.Action getAction(android.app.Notification, int);
-    method public static int getActionCount(android.app.Notification);
-    method public static int getBadgeIconType(android.app.Notification);
-    method public static java.lang.String getCategory(android.app.Notification);
-    method public static java.lang.String getChannelId(android.app.Notification);
-    method public static java.lang.CharSequence getContentTitle(android.app.Notification);
-    method public static android.os.Bundle getExtras(android.app.Notification);
-    method public static java.lang.String getGroup(android.app.Notification);
-    method public static int getGroupAlertBehavior(android.app.Notification);
-    method public static java.util.List<androidx.core.app.NotificationCompat.Action> getInvisibleActions(android.app.Notification);
-    method public static boolean getLocalOnly(android.app.Notification);
-    method public static java.lang.String getShortcutId(android.app.Notification);
-    method public static java.lang.String getSortKey(android.app.Notification);
-    method public static long getTimeoutAfter(android.app.Notification);
-    method public static boolean isGroupSummary(android.app.Notification);
+    ctor @Deprecated public NotificationCompat();
+    method public static androidx.core.app.NotificationCompat.Action! getAction(android.app.Notification!, int);
+    method public static int getActionCount(android.app.Notification!);
+    method public static int getBadgeIconType(android.app.Notification!);
+    method public static String! getCategory(android.app.Notification!);
+    method public static String! getChannelId(android.app.Notification!);
+    method @RequiresApi(19) public static CharSequence! getContentTitle(android.app.Notification!);
+    method public static android.os.Bundle? getExtras(android.app.Notification!);
+    method public static String! getGroup(android.app.Notification!);
+    method public static int getGroupAlertBehavior(android.app.Notification!);
+    method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action>! getInvisibleActions(android.app.Notification!);
+    method public static boolean getLocalOnly(android.app.Notification!);
+    method public static String! getShortcutId(android.app.Notification!);
+    method public static String! getSortKey(android.app.Notification!);
+    method public static long getTimeoutAfter(android.app.Notification!);
+    method public static boolean isGroupSummary(android.app.Notification!);
     field public static final int BADGE_ICON_LARGE = 2; // 0x2
     field public static final int BADGE_ICON_NONE = 0; // 0x0
     field public static final int BADGE_ICON_SMALL = 1; // 0x1
-    field public static final java.lang.String CATEGORY_ALARM = "alarm";
-    field public static final java.lang.String CATEGORY_CALL = "call";
-    field public static final java.lang.String CATEGORY_EMAIL = "email";
-    field public static final java.lang.String CATEGORY_ERROR = "err";
-    field public static final java.lang.String CATEGORY_EVENT = "event";
-    field public static final java.lang.String CATEGORY_MESSAGE = "msg";
-    field public static final java.lang.String CATEGORY_PROGRESS = "progress";
-    field public static final java.lang.String CATEGORY_PROMO = "promo";
-    field public static final java.lang.String CATEGORY_RECOMMENDATION = "recommendation";
-    field public static final java.lang.String CATEGORY_REMINDER = "reminder";
-    field public static final java.lang.String CATEGORY_SERVICE = "service";
-    field public static final java.lang.String CATEGORY_SOCIAL = "social";
-    field public static final java.lang.String CATEGORY_STATUS = "status";
-    field public static final java.lang.String CATEGORY_SYSTEM = "sys";
-    field public static final java.lang.String CATEGORY_TRANSPORT = "transport";
-    field public static final int COLOR_DEFAULT = 0; // 0x0
+    field public static final String CATEGORY_ALARM = "alarm";
+    field public static final String CATEGORY_CALL = "call";
+    field public static final String CATEGORY_EMAIL = "email";
+    field public static final String CATEGORY_ERROR = "err";
+    field public static final String CATEGORY_EVENT = "event";
+    field public static final String CATEGORY_MESSAGE = "msg";
+    field public static final String CATEGORY_PROGRESS = "progress";
+    field public static final String CATEGORY_PROMO = "promo";
+    field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+    field public static final String CATEGORY_REMINDER = "reminder";
+    field public static final String CATEGORY_SERVICE = "service";
+    field public static final String CATEGORY_SOCIAL = "social";
+    field public static final String CATEGORY_STATUS = "status";
+    field public static final String CATEGORY_SYSTEM = "sys";
+    field public static final String CATEGORY_TRANSPORT = "transport";
+    field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
     field public static final int DEFAULT_ALL = -1; // 0xffffffff
     field public static final int DEFAULT_LIGHTS = 4; // 0x4
     field public static final int DEFAULT_SOUND = 1; // 0x1
     field public static final int DEFAULT_VIBRATE = 2; // 0x2
-    field public static final java.lang.String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
-    field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
-    field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
-    field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
-    field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
-    field public static final java.lang.String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
-    field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
-    field public static final java.lang.String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
-    field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon";
-    field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
-    field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession";
-    field public static final java.lang.String EXTRA_MESSAGES = "android.messages";
-    field public static final java.lang.String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
-    field public static final java.lang.String EXTRA_PEOPLE = "android.people";
-    field public static final java.lang.String EXTRA_PICTURE = "android.picture";
-    field public static final java.lang.String EXTRA_PROGRESS = "android.progress";
-    field public static final java.lang.String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
-    field public static final java.lang.String EXTRA_PROGRESS_MAX = "android.progressMax";
-    field public static final java.lang.String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
-    field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
-    field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
-    field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen";
-    field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon";
-    field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText";
-    field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText";
-    field public static final java.lang.String EXTRA_TEMPLATE = "android.template";
-    field public static final java.lang.String EXTRA_TEXT = "android.text";
-    field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines";
-    field public static final java.lang.String EXTRA_TITLE = "android.title";
-    field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big";
+    field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+    field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+    field public static final String EXTRA_BIG_TEXT = "android.bigText";
+    field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+    field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+    field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+    field public static final String EXTRA_INFO_TEXT = "android.infoText";
+    field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+    field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+    field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+    field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+    field public static final String EXTRA_MESSAGES = "android.messages";
+    field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+    field public static final String EXTRA_PEOPLE = "android.people";
+    field public static final String EXTRA_PICTURE = "android.picture";
+    field public static final String EXTRA_PROGRESS = "android.progress";
+    field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+    field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+    field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+    field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+    field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+    field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+    field public static final String EXTRA_SMALL_ICON = "android.icon";
+    field public static final String EXTRA_SUB_TEXT = "android.subText";
+    field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+    field public static final String EXTRA_TEMPLATE = "android.template";
+    field public static final String EXTRA_TEXT = "android.text";
+    field public static final String EXTRA_TEXT_LINES = "android.textLines";
+    field public static final String EXTRA_TITLE = "android.title";
+    field public static final String EXTRA_TITLE_BIG = "android.title.big";
     field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
     field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
     field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
-    field public static final deprecated int FLAG_HIGH_PRIORITY = 128; // 0x80
+    field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
     field public static final int FLAG_INSISTENT = 4; // 0x4
     field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
     field public static final int FLAG_NO_CLEAR = 32; // 0x20
@@ -265,16 +266,16 @@
   }
 
   public static class NotificationCompat.Action {
-    ctor public NotificationCompat.Action(int, java.lang.CharSequence, android.app.PendingIntent);
-    method public android.app.PendingIntent getActionIntent();
+    ctor public NotificationCompat.Action(int, CharSequence!, android.app.PendingIntent!);
+    method public android.app.PendingIntent! getActionIntent();
     method public boolean getAllowGeneratedReplies();
-    method public androidx.core.app.RemoteInput[] getDataOnlyRemoteInputs();
-    method public android.os.Bundle getExtras();
+    method public androidx.core.app.RemoteInput[]! getDataOnlyRemoteInputs();
+    method public android.os.Bundle! getExtras();
     method public int getIcon();
-    method public androidx.core.app.RemoteInput[] getRemoteInputs();
-    method public int getSemanticAction();
+    method public androidx.core.app.RemoteInput[]! getRemoteInputs();
+    method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
     method public boolean getShowsUserInterface();
-    method public java.lang.CharSequence getTitle();
+    method public CharSequence! getTitle();
     field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
     field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
     field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
@@ -286,264 +287,264 @@
     field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
     field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
     field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
-    field public android.app.PendingIntent actionIntent;
+    field public android.app.PendingIntent! actionIntent;
     field public int icon;
-    field public java.lang.CharSequence title;
+    field public CharSequence! title;
   }
 
   public static final class NotificationCompat.Action.Builder {
-    ctor public NotificationCompat.Action.Builder(int, java.lang.CharSequence, android.app.PendingIntent);
-    ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle);
-    method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput);
-    method public androidx.core.app.NotificationCompat.Action build();
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
-    method public android.os.Bundle getExtras();
-    method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
-    method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(int);
-    method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
+    ctor public NotificationCompat.Action.Builder(int, CharSequence!, android.app.PendingIntent!);
+    ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Action.Builder! addExtras(android.os.Bundle!);
+    method public androidx.core.app.NotificationCompat.Action.Builder! addRemoteInput(androidx.core.app.RemoteInput!);
+    method public androidx.core.app.NotificationCompat.Action! build();
+    method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Extender!);
+    method public android.os.Bundle! getExtras();
+    method public androidx.core.app.NotificationCompat.Action.Builder! setAllowGeneratedReplies(boolean);
+    method public androidx.core.app.NotificationCompat.Action.Builder! setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+    method public androidx.core.app.NotificationCompat.Action.Builder! setShowsUserInterface(boolean);
   }
 
-  public static abstract interface NotificationCompat.Action.Extender {
-    method public abstract androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
+  public static interface NotificationCompat.Action.Extender {
+    method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
   }
 
-  public static abstract class NotificationCompat.Action.SemanticAction implements java.lang.annotation.Annotation {
+  @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
   }
 
   public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
     ctor public NotificationCompat.Action.WearableExtender();
-    ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
-    method public deprecated java.lang.CharSequence getCancelLabel();
-    method public deprecated java.lang.CharSequence getConfirmLabel();
+    ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! clone();
+    method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+    method @Deprecated public CharSequence! getCancelLabel();
+    method @Deprecated public CharSequence! getConfirmLabel();
     method public boolean getHintDisplayActionInline();
     method public boolean getHintLaunchesActivity();
-    method public deprecated java.lang.CharSequence getInProgressLabel();
+    method @Deprecated public CharSequence! getInProgressLabel();
     method public boolean isAvailableOffline();
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
-    method public deprecated androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(java.lang.CharSequence);
-    method public deprecated androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
-    method public deprecated androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(java.lang.CharSequence);
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! setAvailableOffline(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setCancelLabel(CharSequence!);
+    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setConfirmLabel(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintDisplayActionInline(boolean);
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintLaunchesActivity(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setInProgressLabel(CharSequence!);
   }
 
   public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
     ctor public NotificationCompat.BigPictureStyle();
-    ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(java.lang.CharSequence);
+    ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! bigLargeIcon(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! bigPicture(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! setBigContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! setSummaryText(CharSequence!);
   }
 
   public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
     ctor public NotificationCompat.BigTextStyle();
-    ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder);
-    method public androidx.core.app.NotificationCompat.BigTextStyle bigText(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(java.lang.CharSequence);
+    ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder!);
+    method public androidx.core.app.NotificationCompat.BigTextStyle! bigText(CharSequence!);
+    method public androidx.core.app.NotificationCompat.BigTextStyle! setBigContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.BigTextStyle! setSummaryText(CharSequence!);
   }
 
   public static class NotificationCompat.Builder {
-    ctor public NotificationCompat.Builder(android.content.Context, java.lang.String);
-    ctor public deprecated NotificationCompat.Builder(android.content.Context);
-    method public androidx.core.app.NotificationCompat.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
-    method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle);
-    method public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, java.lang.CharSequence, android.app.PendingIntent);
-    method public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Builder addPerson(java.lang.String);
-    method public android.app.Notification build();
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
-    method public android.os.Bundle getExtras();
-    method public deprecated android.app.Notification getNotification();
-    method protected static java.lang.CharSequence limitCharSequenceLength(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(int);
-    method public androidx.core.app.NotificationCompat.Builder setCategory(java.lang.String);
-    method public androidx.core.app.NotificationCompat.Builder setChannelId(java.lang.String);
-    method public androidx.core.app.NotificationCompat.Builder setColor(int);
-    method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews);
-    method public androidx.core.app.NotificationCompat.Builder setContentInfo(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent);
-    method public androidx.core.app.NotificationCompat.Builder setContentText(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.Builder setContentTitle(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews);
-    method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews);
-    method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
-    method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
-    method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent);
-    method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle);
-    method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
-    method public androidx.core.app.NotificationCompat.Builder setGroup(java.lang.String);
-    method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(int);
-    method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap);
-    method public androidx.core.app.NotificationCompat.Builder setLights(int, int, int);
-    method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setNumber(int);
-    method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setPriority(int);
-    method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
-    method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(java.lang.CharSequence[]);
-    method public androidx.core.app.NotificationCompat.Builder setShortcutId(java.lang.String);
-    method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
-    method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
-    method public androidx.core.app.NotificationCompat.Builder setSortKey(java.lang.String);
-    method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri);
-    method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri, int);
-    method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style);
-    method public androidx.core.app.NotificationCompat.Builder setSubText(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.Builder setTicker(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
-    method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
-    method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]);
-    method public androidx.core.app.NotificationCompat.Builder setVisibility(int);
-    method public androidx.core.app.NotificationCompat.Builder setWhen(long);
-    field public deprecated java.util.ArrayList<java.lang.String> mPeople;
+    ctor public NotificationCompat.Builder(android.content.Context, String);
+    ctor @Deprecated public NotificationCompat.Builder(android.content.Context!);
+    method public androidx.core.app.NotificationCompat.Builder! addAction(int, CharSequence!, android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.Builder! addAction(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Builder! addExtras(android.os.Bundle!);
+    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(int, CharSequence!, android.app.PendingIntent!);
+    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Builder! addPerson(String!);
+    method public android.app.Notification! build();
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Extender!);
+    method public android.os.Bundle! getExtras();
+    method @Deprecated public android.app.Notification! getNotification();
+    method protected static CharSequence! limitCharSequenceLength(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setAutoCancel(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setBadgeIconType(int);
+    method public androidx.core.app.NotificationCompat.Builder! setCategory(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setChannelId(String);
+    method public androidx.core.app.NotificationCompat.Builder! setColor(@ColorInt int);
+    method public androidx.core.app.NotificationCompat.Builder! setColorized(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setContent(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentInfo(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentIntent(android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentText(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setCustomBigContentView(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setCustomContentView(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setCustomHeadsUpContentView(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setDefaults(int);
+    method public androidx.core.app.NotificationCompat.Builder! setDeleteIntent(android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.Builder! setExtras(android.os.Bundle!);
+    method public androidx.core.app.NotificationCompat.Builder! setFullScreenIntent(android.app.PendingIntent!, boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setGroup(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setGroupAlertBehavior(int);
+    method public androidx.core.app.NotificationCompat.Builder! setGroupSummary(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setLargeIcon(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.Builder! setLights(@ColorInt int, int, int);
+    method public androidx.core.app.NotificationCompat.Builder! setLocalOnly(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setNumber(int);
+    method public androidx.core.app.NotificationCompat.Builder! setOngoing(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setOnlyAlertOnce(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setPriority(int);
+    method public androidx.core.app.NotificationCompat.Builder! setProgress(int, int, boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setPublicVersion(android.app.Notification!);
+    method public androidx.core.app.NotificationCompat.Builder! setRemoteInputHistory(CharSequence[]!);
+    method public androidx.core.app.NotificationCompat.Builder! setShortcutId(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setShowWhen(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int);
+    method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int, int);
+    method public androidx.core.app.NotificationCompat.Builder! setSortKey(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!);
+    method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!, int);
+    method public androidx.core.app.NotificationCompat.Builder! setStyle(androidx.core.app.NotificationCompat.Style!);
+    method public androidx.core.app.NotificationCompat.Builder! setSubText(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!, android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setTimeoutAfter(long);
+    method public androidx.core.app.NotificationCompat.Builder! setUsesChronometer(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setVibrate(long[]!);
+    method public androidx.core.app.NotificationCompat.Builder! setVisibility(int);
+    method public androidx.core.app.NotificationCompat.Builder! setWhen(long);
+    field @Deprecated public java.util.ArrayList<java.lang.String>! mPeople;
   }
 
   public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
     ctor public NotificationCompat.CarExtender();
-    ctor public NotificationCompat.CarExtender(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-    method public int getColor();
-    method public android.graphics.Bitmap getLargeIcon();
-    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation getUnreadConversation();
-    method public androidx.core.app.NotificationCompat.CarExtender setColor(int);
-    method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap);
-    method public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation);
+    ctor public NotificationCompat.CarExtender(android.app.Notification!);
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+    method @ColorInt public int getColor();
+    method public android.graphics.Bitmap! getLargeIcon();
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! getUnreadConversation();
+    method public androidx.core.app.NotificationCompat.CarExtender! setColor(@ColorInt int);
+    method public androidx.core.app.NotificationCompat.CarExtender! setLargeIcon(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.CarExtender! setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation!);
   }
 
   public static class NotificationCompat.CarExtender.UnreadConversation {
     method public long getLatestTimestamp();
-    method public java.lang.String[] getMessages();
-    method public java.lang.String getParticipant();
-    method public java.lang.String[] getParticipants();
-    method public android.app.PendingIntent getReadPendingIntent();
-    method public androidx.core.app.RemoteInput getRemoteInput();
-    method public android.app.PendingIntent getReplyPendingIntent();
+    method public String[]! getMessages();
+    method public String! getParticipant();
+    method public String[]! getParticipants();
+    method public android.app.PendingIntent! getReadPendingIntent();
+    method public androidx.core.app.RemoteInput! getRemoteInput();
+    method public android.app.PendingIntent! getReplyPendingIntent();
   }
 
   public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
-    ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(java.lang.String);
-    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(java.lang.String);
-    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
-    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
-    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent);
-    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent, androidx.core.app.RemoteInput);
+    ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(String!);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! addMessage(String!);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! build();
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setLatestTimestamp(long);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReadPendingIntent(android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReplyAction(android.app.PendingIntent!, androidx.core.app.RemoteInput!);
   }
 
   public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
     ctor public NotificationCompat.DecoratedCustomViewStyle();
   }
 
-  public static abstract interface NotificationCompat.Extender {
-    method public abstract androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+  public static interface NotificationCompat.Extender {
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
   }
 
   public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
     ctor public NotificationCompat.InboxStyle();
-    ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder);
-    method public androidx.core.app.NotificationCompat.InboxStyle addLine(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(java.lang.CharSequence);
+    ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder!);
+    method public androidx.core.app.NotificationCompat.InboxStyle! addLine(CharSequence!);
+    method public androidx.core.app.NotificationCompat.InboxStyle! setBigContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.InboxStyle! setSummaryText(CharSequence!);
   }
 
   public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public deprecated NotificationCompat.MessagingStyle(java.lang.CharSequence);
+    ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
     ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
-    method public void addCompatExtras(android.os.Bundle);
-    method public deprecated androidx.core.app.NotificationCompat.MessagingStyle addMessage(java.lang.CharSequence, long, java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(java.lang.CharSequence, long, androidx.core.app.Person);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
-    method public static androidx.core.app.NotificationCompat.MessagingStyle extractMessagingStyleFromNotification(android.app.Notification);
-    method public java.lang.CharSequence getConversationTitle();
-    method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message> getMessages();
-    method public androidx.core.app.Person getUser();
-    method public deprecated java.lang.CharSequence getUserDisplayName();
+    method public void addCompatExtras(android.os.Bundle!);
+    method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, CharSequence!);
+    method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, androidx.core.app.Person!);
+    method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message!);
+    method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification!);
+    method public CharSequence? getConversationTitle();
+    method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message>! getMessages();
+    method public androidx.core.app.Person! getUser();
+    method @Deprecated public CharSequence! getUserDisplayName();
     method public boolean isGroupConversation();
-    method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(java.lang.CharSequence);
-    method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
+    method public androidx.core.app.NotificationCompat.MessagingStyle! setConversationTitle(CharSequence?);
+    method public androidx.core.app.NotificationCompat.MessagingStyle! setGroupConversation(boolean);
     field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
   }
 
   public static final class NotificationCompat.MessagingStyle.Message {
-    ctor public NotificationCompat.MessagingStyle.Message(java.lang.CharSequence, long, androidx.core.app.Person);
-    ctor public deprecated NotificationCompat.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence);
-    method public java.lang.String getDataMimeType();
-    method public android.net.Uri getDataUri();
+    ctor public NotificationCompat.MessagingStyle.Message(CharSequence!, long, androidx.core.app.Person?);
+    ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence!, long, CharSequence!);
+    method public String? getDataMimeType();
+    method public android.net.Uri? getDataUri();
     method public android.os.Bundle getExtras();
-    method public androidx.core.app.Person getPerson();
-    method public deprecated java.lang.CharSequence getSender();
-    method public java.lang.CharSequence getText();
+    method public androidx.core.app.Person? getPerson();
+    method @Deprecated public CharSequence? getSender();
+    method public CharSequence getText();
     method public long getTimestamp();
-    method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(java.lang.String, android.net.Uri);
+    method public androidx.core.app.NotificationCompat.MessagingStyle.Message! setData(String!, android.net.Uri!);
   }
 
-  public static abstract class NotificationCompat.Style {
+  public abstract static class NotificationCompat.Style {
     ctor public NotificationCompat.Style();
-    method public android.app.Notification build();
-    method public void setBuilder(androidx.core.app.NotificationCompat.Builder);
+    method public android.app.Notification! build();
+    method public void setBuilder(androidx.core.app.NotificationCompat.Builder!);
   }
 
   public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
     ctor public NotificationCompat.WearableExtender();
-    ctor public NotificationCompat.WearableExtender(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action>);
-    method public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification>);
-    method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
-    method public androidx.core.app.NotificationCompat.WearableExtender clearPages();
-    method public androidx.core.app.NotificationCompat.WearableExtender clone();
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-    method public java.util.List<androidx.core.app.NotificationCompat.Action> getActions();
-    method public android.graphics.Bitmap getBackground();
-    method public java.lang.String getBridgeTag();
+    ctor public NotificationCompat.WearableExtender(android.app.Notification!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! addAction(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! addActions(java.util.List<androidx.core.app.NotificationCompat.Action>!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! addPage(android.app.Notification!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! addPages(java.util.List<android.app.Notification>!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! clearActions();
+    method public androidx.core.app.NotificationCompat.WearableExtender! clearPages();
+    method public androidx.core.app.NotificationCompat.WearableExtender! clone();
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+    method public java.util.List<androidx.core.app.NotificationCompat.Action>! getActions();
+    method public android.graphics.Bitmap! getBackground();
+    method public String! getBridgeTag();
     method public int getContentAction();
-    method public deprecated int getContentIcon();
-    method public deprecated int getContentIconGravity();
+    method @Deprecated public int getContentIcon();
+    method @Deprecated public int getContentIconGravity();
     method public boolean getContentIntentAvailableOffline();
-    method public deprecated int getCustomContentHeight();
-    method public deprecated int getCustomSizePreset();
-    method public java.lang.String getDismissalId();
-    method public android.app.PendingIntent getDisplayIntent();
-    method public deprecated int getGravity();
+    method @Deprecated public int getCustomContentHeight();
+    method @Deprecated public int getCustomSizePreset();
+    method public String! getDismissalId();
+    method public android.app.PendingIntent! getDisplayIntent();
+    method @Deprecated public int getGravity();
     method public boolean getHintAmbientBigPicture();
-    method public deprecated boolean getHintAvoidBackgroundClipping();
+    method @Deprecated public boolean getHintAvoidBackgroundClipping();
     method public boolean getHintContentIntentLaunchesActivity();
-    method public deprecated boolean getHintHideIcon();
-    method public deprecated int getHintScreenTimeout();
-    method public deprecated boolean getHintShowBackgroundOnly();
-    method public java.util.List<android.app.Notification> getPages();
+    method @Deprecated public boolean getHintHideIcon();
+    method @Deprecated public int getHintScreenTimeout();
+    method @Deprecated public boolean getHintShowBackgroundOnly();
+    method public java.util.List<android.app.Notification>! getPages();
     method public boolean getStartScrollBottom();
-    method public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap);
-    method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(java.lang.String);
-    method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
-    method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
-    method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(java.lang.String);
-    method public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
-    method public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
-    method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
-    method public deprecated androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
-    method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setBackground(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setBridgeTag(String!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setContentAction(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIcon(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIconGravity(int);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setContentIntentAvailableOffline(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomContentHeight(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomSizePreset(int);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setDismissalId(String!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setDisplayIntent(android.app.PendingIntent!);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setGravity(int);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setHintAmbientBigPicture(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAvoidBackgroundClipping(boolean);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setHintContentIntentLaunchesActivity(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintHideIcon(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintScreenTimeout(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintShowBackgroundOnly(boolean);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setStartScrollBottom(boolean);
     field public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
     field public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
     field public static final int SIZE_DEFAULT = 0; // 0x0
@@ -556,34 +557,34 @@
   }
 
   public final class NotificationCompatExtras {
-    field public static final java.lang.String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
-    field public static final java.lang.String EXTRA_GROUP_KEY = "android.support.groupKey";
-    field public static final java.lang.String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
-    field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.support.localOnly";
-    field public static final java.lang.String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
-    field public static final java.lang.String EXTRA_SORT_KEY = "android.support.sortKey";
+    field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+    field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+    field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+    field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+    field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+    field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
   }
 
   public abstract class NotificationCompatSideChannelService extends android.app.Service {
     ctor public NotificationCompatSideChannelService();
-    method public abstract void cancel(java.lang.String, int, java.lang.String);
-    method public abstract void cancelAll(java.lang.String);
-    method public abstract void notify(java.lang.String, int, java.lang.String, android.app.Notification);
-    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract void cancel(String!, int, String!);
+    method public abstract void cancelAll(String!);
+    method public abstract void notify(String!, int, String!, android.app.Notification!);
+    method public android.os.IBinder! onBind(android.content.Intent!);
   }
 
   public final class NotificationManagerCompat {
     method public boolean areNotificationsEnabled();
     method public void cancel(int);
-    method public void cancel(java.lang.String, int);
+    method public void cancel(String?, int);
     method public void cancelAll();
     method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
     method public static java.util.Set<java.lang.String> getEnabledListenerPackages(android.content.Context);
     method public int getImportance();
     method public void notify(int, android.app.Notification);
-    method public void notify(java.lang.String, int, android.app.Notification);
-    field public static final java.lang.String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
-    field public static final java.lang.String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+    method public void notify(String?, int, android.app.Notification);
+    field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+    field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
     field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
     field public static final int IMPORTANCE_HIGH = 4; // 0x4
     field public static final int IMPORTANCE_LOW = 2; // 0x2
@@ -595,10 +596,10 @@
 
   public class Person {
     method public static androidx.core.app.Person fromBundle(android.os.Bundle);
-    method public androidx.core.graphics.drawable.IconCompat getIcon();
-    method public java.lang.String getKey();
-    method public java.lang.CharSequence getName();
-    method public java.lang.String getUri();
+    method public androidx.core.graphics.drawable.IconCompat? getIcon();
+    method public String? getKey();
+    method public CharSequence? getName();
+    method public String? getUri();
     method public boolean isBot();
     method public boolean isImportant();
     method public androidx.core.app.Person.Builder toBuilder();
@@ -609,38 +610,38 @@
     ctor public Person.Builder();
     method public androidx.core.app.Person build();
     method public androidx.core.app.Person.Builder setBot(boolean);
-    method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+    method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
     method public androidx.core.app.Person.Builder setImportant(boolean);
-    method public androidx.core.app.Person.Builder setKey(java.lang.String);
-    method public androidx.core.app.Person.Builder setName(java.lang.CharSequence);
-    method public androidx.core.app.Person.Builder setUri(java.lang.String);
+    method public androidx.core.app.Person.Builder setKey(String?);
+    method public androidx.core.app.Person.Builder setName(CharSequence?);
+    method public androidx.core.app.Person.Builder setUri(String?);
   }
 
   public final class RemoteInput {
-    method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String, android.net.Uri>);
-    method public static void addResultsToIntent(androidx.core.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+    method public static void addDataResultToIntent(androidx.core.app.RemoteInput!, android.content.Intent!, java.util.Map<java.lang.String,android.net.Uri>!);
+    method public static void addResultsToIntent(androidx.core.app.RemoteInput[]!, android.content.Intent!, android.os.Bundle!);
     method public boolean getAllowFreeFormInput();
-    method public java.util.Set<java.lang.String> getAllowedDataTypes();
-    method public java.lang.CharSequence[] getChoices();
-    method public static java.util.Map<java.lang.String, android.net.Uri> getDataResultsFromIntent(android.content.Intent, java.lang.String);
-    method public android.os.Bundle getExtras();
-    method public java.lang.CharSequence getLabel();
-    method public java.lang.String getResultKey();
-    method public static android.os.Bundle getResultsFromIntent(android.content.Intent);
+    method public java.util.Set<java.lang.String>! getAllowedDataTypes();
+    method public CharSequence[]! getChoices();
+    method public static java.util.Map<java.lang.String,android.net.Uri>! getDataResultsFromIntent(android.content.Intent!, String!);
+    method public android.os.Bundle! getExtras();
+    method public CharSequence! getLabel();
+    method public String! getResultKey();
+    method public static android.os.Bundle! getResultsFromIntent(android.content.Intent!);
     method public boolean isDataOnly();
-    field public static final java.lang.String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
-    field public static final java.lang.String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+    field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+    field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
   }
 
   public static final class RemoteInput.Builder {
-    ctor public RemoteInput.Builder(java.lang.String);
+    ctor public RemoteInput.Builder(String);
     method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
     method public androidx.core.app.RemoteInput build();
     method public android.os.Bundle getExtras();
-    method public androidx.core.app.RemoteInput.Builder setAllowDataType(java.lang.String, boolean);
+    method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
     method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
-    method public androidx.core.app.RemoteInput.Builder setChoices(java.lang.CharSequence[]);
-    method public androidx.core.app.RemoteInput.Builder setLabel(java.lang.CharSequence);
+    method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence[]?);
+    method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
   }
 
   public final class ServiceCompat {
@@ -651,55 +652,55 @@
   }
 
   public final class ShareCompat {
-    method public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
-    method public static void configureMenuItem(android.view.Menu, int, androidx.core.app.ShareCompat.IntentBuilder);
-    method public static android.content.ComponentName getCallingActivity(android.app.Activity);
-    method public static java.lang.String getCallingPackage(android.app.Activity);
-    field public static final java.lang.String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
-    field public static final java.lang.String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+    method public static void configureMenuItem(android.view.MenuItem!, androidx.core.app.ShareCompat.IntentBuilder!);
+    method public static void configureMenuItem(android.view.Menu!, int, androidx.core.app.ShareCompat.IntentBuilder!);
+    method public static android.content.ComponentName! getCallingActivity(android.app.Activity!);
+    method public static String! getCallingPackage(android.app.Activity!);
+    field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+    field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
   }
 
   public static class ShareCompat.IntentBuilder {
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String[]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String[]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String[]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
-    method public android.content.Intent createChooserIntent();
-    method public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
-    method public android.content.Intent getIntent();
-    method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(java.lang.CharSequence);
-    method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(int);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(java.lang.String[]);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(java.lang.String[]);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(java.lang.String[]);
-    method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(java.lang.String);
-    method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri);
-    method public androidx.core.app.ShareCompat.IntentBuilder setSubject(java.lang.String);
-    method public androidx.core.app.ShareCompat.IntentBuilder setText(java.lang.CharSequence);
-    method public androidx.core.app.ShareCompat.IntentBuilder setType(java.lang.String);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailBcc(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailBcc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailCc(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailCc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailTo(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailTo(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addStream(android.net.Uri!);
+    method public android.content.Intent! createChooserIntent();
+    method public static androidx.core.app.ShareCompat.IntentBuilder! from(android.app.Activity!);
+    method public android.content.Intent! getIntent();
+    method public androidx.core.app.ShareCompat.IntentBuilder! setChooserTitle(CharSequence!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setChooserTitle(@StringRes int);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setEmailBcc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setEmailCc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setEmailTo(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setHtmlText(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setStream(android.net.Uri!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setSubject(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setText(CharSequence!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setType(String!);
     method public void startChooser();
   }
 
   public static class ShareCompat.IntentReader {
-    method public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
-    method public android.content.ComponentName getCallingActivity();
-    method public android.graphics.drawable.Drawable getCallingActivityIcon();
-    method public android.graphics.drawable.Drawable getCallingApplicationIcon();
-    method public java.lang.CharSequence getCallingApplicationLabel();
-    method public java.lang.String getCallingPackage();
-    method public java.lang.String[] getEmailBcc();
-    method public java.lang.String[] getEmailCc();
-    method public java.lang.String[] getEmailTo();
-    method public java.lang.String getHtmlText();
-    method public android.net.Uri getStream();
-    method public android.net.Uri getStream(int);
+    method public static androidx.core.app.ShareCompat.IntentReader! from(android.app.Activity!);
+    method public android.content.ComponentName! getCallingActivity();
+    method public android.graphics.drawable.Drawable! getCallingActivityIcon();
+    method public android.graphics.drawable.Drawable! getCallingApplicationIcon();
+    method public CharSequence! getCallingApplicationLabel();
+    method public String! getCallingPackage();
+    method public String[]! getEmailBcc();
+    method public String[]! getEmailCc();
+    method public String[]! getEmailTo();
+    method public String! getHtmlText();
+    method public android.net.Uri! getStream();
+    method public android.net.Uri! getStream(int);
     method public int getStreamCount();
-    method public java.lang.String getSubject();
-    method public java.lang.CharSequence getText();
-    method public java.lang.String getType();
+    method public String! getSubject();
+    method public CharSequence! getText();
+    method public String! getType();
     method public boolean isMultipleShare();
     method public boolean isShareIntent();
     method public boolean isSingleShare();
@@ -707,40 +708,40 @@
 
   public abstract class SharedElementCallback {
     ctor public SharedElementCallback();
-    method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF);
-    method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable);
-    method public void onMapSharedElements(java.util.List<java.lang.String>, java.util.Map<java.lang.String, android.view.View>);
-    method public void onRejectSharedElements(java.util.List<android.view.View>);
-    method public void onSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
-    method public void onSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
-    method public void onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener);
+    method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
+    method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
+    method public void onMapSharedElements(java.util.List<java.lang.String>!, java.util.Map<java.lang.String,android.view.View>!);
+    method public void onRejectSharedElements(java.util.List<android.view.View>!);
+    method public void onSharedElementEnd(java.util.List<java.lang.String>!, java.util.List<android.view.View>!, java.util.List<android.view.View>!);
+    method public void onSharedElementStart(java.util.List<java.lang.String>!, java.util.List<android.view.View>!, java.util.List<android.view.View>!);
+    method public void onSharedElementsArrived(java.util.List<java.lang.String>!, java.util.List<android.view.View>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
   }
 
-  public static abstract interface SharedElementCallback.OnSharedElementsReadyListener {
-    method public abstract void onSharedElementsReady();
+  public static interface SharedElementCallback.OnSharedElementsReadyListener {
+    method public void onSharedElementsReady();
   }
 
-  public final class TaskStackBuilder implements java.lang.Iterable {
+  public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
     method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
     method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
     method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
-    method public androidx.core.app.TaskStackBuilder addParentStack(java.lang.Class<?>);
-    method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+    method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+    method public androidx.core.app.TaskStackBuilder! addParentStack(android.content.ComponentName!);
     method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
-    method public android.content.Intent editIntentAt(int);
-    method public static deprecated androidx.core.app.TaskStackBuilder from(android.content.Context);
-    method public deprecated android.content.Intent getIntent(int);
+    method public android.content.Intent? editIntentAt(int);
+    method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+    method @Deprecated public android.content.Intent! getIntent(int);
     method public int getIntentCount();
     method public android.content.Intent[] getIntents();
-    method public android.app.PendingIntent getPendingIntent(int, int);
-    method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle);
-    method public deprecated java.util.Iterator<android.content.Intent> iterator();
+    method public android.app.PendingIntent? getPendingIntent(int, int);
+    method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
+    method @Deprecated public java.util.Iterator<android.content.Intent>! iterator();
     method public void startActivities();
-    method public void startActivities(android.os.Bundle);
+    method public void startActivities(android.os.Bundle?);
   }
 
-  public static abstract interface TaskStackBuilder.SupportParentable {
-    method public abstract android.content.Intent getSupportParentActivityIntent();
+  public static interface TaskStackBuilder.SupportParentable {
+    method public android.content.Intent? getSupportParentActivityIntent();
   }
 
 }
@@ -748,80 +749,80 @@
 package androidx.core.content {
 
   public final class ContentResolverCompat {
-    method public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, androidx.core.os.CancellationSignal);
+    method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String[]!, String!, String[]!, String!, androidx.core.os.CancellationSignal!);
   }
 
   public class ContextCompat {
     ctor protected ContextCompat();
-    method public static int checkSelfPermission(android.content.Context, java.lang.String);
-    method public static android.content.Context createDeviceProtectedStorageContext(android.content.Context);
-    method public static java.io.File getCodeCacheDir(android.content.Context);
-    method public static int getColor(android.content.Context, int);
-    method public static android.content.res.ColorStateList getColorStateList(android.content.Context, int);
-    method public static java.io.File getDataDir(android.content.Context);
-    method public static android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+    method public static int checkSelfPermission(android.content.Context, String);
+    method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+    method public static java.io.File! getCodeCacheDir(android.content.Context);
+    method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+    method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+    method public static java.io.File? getDataDir(android.content.Context);
+    method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
     method public static java.io.File[] getExternalCacheDirs(android.content.Context);
-    method public static java.io.File[] getExternalFilesDirs(android.content.Context, java.lang.String);
-    method public static java.io.File getNoBackupFilesDir(android.content.Context);
+    method public static java.io.File[] getExternalFilesDirs(android.content.Context, String?);
+    method public static java.io.File? getNoBackupFilesDir(android.content.Context);
     method public static java.io.File[] getObbDirs(android.content.Context);
-    method public static <T> T getSystemService(android.content.Context, java.lang.Class<T>);
-    method public static java.lang.String getSystemServiceName(android.content.Context, java.lang.Class<?>);
+    method public static <T> T? getSystemService(android.content.Context, Class<T>);
+    method public static String? getSystemServiceName(android.content.Context, Class<?>);
     method public static boolean isDeviceProtectedStorage(android.content.Context);
     method public static boolean startActivities(android.content.Context, android.content.Intent[]);
-    method public static boolean startActivities(android.content.Context, android.content.Intent[], android.os.Bundle);
-    method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
+    method public static boolean startActivities(android.content.Context, android.content.Intent[], android.os.Bundle?);
+    method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
     method public static void startForegroundService(android.content.Context, android.content.Intent);
   }
 
   public class FileProvider extends android.content.ContentProvider {
     ctor public FileProvider();
-    method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
-    method public java.lang.String getType(android.net.Uri);
-    method public static android.net.Uri getUriForFile(android.content.Context, java.lang.String, java.io.File);
-    method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public int delete(android.net.Uri, String?, String[]?);
+    method public String! getType(android.net.Uri);
+    method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
+    method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues!);
     method public boolean onCreate();
-    method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
-    method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
+    method public android.database.Cursor! query(android.net.Uri, String[]?, String?, String[]?, String?);
+    method public int update(android.net.Uri, android.content.ContentValues!, String?, String[]?);
   }
 
   public final class IntentCompat {
-    method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String);
-    field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
-    field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
-    field public static final java.lang.String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+    method public static android.content.Intent makeMainSelectorActivity(String, String);
+    field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+    field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+    field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
   }
 
   public final class MimeTypeFilter {
-    method public static boolean matches(java.lang.String, java.lang.String);
-    method public static java.lang.String matches(java.lang.String, java.lang.String[]);
-    method public static java.lang.String matches(java.lang.String[], java.lang.String);
-    method public static java.lang.String[] matchesMany(java.lang.String[], java.lang.String);
+    method public static boolean matches(String?, String);
+    method public static String? matches(String?, String[]);
+    method public static String? matches(String[]?, String);
+    method public static String[] matchesMany(String[]?, String);
   }
 
   public final class PermissionChecker {
-    method public static int checkCallingOrSelfPermission(android.content.Context, java.lang.String);
-    method public static int checkCallingPermission(android.content.Context, java.lang.String, java.lang.String);
-    method public static int checkPermission(android.content.Context, java.lang.String, int, int, java.lang.String);
-    method public static int checkSelfPermission(android.content.Context, java.lang.String);
+    method public static int checkCallingOrSelfPermission(android.content.Context, String);
+    method public static int checkCallingPermission(android.content.Context, String, String?);
+    method public static int checkPermission(android.content.Context, String, int, int, String?);
+    method public static int checkSelfPermission(android.content.Context, String);
     field public static final int PERMISSION_DENIED = -1; // 0xffffffff
     field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
     field public static final int PERMISSION_GRANTED = 0; // 0x0
   }
 
-  public final deprecated class SharedPreferencesCompat {
+  @Deprecated public final class SharedPreferencesCompat {
   }
 
-  public static final deprecated class SharedPreferencesCompat.EditorCompat {
-    method public deprecated void apply(android.content.SharedPreferences.Editor);
-    method public static deprecated androidx.core.content.SharedPreferencesCompat.EditorCompat getInstance();
+  @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+    method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+    method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
   }
 
 }
 
 package androidx.core.content.pm {
 
-  public final deprecated class ActivityInfoCompat {
-    field public static final deprecated int CONFIG_UI_MODE = 512; // 0x200
+  @Deprecated public final class ActivityInfoCompat {
+    field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
   }
 
   public final class PackageInfoCompat {
@@ -834,33 +835,33 @@
   }
 
   public class ShortcutInfoCompat {
-    method public android.content.ComponentName getActivity();
-    method public java.lang.CharSequence getDisabledMessage();
-    method public java.lang.String getId();
+    method public android.content.ComponentName? getActivity();
+    method public CharSequence? getDisabledMessage();
+    method public String getId();
     method public android.content.Intent getIntent();
     method public android.content.Intent[] getIntents();
-    method public java.lang.CharSequence getLongLabel();
-    method public java.lang.CharSequence getShortLabel();
-    method public android.content.pm.ShortcutInfo toShortcutInfo();
+    method public CharSequence? getLongLabel();
+    method public CharSequence getShortLabel();
+    method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
   }
 
   public static class ShortcutInfoCompat.Builder {
-    ctor public ShortcutInfoCompat.Builder(android.content.Context, java.lang.String);
+    ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
     method public androidx.core.content.pm.ShortcutInfoCompat build();
     method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(java.lang.CharSequence);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder! setAlwaysBadged();
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
     method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
     method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent[]);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(java.lang.CharSequence);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(java.lang.CharSequence);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
   }
 
   public class ShortcutManagerCompat {
     method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
     method public static boolean isRequestPinShortcutSupported(android.content.Context);
-    method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender);
+    method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
   }
 
 }
@@ -872,15 +873,15 @@
   }
 
   public final class ResourcesCompat {
-    method public static int getColor(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
-    method public static android.content.res.ColorStateList getColorStateList(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
-    method public static android.graphics.drawable.Drawable getDrawable(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
-    method public static android.graphics.drawable.Drawable getDrawableForDensity(android.content.res.Resources, int, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
-    method public static android.graphics.Typeface getFont(android.content.Context, int) throws android.content.res.Resources.NotFoundException;
-    method public static void getFont(android.content.Context, int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler) throws android.content.res.Resources.NotFoundException;
+    method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+    method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
   }
 
-  public static abstract class ResourcesCompat.FontCallback {
+  public abstract static class ResourcesCompat.FontCallback {
     ctor public ResourcesCompat.FontCallback();
     method public abstract void onFontRetrievalFailed(int);
     method public abstract void onFontRetrieved(android.graphics.Typeface);
@@ -891,12 +892,12 @@
 package androidx.core.database {
 
   public final class CursorWindowCompat {
-    method public static android.database.CursorWindow create(java.lang.String, long);
+    method public static android.database.CursorWindow create(String?, long);
   }
 
-  public final deprecated class DatabaseUtilsCompat {
-    method public static deprecated java.lang.String[] appendSelectionArgs(java.lang.String[], java.lang.String[]);
-    method public static deprecated java.lang.String concatenateWhere(java.lang.String, java.lang.String);
+  @Deprecated public final class DatabaseUtilsCompat {
+    method @Deprecated public static String[]! appendSelectionArgs(String[]!, String[]!);
+    method @Deprecated public static String! concatenateWhere(String!, String!);
   }
 
 }
@@ -918,31 +919,31 @@
   }
 
   public final class ColorUtils {
-    method public static int HSLToColor(float[]);
-    method public static int LABToColor(double, double, double);
-    method public static void LABToXYZ(double, double, double, double[]);
-    method public static void RGBToHSL(int, int, int, float[]);
-    method public static void RGBToLAB(int, int, int, double[]);
-    method public static void RGBToXYZ(int, int, int, double[]);
-    method public static int XYZToColor(double, double, double);
-    method public static void XYZToLAB(double, double, double, double[]);
-    method public static int blendARGB(int, int, float);
-    method public static void blendHSL(float[], float[], float, float[]);
-    method public static void blendLAB(double[], double[], double, double[]);
-    method public static double calculateContrast(int, int);
-    method public static double calculateLuminance(int);
-    method public static int calculateMinimumAlpha(int, int, float);
-    method public static void colorToHSL(int, float[]);
-    method public static void colorToLAB(int, double[]);
-    method public static void colorToXYZ(int, double[]);
-    method public static int compositeColors(int, int);
-    method public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+    method @ColorInt public static int HSLToColor(float[]);
+    method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+    method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+    method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+    method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+    method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+    method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double);
+    method public static void XYZToLAB(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double, double[]);
+    method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+    method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+    method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+    method public static double calculateContrast(@ColorInt int, @ColorInt int);
+    method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+    method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+    method public static void colorToHSL(@ColorInt int, float[]);
+    method public static void colorToLAB(@ColorInt int, double[]);
+    method public static void colorToXYZ(@ColorInt int, double[]);
+    method public static int compositeColors(@ColorInt int, @ColorInt int);
+    method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
     method public static double distanceEuclidean(double[], double[]);
-    method public static int setAlphaComponent(int, int);
+    method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
   }
 
   public final class PaintCompat {
-    method public static boolean hasGlyph(android.graphics.Paint, java.lang.String);
+    method public static boolean hasGlyph(android.graphics.Paint, String);
   }
 
   public final class PathSegment {
@@ -954,8 +955,8 @@
   }
 
   public final class PathUtils {
-    method public static java.util.Collection<androidx.core.graphics.PathSegment> flatten(android.graphics.Path);
-    method public static java.util.Collection<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, float);
+    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment> flatten(android.graphics.Path);
+    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, @FloatRange(from=0) float);
   }
 
 }
@@ -967,47 +968,48 @@
     method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
     method public static void clearColorFilter(android.graphics.drawable.Drawable);
     method public static int getAlpha(android.graphics.drawable.Drawable);
-    method public static android.graphics.ColorFilter getColorFilter(android.graphics.drawable.Drawable);
+    method public static android.graphics.ColorFilter! getColorFilter(android.graphics.drawable.Drawable);
     method public static int getLayoutDirection(android.graphics.drawable.Drawable);
-    method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
-    method public static deprecated void jumpToCurrentState(android.graphics.drawable.Drawable);
+    method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
     method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
     method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
     method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
     method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
-    method public static void setTint(android.graphics.drawable.Drawable, int);
-    method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList);
+    method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
+    method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
     method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
-    method public static <T extends android.graphics.drawable.Drawable> T unwrap(android.graphics.drawable.Drawable);
-    method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+    method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
+    method public static android.graphics.drawable.Drawable! wrap(android.graphics.drawable.Drawable);
   }
 
   public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
-    method public static androidx.core.graphics.drawable.IconCompat createFromBundle(android.os.Bundle);
-    method public static androidx.core.graphics.drawable.IconCompat createFromIcon(android.content.Context, android.graphics.drawable.Icon);
-    method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
-    method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
-    method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(java.lang.String);
-    method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
-    method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
-    method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, int);
-    method public int getResId();
-    method public java.lang.String getResPackage();
+    method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+    method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+    method @Deprecated @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.graphics.drawable.Icon);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithAdaptiveBitmap(android.graphics.Bitmap!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithBitmap(android.graphics.Bitmap!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(String!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(android.net.Uri!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithData(byte[]!, int, int);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithResource(android.content.Context!, @DrawableRes int);
+    method @IdRes public int getResId();
+    method public String getResPackage();
     method public int getType();
     method public android.net.Uri getUri();
-    method public android.graphics.drawable.Drawable loadDrawable(android.content.Context);
-    method public androidx.core.graphics.drawable.IconCompat setTint(int);
-    method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList);
-    method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode);
-    method public android.os.Bundle toBundle();
-    method public android.graphics.drawable.Icon toIcon();
+    method public android.graphics.drawable.Drawable! loadDrawable(android.content.Context!);
+    method public androidx.core.graphics.drawable.IconCompat! setTint(@ColorInt int);
+    method public androidx.core.graphics.drawable.IconCompat! setTintList(android.content.res.ColorStateList!);
+    method public androidx.core.graphics.drawable.IconCompat! setTintMode(android.graphics.PorterDuff.Mode!);
+    method public android.os.Bundle! toBundle();
+    method @RequiresApi(23) public android.graphics.drawable.Icon! toIcon();
     field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
   }
 
   public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
     method public void draw(android.graphics.Canvas);
-    method public final android.graphics.Bitmap getBitmap();
+    method public final android.graphics.Bitmap? getBitmap();
     method public float getCornerRadius();
     method public int getGravity();
     method public int getOpacity();
@@ -1018,7 +1020,7 @@
     method public void setAlpha(int);
     method public void setAntiAlias(boolean);
     method public void setCircular(boolean);
-    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setColorFilter(android.graphics.ColorFilter!);
     method public void setCornerRadius(float);
     method public void setDither(boolean);
     method public void setGravity(int);
@@ -1029,8 +1031,8 @@
   }
 
   public final class RoundedBitmapDrawableFactory {
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap);
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.lang.String);
+    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
     method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
   }
 
@@ -1039,11 +1041,11 @@
 package androidx.core.hardware.display {
 
   public final class DisplayManagerCompat {
-    method public android.view.Display getDisplay(int);
+    method public android.view.Display? getDisplay(int);
     method public android.view.Display[] getDisplays();
-    method public android.view.Display[] getDisplays(java.lang.String);
+    method public android.view.Display[] getDisplays(String?);
     method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
-    field public static final java.lang.String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+    field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
   }
 
 }
@@ -1051,32 +1053,32 @@
 package androidx.core.hardware.fingerprint {
 
   public final class FingerprintManagerCompat {
-    method public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject, int, androidx.core.os.CancellationSignal, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
     method public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
-    method public boolean hasEnrolledFingerprints();
-    method public boolean isHardwareDetected();
+    method @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+    method @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
   }
 
-  public static abstract class FingerprintManagerCompat.AuthenticationCallback {
+  public abstract static class FingerprintManagerCompat.AuthenticationCallback {
     ctor public FingerprintManagerCompat.AuthenticationCallback();
-    method public void onAuthenticationError(int, java.lang.CharSequence);
+    method public void onAuthenticationError(int, CharSequence!);
     method public void onAuthenticationFailed();
-    method public void onAuthenticationHelp(int, java.lang.CharSequence);
-    method public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult);
+    method public void onAuthenticationHelp(int, CharSequence!);
+    method public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
   }
 
   public static final class FingerprintManagerCompat.AuthenticationResult {
-    ctor public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject);
-    method public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject getCryptoObject();
+    ctor public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+    method public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
   }
 
   public static class FingerprintManagerCompat.CryptoObject {
     ctor public FingerprintManagerCompat.CryptoObject(java.security.Signature);
     ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
     ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
-    method public javax.crypto.Cipher getCipher();
-    method public javax.crypto.Mac getMac();
-    method public java.security.Signature getSignature();
+    method public javax.crypto.Cipher? getCipher();
+    method public javax.crypto.Mac? getMac();
+    method public java.security.Signature? getSignature();
   }
 
 }
@@ -1094,24 +1096,24 @@
 package androidx.core.net {
 
   public final class ConnectivityManagerCompat {
-    method public static android.net.NetworkInfo getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
     method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
-    method public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
     field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
     field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
     field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
   }
 
   public final class TrafficStatsCompat {
-    method public static deprecated void clearThreadStatsTag();
-    method public static deprecated int getThreadStatsTag();
-    method public static deprecated void incrementOperationCount(int);
-    method public static deprecated void incrementOperationCount(int, int);
-    method public static deprecated void setThreadStatsTag(int);
+    method @Deprecated public static void clearThreadStatsTag();
+    method @Deprecated public static int getThreadStatsTag();
+    method @Deprecated public static void incrementOperationCount(int);
+    method @Deprecated public static void incrementOperationCount(int, int);
+    method @Deprecated public static void setThreadStatsTag(int);
     method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
-    method public static deprecated void tagSocket(java.net.Socket) throws java.net.SocketException;
+    method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
     method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
-    method public static deprecated void untagSocket(java.net.Socket) throws java.net.SocketException;
+    method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
   }
 
 }
@@ -1119,82 +1121,82 @@
 package androidx.core.os {
 
   public class BuildCompat {
-    method public static deprecated boolean isAtLeastN();
-    method public static deprecated boolean isAtLeastNMR1();
-    method public static deprecated boolean isAtLeastO();
-    method public static deprecated boolean isAtLeastOMR1();
-    method public static deprecated boolean isAtLeastP();
+    method @Deprecated public static boolean isAtLeastN();
+    method @Deprecated public static boolean isAtLeastNMR1();
+    method @Deprecated public static boolean isAtLeastO();
+    method @Deprecated public static boolean isAtLeastOMR1();
+    method @Deprecated public static boolean isAtLeastP();
     method public static boolean isAtLeastQ();
   }
 
   public final class CancellationSignal {
     ctor public CancellationSignal();
     method public void cancel();
-    method public java.lang.Object getCancellationSignalObject();
+    method public Object! getCancellationSignalObject();
     method public boolean isCanceled();
-    method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener);
+    method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener!);
     method public void throwIfCanceled();
   }
 
-  public static abstract interface CancellationSignal.OnCancelListener {
-    method public abstract void onCancel();
+  public static interface CancellationSignal.OnCancelListener {
+    method public void onCancel();
   }
 
   public final class ConfigurationCompat {
-    method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+    method public static androidx.core.os.LocaleListCompat! getLocales(android.content.res.Configuration!);
   }
 
   public final class EnvironmentCompat {
-    method public static java.lang.String getStorageState(java.io.File);
-    field public static final java.lang.String MEDIA_UNKNOWN = "unknown";
+    method public static String! getStorageState(java.io.File!);
+    field public static final String MEDIA_UNKNOWN = "unknown";
   }
 
   public final class HandlerCompat {
-    method public static boolean postDelayed(android.os.Handler, java.lang.Runnable, java.lang.Object, long);
+    method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
   }
 
   public final class LocaleListCompat {
-    method public static androidx.core.os.LocaleListCompat create(java.util.Locale...);
-    method public static androidx.core.os.LocaleListCompat forLanguageTags(java.lang.String);
-    method public java.util.Locale get(int);
-    method public static androidx.core.os.LocaleListCompat getAdjustedDefault();
-    method public static androidx.core.os.LocaleListCompat getDefault();
+    method public static androidx.core.os.LocaleListCompat! create(java.util.Locale...);
+    method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+    method public java.util.Locale! get(int);
+    method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+    method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
     method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
-    method public java.util.Locale getFirstMatch(java.lang.String[]);
-    method public int indexOf(java.util.Locale);
+    method public java.util.Locale! getFirstMatch(String[]!);
+    method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale!);
     method public boolean isEmpty();
-    method public int size();
-    method public java.lang.String toLanguageTags();
-    method public java.lang.Object unwrap();
-    method public static androidx.core.os.LocaleListCompat wrap(java.lang.Object);
+    method @IntRange(from=0) public int size();
+    method public String toLanguageTags();
+    method public Object? unwrap();
+    method @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
   }
 
   public class OperationCanceledException extends java.lang.RuntimeException {
     ctor public OperationCanceledException();
-    ctor public OperationCanceledException(java.lang.String);
+    ctor public OperationCanceledException(String!);
   }
 
   public final class ParcelCompat {
-    method public static boolean readBoolean(android.os.Parcel);
-    method public static void writeBoolean(android.os.Parcel, boolean);
+    method public static boolean readBoolean(android.os.Parcel!);
+    method public static void writeBoolean(android.os.Parcel!, boolean);
   }
 
-  public final deprecated class ParcelableCompat {
-    method public static deprecated <T> android.os.Parcelable.Creator<T> newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T>);
+  @Deprecated public final class ParcelableCompat {
+    method @Deprecated public static <T> android.os.Parcelable.Creator<T>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T>!);
   }
 
-  public abstract deprecated interface ParcelableCompatCreatorCallbacks<T> {
-    method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
-    method public abstract T[] newArray(int);
+  @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+    method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+    method @Deprecated public T[]! newArray(int);
   }
 
   public final class TraceCompat {
-    method public static void beginSection(java.lang.String);
+    method public static void beginSection(String!);
     method public static void endSection();
   }
 
   public class UserManagerCompat {
-    method public static boolean isUserUnlocked(android.content.Context);
+    method public static boolean isUserUnlocked(android.content.Context!);
   }
 
 }
@@ -1202,37 +1204,37 @@
 package androidx.core.provider {
 
   public final class FontRequest {
-    ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
-    ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, int);
-    method public java.util.List<java.util.List<byte[]>> getCertificates();
-    method public int getCertificatesArrayResId();
-    method public java.lang.String getProviderAuthority();
-    method public java.lang.String getProviderPackage();
-    method public java.lang.String getQuery();
+    ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]>>);
+    ctor public FontRequest(String, String, String, @ArrayRes int);
+    method public java.util.List<java.util.List<byte[]>>? getCertificates();
+    method @ArrayRes public int getCertificatesArrayResId();
+    method public String getProviderAuthority();
+    method public String getProviderPackage();
+    method public String getQuery();
   }
 
   public class FontsContractCompat {
-    method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, androidx.core.provider.FontsContractCompat.FontInfo[]);
-    method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo[]);
+    method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
     method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
   }
 
   public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
     ctor public FontsContractCompat.Columns();
-    field public static final java.lang.String FILE_ID = "file_id";
-    field public static final java.lang.String ITALIC = "font_italic";
-    field public static final java.lang.String RESULT_CODE = "result_code";
+    field public static final String FILE_ID = "file_id";
+    field public static final String ITALIC = "font_italic";
+    field public static final String RESULT_CODE = "result_code";
     field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
     field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
     field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
     field public static final int RESULT_CODE_OK = 0; // 0x0
-    field public static final java.lang.String TTC_INDEX = "font_ttc_index";
-    field public static final java.lang.String VARIATION_SETTINGS = "font_variation_settings";
-    field public static final java.lang.String WEIGHT = "font_weight";
+    field public static final String TTC_INDEX = "font_ttc_index";
+    field public static final String VARIATION_SETTINGS = "font_variation_settings";
+    field public static final String WEIGHT = "font_weight";
   }
 
   public static class FontsContractCompat.FontFamilyResult {
-    method public androidx.core.provider.FontsContractCompat.FontInfo[] getFonts();
+    method public androidx.core.provider.FontsContractCompat.FontInfo[]! getFonts();
     method public int getStatusCode();
     field public static final int STATUS_OK = 0; // 0x0
     field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
@@ -1241,16 +1243,16 @@
 
   public static class FontsContractCompat.FontInfo {
     method public int getResultCode();
-    method public int getTtcIndex();
+    method @IntRange(from=0) public int getTtcIndex();
     method public android.net.Uri getUri();
-    method public int getWeight();
+    method @IntRange(from=1, to=1000) public int getWeight();
     method public boolean isItalic();
   }
 
   public static class FontsContractCompat.FontRequestCallback {
     ctor public FontsContractCompat.FontRequestCallback();
     method public void onTypefaceRequestFailed(int);
-    method public void onTypefaceRetrieved(android.graphics.Typeface);
+    method public void onTypefaceRetrieved(android.graphics.Typeface!);
     field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
     field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
     field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
@@ -1265,36 +1267,36 @@
 package androidx.core.text {
 
   public final class BidiFormatter {
-    method public static androidx.core.text.BidiFormatter getInstance();
-    method public static androidx.core.text.BidiFormatter getInstance(boolean);
-    method public static androidx.core.text.BidiFormatter getInstance(java.util.Locale);
+    method public static androidx.core.text.BidiFormatter! getInstance();
+    method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+    method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
     method public boolean getStereoReset();
-    method public boolean isRtl(java.lang.String);
-    method public boolean isRtl(java.lang.CharSequence);
+    method public boolean isRtl(String!);
+    method public boolean isRtl(CharSequence!);
     method public boolean isRtlContext();
-    method public java.lang.String unicodeWrap(java.lang.String, androidx.core.text.TextDirectionHeuristicCompat, boolean);
-    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, androidx.core.text.TextDirectionHeuristicCompat, boolean);
-    method public java.lang.String unicodeWrap(java.lang.String, androidx.core.text.TextDirectionHeuristicCompat);
-    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, androidx.core.text.TextDirectionHeuristicCompat);
-    method public java.lang.String unicodeWrap(java.lang.String, boolean);
-    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, boolean);
-    method public java.lang.String unicodeWrap(java.lang.String);
-    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence);
+    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+    method public String! unicodeWrap(String!, boolean);
+    method public CharSequence! unicodeWrap(CharSequence!, boolean);
+    method public String! unicodeWrap(String!);
+    method public CharSequence! unicodeWrap(CharSequence!);
   }
 
   public static final class BidiFormatter.Builder {
     ctor public BidiFormatter.Builder();
     ctor public BidiFormatter.Builder(boolean);
-    ctor public BidiFormatter.Builder(java.util.Locale);
-    method public androidx.core.text.BidiFormatter build();
-    method public androidx.core.text.BidiFormatter.Builder setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat);
-    method public androidx.core.text.BidiFormatter.Builder stereoReset(boolean);
+    ctor public BidiFormatter.Builder(java.util.Locale!);
+    method public androidx.core.text.BidiFormatter! build();
+    method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+    method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
   }
 
   public final class HtmlCompat {
-    method public static android.text.Spanned fromHtml(java.lang.String, int);
-    method public static android.text.Spanned fromHtml(java.lang.String, int, android.text.Html.ImageGetter, android.text.Html.TagHandler);
-    method public static java.lang.String toHtml(android.text.Spanned, int);
+    method public static android.text.Spanned fromHtml(String, int);
+    method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+    method public static String toHtml(android.text.Spanned, int);
     field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
     field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
     field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
@@ -1309,61 +1311,61 @@
   }
 
   public final class ICUCompat {
-    method public static java.lang.String maximizeAndGetScript(java.util.Locale);
+    method public static String? maximizeAndGetScript(java.util.Locale!);
   }
 
   public class PrecomputedTextCompat implements android.text.Spannable {
     method public char charAt(int);
-    method public static androidx.core.text.PrecomputedTextCompat create(java.lang.CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
-    method public int getParagraphCount();
-    method public int getParagraphEnd(int);
-    method public int getParagraphStart(int);
+    method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+    method @IntRange(from=0) public int getParagraphCount();
+    method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
     method public androidx.core.text.PrecomputedTextCompat.Params getParams();
-    method public int getSpanEnd(java.lang.Object);
-    method public int getSpanFlags(java.lang.Object);
-    method public int getSpanStart(java.lang.Object);
-    method public <T> T[] getSpans(int, int, java.lang.Class<T>);
-    method public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat> getTextFuture(java.lang.CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor);
+    method public int getSpanEnd(Object!);
+    method public int getSpanFlags(Object!);
+    method public int getSpanStart(Object!);
+    method public <T> T[]! getSpans(int, int, Class<T>!);
+    method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
     method public int length();
-    method public int nextSpanTransition(int, int, java.lang.Class);
-    method public void removeSpan(java.lang.Object);
-    method public void setSpan(java.lang.Object, int, int, int);
-    method public java.lang.CharSequence subSequence(int, int);
+    method public int nextSpanTransition(int, int, Class!);
+    method public void removeSpan(Object!);
+    method public void setSpan(Object!, int, int, int);
+    method public CharSequence! subSequence(int, int);
   }
 
   public static final class PrecomputedTextCompat.Params {
-    ctor public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
-    method public int getBreakStrategy();
-    method public int getHyphenationFrequency();
-    method public android.text.TextDirectionHeuristic getTextDirection();
+    ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+    method @RequiresApi(23) public int getBreakStrategy();
+    method @RequiresApi(23) public int getHyphenationFrequency();
+    method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
     method public android.text.TextPaint getTextPaint();
   }
 
   public static class PrecomputedTextCompat.Params.Builder {
     ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
     method public androidx.core.text.PrecomputedTextCompat.Params build();
-    method public androidx.core.text.PrecomputedTextCompat.Params.Builder setBreakStrategy(int);
-    method public androidx.core.text.PrecomputedTextCompat.Params.Builder setHyphenationFrequency(int);
-    method public androidx.core.text.PrecomputedTextCompat.Params.Builder setTextDirection(android.text.TextDirectionHeuristic);
+    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+    method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
   }
 
-  public abstract interface TextDirectionHeuristicCompat {
-    method public abstract boolean isRtl(char[], int, int);
-    method public abstract boolean isRtl(java.lang.CharSequence, int, int);
+  public interface TextDirectionHeuristicCompat {
+    method public boolean isRtl(char[]!, int, int);
+    method public boolean isRtl(CharSequence!, int, int);
   }
 
   public final class TextDirectionHeuristicsCompat {
-    field public static final androidx.core.text.TextDirectionHeuristicCompat ANYRTL_LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat FIRSTSTRONG_LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat FIRSTSTRONG_RTL;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat LOCALE;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat RTL;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
   }
 
   public final class TextUtilsCompat {
-    method public static int getLayoutDirectionFromLocale(java.util.Locale);
-    method public static java.lang.String htmlEncode(java.lang.String);
+    method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+    method public static String htmlEncode(String);
   }
 
 }
@@ -1373,12 +1375,12 @@
   public final class LinkifyCompat {
     method public static boolean addLinks(android.text.Spannable, int);
     method public static boolean addLinks(android.widget.TextView, int);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String[]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String[]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
   }
 
 }
@@ -1388,53 +1390,53 @@
   public class AtomicFile {
     ctor public AtomicFile(java.io.File);
     method public void delete();
-    method public void failWrite(java.io.FileOutputStream);
-    method public void finishWrite(java.io.FileOutputStream);
+    method public void failWrite(java.io.FileOutputStream?);
+    method public void finishWrite(java.io.FileOutputStream?);
     method public java.io.File getBaseFile();
     method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
     method public byte[] readFully() throws java.io.IOException;
     method public java.io.FileOutputStream startWrite() throws java.io.IOException;
   }
 
-  public abstract interface Consumer<T> {
-    method public abstract void accept(T);
+  public interface Consumer<T> {
+    method public void accept(T!);
   }
 
   public class ObjectsCompat {
-    method public static boolean equals(java.lang.Object, java.lang.Object);
-    method public static int hash(java.lang.Object...);
-    method public static int hashCode(java.lang.Object);
+    method public static boolean equals(Object?, Object?);
+    method public static int hash(java.lang.Object...?);
+    method public static int hashCode(Object?);
   }
 
   public class Pair<F, S> {
-    ctor public Pair(F, S);
-    method public static <A, B> androidx.core.util.Pair<A, B> create(A, B);
-    field public final F first;
-    field public final S second;
+    ctor public Pair(F?, S?);
+    method public static <A, B> androidx.core.util.Pair<A,B> create(A?, B?);
+    field public final F? first;
+    field public final S? second;
   }
 
   public final class PatternsCompat {
-    field public static final java.util.regex.Pattern DOMAIN_NAME;
-    field public static final java.util.regex.Pattern EMAIL_ADDRESS;
-    field public static final java.util.regex.Pattern IP_ADDRESS;
-    field public static final java.util.regex.Pattern WEB_URL;
+    field public static final java.util.regex.Pattern! DOMAIN_NAME;
+    field public static final java.util.regex.Pattern! EMAIL_ADDRESS;
+    field public static final java.util.regex.Pattern! IP_ADDRESS;
+    field public static final java.util.regex.Pattern! WEB_URL;
   }
 
   public final class Pools {
   }
 
-  public static abstract interface Pools.Pool<T> {
-    method public abstract T acquire();
-    method public abstract boolean release(T);
-  }
-
-  public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool {
-    ctor public Pools.SimplePool(int);
-    method public T acquire();
+  public static interface Pools.Pool<T> {
+    method public T? acquire();
     method public boolean release(T);
   }
 
-  public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool {
+  public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+    ctor public Pools.SimplePool(int);
+    method public T! acquire();
+    method public boolean release(T);
+  }
+
+  public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
     ctor public Pools.SynchronizedPool(int);
   }
 
@@ -1444,38 +1446,38 @@
 
   public class AccessibilityDelegateCompat {
     ctor public AccessibilityDelegateCompat();
-    method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
-    method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
-    method public void sendAccessibilityEvent(android.view.View, int);
-    method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View!);
+    method public void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public void onInitializeAccessibilityNodeInfo(android.view.View!, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+    method public void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public boolean performAccessibilityAction(android.view.View!, int, android.os.Bundle!);
+    method public void sendAccessibilityEvent(android.view.View!, int);
+    method public void sendAccessibilityEventUnchecked(android.view.View!, android.view.accessibility.AccessibilityEvent!);
   }
 
   public abstract class ActionProvider {
-    ctor public ActionProvider(android.content.Context);
-    method public android.content.Context getContext();
+    ctor public ActionProvider(android.content.Context!);
+    method public android.content.Context! getContext();
     method public boolean hasSubMenu();
     method public boolean isVisible();
-    method public abstract android.view.View onCreateActionView();
-    method public android.view.View onCreateActionView(android.view.MenuItem);
+    method public abstract android.view.View! onCreateActionView();
+    method public android.view.View! onCreateActionView(android.view.MenuItem!);
     method public boolean onPerformDefaultAction();
-    method public void onPrepareSubMenu(android.view.SubMenu);
+    method public void onPrepareSubMenu(android.view.SubMenu!);
     method public boolean overridesItemVisibility();
     method public void refreshVisibility();
-    method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener);
+    method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener!);
   }
 
-  public static abstract interface ActionProvider.VisibilityListener {
-    method public abstract void onActionProviderVisibilityChanged(boolean);
+  public static interface ActionProvider.VisibilityListener {
+    method public void onActionProviderVisibilityChanged(boolean);
   }
 
   public final class DisplayCutoutCompat {
-    ctor public DisplayCutoutCompat(android.graphics.Rect, java.util.List<android.graphics.Rect>);
-    method public java.util.List<android.graphics.Rect> getBoundingRects();
+    ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect>!);
+    method public java.util.List<android.graphics.Rect>! getBoundingRects();
     method public int getSafeInsetBottom();
     method public int getSafeInsetLeft();
     method public int getSafeInsetRight();
@@ -1487,31 +1489,31 @@
   }
 
   public class DragStartHelper {
-    ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
+    ctor public DragStartHelper(android.view.View!, androidx.core.view.DragStartHelper.OnDragStartListener!);
     method public void attach();
     method public void detach();
-    method public void getTouchPosition(android.graphics.Point);
-    method public boolean onLongClick(android.view.View);
-    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+    method public void getTouchPosition(android.graphics.Point!);
+    method public boolean onLongClick(android.view.View!);
+    method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
   }
 
-  public static abstract interface DragStartHelper.OnDragStartListener {
-    method public abstract boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
+  public static interface DragStartHelper.OnDragStartListener {
+    method public boolean onDragStart(android.view.View!, androidx.core.view.DragStartHelper!);
   }
 
   public final class GestureDetectorCompat {
-    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
-    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler);
+    ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!);
+    ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!, android.os.Handler!);
     method public boolean isLongpressEnabled();
-    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTouchEvent(android.view.MotionEvent!);
     method public void setIsLongpressEnabled(boolean);
-    method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener);
+    method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener!);
   }
 
   public final class GravityCompat {
-    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
-    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
-    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+    method public static void apply(int, int, int, android.graphics.Rect!, android.graphics.Rect!, int);
+    method public static void apply(int, int, int, android.graphics.Rect!, int, int, android.graphics.Rect!, int);
+    method public static void applyDisplay(int, android.graphics.Rect!, android.graphics.Rect!, int);
     method public static int getAbsoluteGravity(int, int);
     field public static final int END = 8388613; // 0x800005
     field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
@@ -1544,165 +1546,165 @@
   }
 
   public final class LayoutInflaterCompat {
-    method public static deprecated androidx.core.view.LayoutInflaterFactory getFactory(android.view.LayoutInflater);
-    method public static deprecated void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+    method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+    method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
     method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
   }
 
-  public abstract deprecated interface LayoutInflaterFactory {
-    method public abstract android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+  @Deprecated public interface LayoutInflaterFactory {
+    method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
   }
 
   public final class MarginLayoutParamsCompat {
-    method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
-    method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
-    method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
-    method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
-    method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+    method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams!);
+    method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams!);
+    method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams!);
+    method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams!);
+    method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+    method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+    method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams!, int);
+    method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams!, int);
   }
 
   public final class MenuCompat {
-    method public static void setGroupDividerEnabled(android.view.Menu, boolean);
-    method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+    method public static void setGroupDividerEnabled(android.view.Menu!, boolean);
+    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
   }
 
   public final class MenuItemCompat {
-    method public static deprecated boolean collapseActionView(android.view.MenuItem);
-    method public static deprecated boolean expandActionView(android.view.MenuItem);
-    method public static androidx.core.view.ActionProvider getActionProvider(android.view.MenuItem);
-    method public static deprecated android.view.View getActionView(android.view.MenuItem);
-    method public static int getAlphabeticModifiers(android.view.MenuItem);
-    method public static java.lang.CharSequence getContentDescription(android.view.MenuItem);
-    method public static android.content.res.ColorStateList getIconTintList(android.view.MenuItem);
-    method public static android.graphics.PorterDuff.Mode getIconTintMode(android.view.MenuItem);
-    method public static int getNumericModifiers(android.view.MenuItem);
-    method public static java.lang.CharSequence getTooltipText(android.view.MenuItem);
-    method public static deprecated boolean isActionViewExpanded(android.view.MenuItem);
-    method public static android.view.MenuItem setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider);
-    method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, android.view.View);
-    method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, int);
-    method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
-    method public static void setContentDescription(android.view.MenuItem, java.lang.CharSequence);
-    method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList);
-    method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode);
-    method public static void setNumericShortcut(android.view.MenuItem, char, int);
-    method public static deprecated android.view.MenuItem setOnActionExpandListener(android.view.MenuItem, androidx.core.view.MenuItemCompat.OnActionExpandListener);
-    method public static void setShortcut(android.view.MenuItem, char, char, int, int);
-    method public static deprecated void setShowAsAction(android.view.MenuItem, int);
-    method public static void setTooltipText(android.view.MenuItem, java.lang.CharSequence);
-    field public static final deprecated int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
-    field public static final deprecated int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
-    field public static final deprecated int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
-    field public static final deprecated int SHOW_AS_ACTION_NEVER = 0; // 0x0
-    field public static final deprecated int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+    method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+    method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+    method public static androidx.core.view.ActionProvider! getActionProvider(android.view.MenuItem!);
+    method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+    method public static int getAlphabeticModifiers(android.view.MenuItem!);
+    method public static CharSequence! getContentDescription(android.view.MenuItem!);
+    method public static android.content.res.ColorStateList! getIconTintList(android.view.MenuItem!);
+    method public static android.graphics.PorterDuff.Mode! getIconTintMode(android.view.MenuItem!);
+    method public static int getNumericModifiers(android.view.MenuItem!);
+    method public static CharSequence! getTooltipText(android.view.MenuItem!);
+    method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+    method public static android.view.MenuItem! setActionProvider(android.view.MenuItem!, androidx.core.view.ActionProvider!);
+    method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+    method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
+    method public static void setAlphabeticShortcut(android.view.MenuItem!, char, int);
+    method public static void setContentDescription(android.view.MenuItem!, CharSequence!);
+    method public static void setIconTintList(android.view.MenuItem!, android.content.res.ColorStateList!);
+    method public static void setIconTintMode(android.view.MenuItem!, android.graphics.PorterDuff.Mode!);
+    method public static void setNumericShortcut(android.view.MenuItem!, char, int);
+    method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+    method public static void setShortcut(android.view.MenuItem!, char, char, int, int);
+    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+    method public static void setTooltipText(android.view.MenuItem!, CharSequence!);
+    field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+    field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+    field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+    field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+    field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
   }
 
-  public static abstract deprecated interface MenuItemCompat.OnActionExpandListener {
-    method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem);
-    method public abstract boolean onMenuItemActionExpand(android.view.MenuItem);
+  @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+    method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+    method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
   }
 
   public final class MotionEventCompat {
-    method public static deprecated int findPointerIndex(android.view.MotionEvent, int);
-    method public static deprecated int getActionIndex(android.view.MotionEvent);
-    method public static deprecated int getActionMasked(android.view.MotionEvent);
-    method public static deprecated float getAxisValue(android.view.MotionEvent, int);
-    method public static deprecated float getAxisValue(android.view.MotionEvent, int, int);
-    method public static deprecated int getButtonState(android.view.MotionEvent);
-    method public static deprecated int getPointerCount(android.view.MotionEvent);
-    method public static deprecated int getPointerId(android.view.MotionEvent, int);
-    method public static deprecated int getSource(android.view.MotionEvent);
-    method public static deprecated float getX(android.view.MotionEvent, int);
-    method public static deprecated float getY(android.view.MotionEvent, int);
-    method public static boolean isFromSource(android.view.MotionEvent, int);
-    field public static final deprecated int ACTION_HOVER_ENTER = 9; // 0x9
-    field public static final deprecated int ACTION_HOVER_EXIT = 10; // 0xa
-    field public static final deprecated int ACTION_HOVER_MOVE = 7; // 0x7
-    field public static final deprecated int ACTION_MASK = 255; // 0xff
-    field public static final deprecated int ACTION_POINTER_DOWN = 5; // 0x5
-    field public static final deprecated int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
-    field public static final deprecated int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
-    field public static final deprecated int ACTION_POINTER_UP = 6; // 0x6
-    field public static final deprecated int ACTION_SCROLL = 8; // 0x8
-    field public static final deprecated int AXIS_BRAKE = 23; // 0x17
-    field public static final deprecated int AXIS_DISTANCE = 24; // 0x18
-    field public static final deprecated int AXIS_GAS = 22; // 0x16
-    field public static final deprecated int AXIS_GENERIC_1 = 32; // 0x20
-    field public static final deprecated int AXIS_GENERIC_10 = 41; // 0x29
-    field public static final deprecated int AXIS_GENERIC_11 = 42; // 0x2a
-    field public static final deprecated int AXIS_GENERIC_12 = 43; // 0x2b
-    field public static final deprecated int AXIS_GENERIC_13 = 44; // 0x2c
-    field public static final deprecated int AXIS_GENERIC_14 = 45; // 0x2d
-    field public static final deprecated int AXIS_GENERIC_15 = 46; // 0x2e
-    field public static final deprecated int AXIS_GENERIC_16 = 47; // 0x2f
-    field public static final deprecated int AXIS_GENERIC_2 = 33; // 0x21
-    field public static final deprecated int AXIS_GENERIC_3 = 34; // 0x22
-    field public static final deprecated int AXIS_GENERIC_4 = 35; // 0x23
-    field public static final deprecated int AXIS_GENERIC_5 = 36; // 0x24
-    field public static final deprecated int AXIS_GENERIC_6 = 37; // 0x25
-    field public static final deprecated int AXIS_GENERIC_7 = 38; // 0x26
-    field public static final deprecated int AXIS_GENERIC_8 = 39; // 0x27
-    field public static final deprecated int AXIS_GENERIC_9 = 40; // 0x28
-    field public static final deprecated int AXIS_HAT_X = 15; // 0xf
-    field public static final deprecated int AXIS_HAT_Y = 16; // 0x10
-    field public static final deprecated int AXIS_HSCROLL = 10; // 0xa
-    field public static final deprecated int AXIS_LTRIGGER = 17; // 0x11
-    field public static final deprecated int AXIS_ORIENTATION = 8; // 0x8
-    field public static final deprecated int AXIS_PRESSURE = 2; // 0x2
+    method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+    method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+    method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+    method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+    method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+    method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+    method @Deprecated public static int getSource(android.view.MotionEvent!);
+    method @Deprecated public static float getX(android.view.MotionEvent!, int);
+    method @Deprecated public static float getY(android.view.MotionEvent!, int);
+    method public static boolean isFromSource(android.view.MotionEvent!, int);
+    field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+    field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+    field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+    field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+    field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+    field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+    field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+    field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+    field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+    field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+    field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+    field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+    field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+    field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+    field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+    field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+    field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+    field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+    field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+    field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+    field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+    field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+    field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+    field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+    field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+    field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+    field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+    field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+    field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+    field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+    field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+    field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+    field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+    field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
     field public static final int AXIS_RELATIVE_X = 27; // 0x1b
     field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
-    field public static final deprecated int AXIS_RTRIGGER = 18; // 0x12
-    field public static final deprecated int AXIS_RUDDER = 20; // 0x14
-    field public static final deprecated int AXIS_RX = 12; // 0xc
-    field public static final deprecated int AXIS_RY = 13; // 0xd
-    field public static final deprecated int AXIS_RZ = 14; // 0xe
+    field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+    field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+    field @Deprecated public static final int AXIS_RX = 12; // 0xc
+    field @Deprecated public static final int AXIS_RY = 13; // 0xd
+    field @Deprecated public static final int AXIS_RZ = 14; // 0xe
     field public static final int AXIS_SCROLL = 26; // 0x1a
-    field public static final deprecated int AXIS_SIZE = 3; // 0x3
-    field public static final deprecated int AXIS_THROTTLE = 19; // 0x13
-    field public static final deprecated int AXIS_TILT = 25; // 0x19
-    field public static final deprecated int AXIS_TOOL_MAJOR = 6; // 0x6
-    field public static final deprecated int AXIS_TOOL_MINOR = 7; // 0x7
-    field public static final deprecated int AXIS_TOUCH_MAJOR = 4; // 0x4
-    field public static final deprecated int AXIS_TOUCH_MINOR = 5; // 0x5
-    field public static final deprecated int AXIS_VSCROLL = 9; // 0x9
-    field public static final deprecated int AXIS_WHEEL = 21; // 0x15
-    field public static final deprecated int AXIS_X = 0; // 0x0
-    field public static final deprecated int AXIS_Y = 1; // 0x1
-    field public static final deprecated int AXIS_Z = 11; // 0xb
-    field public static final deprecated int BUTTON_PRIMARY = 1; // 0x1
+    field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+    field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+    field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+    field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+    field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+    field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+    field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+    field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+    field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+    field @Deprecated public static final int AXIS_X = 0; // 0x0
+    field @Deprecated public static final int AXIS_Y = 1; // 0x1
+    field @Deprecated public static final int AXIS_Z = 11; // 0xb
+    field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
   }
 
-  public abstract interface NestedScrollingChild {
-    method public abstract boolean dispatchNestedFling(float, float, boolean);
-    method public abstract boolean dispatchNestedPreFling(float, float);
-    method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[]);
-    method public abstract boolean dispatchNestedScroll(int, int, int, int, int[]);
-    method public abstract boolean hasNestedScrollingParent();
-    method public abstract boolean isNestedScrollingEnabled();
-    method public abstract void setNestedScrollingEnabled(boolean);
-    method public abstract boolean startNestedScroll(int);
-    method public abstract void stopNestedScroll();
+  public interface NestedScrollingChild {
+    method public boolean dispatchNestedFling(float, float, boolean);
+    method public boolean dispatchNestedPreFling(float, float);
+    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+    method public boolean hasNestedScrollingParent();
+    method public boolean isNestedScrollingEnabled();
+    method public void setNestedScrollingEnabled(boolean);
+    method public boolean startNestedScroll(int);
+    method public void stopNestedScroll();
   }
 
-  public abstract interface NestedScrollingChild2 implements androidx.core.view.NestedScrollingChild {
-    method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[], int);
-    method public abstract boolean dispatchNestedScroll(int, int, int, int, int[], int);
-    method public abstract boolean hasNestedScrollingParent(int);
-    method public abstract boolean startNestedScroll(int, int);
-    method public abstract void stopNestedScroll(int);
+  public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+    method public boolean hasNestedScrollingParent(int);
+    method public boolean startNestedScroll(int, int);
+    method public void stopNestedScroll(int);
   }
 
   public class NestedScrollingChildHelper {
     ctor public NestedScrollingChildHelper(android.view.View);
     method public boolean dispatchNestedFling(float, float, boolean);
     method public boolean dispatchNestedPreFling(float, float);
-    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
-    method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
     method public boolean hasNestedScrollingParent();
     method public boolean hasNestedScrollingParent(int);
     method public boolean isNestedScrollingEnabled();
@@ -1715,23 +1717,23 @@
     method public void stopNestedScroll(int);
   }
 
-  public abstract interface NestedScrollingParent {
-    method public abstract int getNestedScrollAxes();
-    method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
-    method public abstract boolean onNestedPreFling(android.view.View, float, float);
-    method public abstract void onNestedPreScroll(android.view.View, int, int, int[]);
-    method public abstract void onNestedScroll(android.view.View, int, int, int, int);
-    method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int);
-    method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int);
-    method public abstract void onStopNestedScroll(android.view.View);
+  public interface NestedScrollingParent {
+    method public int getNestedScrollAxes();
+    method public boolean onNestedFling(android.view.View, float, float, boolean);
+    method public boolean onNestedPreFling(android.view.View, float, float);
+    method public void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public void onNestedScroll(android.view.View, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public void onStopNestedScroll(android.view.View);
   }
 
-  public abstract interface NestedScrollingParent2 implements androidx.core.view.NestedScrollingParent {
-    method public abstract void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public abstract void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public abstract void onStopNestedScroll(android.view.View, int);
+  public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+    method public void onNestedScroll(android.view.View, int, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+    method public void onStopNestedScroll(android.view.View, int);
   }
 
   public class NestedScrollingParentHelper {
@@ -1743,14 +1745,14 @@
     method public void onStopNestedScroll(android.view.View, int);
   }
 
-  public abstract interface OnApplyWindowInsetsListener {
-    method public abstract androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+  public interface OnApplyWindowInsetsListener {
+    method public androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View!, androidx.core.view.WindowInsetsCompat!);
   }
 
   public final class PointerIconCompat {
-    method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
-    method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
-    method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
+    method public static androidx.core.view.PointerIconCompat! create(android.graphics.Bitmap!, float, float);
+    method public static androidx.core.view.PointerIconCompat! getSystemIcon(android.content.Context!, int);
+    method public static androidx.core.view.PointerIconCompat! load(android.content.res.Resources!, int);
     field public static final int TYPE_ALIAS = 1010; // 0x3f2
     field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
     field public static final int TYPE_ARROW = 1000; // 0x3e8
@@ -1777,31 +1779,31 @@
   }
 
   public final class ScaleGestureDetectorCompat {
-    method public static deprecated boolean isQuickScaleEnabled(java.lang.Object);
-    method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
-    method public static deprecated void setQuickScaleEnabled(java.lang.Object, boolean);
-    method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+    method @Deprecated public static boolean isQuickScaleEnabled(Object!);
+    method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector!);
+    method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+    method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector!, boolean);
   }
 
-  public abstract interface ScrollingView {
-    method public abstract int computeHorizontalScrollExtent();
-    method public abstract int computeHorizontalScrollOffset();
-    method public abstract int computeHorizontalScrollRange();
-    method public abstract int computeVerticalScrollExtent();
-    method public abstract int computeVerticalScrollOffset();
-    method public abstract int computeVerticalScrollRange();
+  public interface ScrollingView {
+    method public int computeHorizontalScrollExtent();
+    method public int computeHorizontalScrollOffset();
+    method public int computeHorizontalScrollRange();
+    method public int computeVerticalScrollExtent();
+    method public int computeVerticalScrollOffset();
+    method public int computeVerticalScrollRange();
   }
 
-  public abstract interface TintableBackgroundView {
-    method public abstract android.content.res.ColorStateList getSupportBackgroundTintList();
-    method public abstract android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
-    method public abstract void setSupportBackgroundTintList(android.content.res.ColorStateList);
-    method public abstract void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+  public interface TintableBackgroundView {
+    method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
   }
 
-  public final deprecated class VelocityTrackerCompat {
-    method public static deprecated float getXVelocity(android.view.VelocityTracker, int);
-    method public static deprecated float getYVelocity(android.view.VelocityTracker, int);
+  @Deprecated public final class VelocityTrackerCompat {
+    method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+    method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
   }
 
   public class ViewCompat {
@@ -1809,60 +1811,60 @@
     method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View>, int);
     method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
     method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
-    method public static deprecated boolean canScrollHorizontally(android.view.View, int);
-    method public static deprecated boolean canScrollVertically(android.view.View, int);
+    method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+    method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
     method public static void cancelDragAndDrop(android.view.View);
-    method public static deprecated int combineMeasuredStates(int, int);
-    method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+    method @Deprecated public static int combineMeasuredStates(int, int);
+    method public static androidx.core.view.WindowInsetsCompat! dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
     method public static void dispatchFinishTemporaryDetach(android.view.View);
     method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
     method public static boolean dispatchNestedPreFling(android.view.View, float, float);
-    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[]);
-    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[], int);
-    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]);
-    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[], int);
+    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
+    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
+    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
+    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
     method public static void dispatchStartTemporaryDetach(android.view.View);
     method public static int generateViewId();
     method public static int getAccessibilityLiveRegion(android.view.View);
-    method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
-    method public static deprecated float getAlpha(android.view.View);
-    method public static android.content.res.ColorStateList getBackgroundTintList(android.view.View);
-    method public static android.graphics.PorterDuff.Mode getBackgroundTintMode(android.view.View);
-    method public static android.graphics.Rect getClipBounds(android.view.View);
-    method public static android.view.Display getDisplay(android.view.View);
+    method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View);
+    method @Deprecated public static float getAlpha(android.view.View!);
+    method public static android.content.res.ColorStateList! getBackgroundTintList(android.view.View);
+    method public static android.graphics.PorterDuff.Mode! getBackgroundTintMode(android.view.View);
+    method public static android.graphics.Rect? getClipBounds(android.view.View);
+    method public static android.view.Display? getDisplay(android.view.View);
     method public static float getElevation(android.view.View);
     method public static boolean getFitsSystemWindows(android.view.View);
     method public static int getImportantForAccessibility(android.view.View);
     method public static int getImportantForAutofill(android.view.View);
     method public static int getLabelFor(android.view.View);
-    method public static deprecated int getLayerType(android.view.View);
+    method @Deprecated public static int getLayerType(android.view.View!);
     method public static int getLayoutDirection(android.view.View);
-    method public static deprecated android.graphics.Matrix getMatrix(android.view.View);
-    method public static deprecated int getMeasuredHeightAndState(android.view.View);
-    method public static deprecated int getMeasuredState(android.view.View);
-    method public static deprecated int getMeasuredWidthAndState(android.view.View);
+    method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+    method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+    method @Deprecated public static int getMeasuredState(android.view.View!);
+    method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
     method public static int getMinimumHeight(android.view.View);
     method public static int getMinimumWidth(android.view.View);
     method public static int getNextClusterForwardId(android.view.View);
-    method public static deprecated int getOverScrollMode(android.view.View);
-    method public static int getPaddingEnd(android.view.View);
-    method public static int getPaddingStart(android.view.View);
-    method public static android.view.ViewParent getParentForAccessibility(android.view.View);
-    method public static deprecated float getPivotX(android.view.View);
-    method public static deprecated float getPivotY(android.view.View);
-    method public static deprecated float getRotation(android.view.View);
-    method public static deprecated float getRotationX(android.view.View);
-    method public static deprecated float getRotationY(android.view.View);
-    method public static deprecated float getScaleX(android.view.View);
-    method public static deprecated float getScaleY(android.view.View);
+    method @Deprecated public static int getOverScrollMode(android.view.View!);
+    method @Px public static int getPaddingEnd(android.view.View);
+    method @Px public static int getPaddingStart(android.view.View);
+    method public static android.view.ViewParent! getParentForAccessibility(android.view.View);
+    method @Deprecated public static float getPivotX(android.view.View!);
+    method @Deprecated public static float getPivotY(android.view.View!);
+    method @Deprecated public static float getRotation(android.view.View!);
+    method @Deprecated public static float getRotationX(android.view.View!);
+    method @Deprecated public static float getRotationY(android.view.View!);
+    method @Deprecated public static float getScaleX(android.view.View!);
+    method @Deprecated public static float getScaleY(android.view.View!);
     method public static int getScrollIndicators(android.view.View);
-    method public static java.lang.String getTransitionName(android.view.View);
-    method public static deprecated float getTranslationX(android.view.View);
-    method public static deprecated float getTranslationY(android.view.View);
+    method public static String? getTransitionName(android.view.View);
+    method @Deprecated public static float getTranslationX(android.view.View!);
+    method @Deprecated public static float getTranslationY(android.view.View!);
     method public static float getTranslationZ(android.view.View);
     method public static int getWindowSystemUiVisibility(android.view.View);
-    method public static deprecated float getX(android.view.View);
-    method public static deprecated float getY(android.view.View);
+    method @Deprecated public static float getX(android.view.View!);
+    method @Deprecated public static float getY(android.view.View!);
     method public static float getZ(android.view.View);
     method public static boolean hasAccessibilityDelegate(android.view.View);
     method public static boolean hasExplicitFocusable(android.view.View);
@@ -1880,77 +1882,77 @@
     method public static boolean isLaidOut(android.view.View);
     method public static boolean isLayoutDirectionResolved(android.view.View);
     method public static boolean isNestedScrollingEnabled(android.view.View);
-    method public static deprecated boolean isOpaque(android.view.View);
+    method @Deprecated public static boolean isOpaque(android.view.View!);
     method public static boolean isPaddingRelative(android.view.View);
-    method public static deprecated void jumpDrawablesToCurrentState(android.view.View);
-    method public static android.view.View keyboardNavigationClusterSearch(android.view.View, android.view.View, int);
+    method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
+    method public static android.view.View! keyboardNavigationClusterSearch(android.view.View, android.view.View!, int);
     method public static void offsetLeftAndRight(android.view.View, int);
     method public static void offsetTopAndBottom(android.view.View, int);
-    method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
-    method public static deprecated void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method public static deprecated void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public static androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+    method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+    method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle!);
     method public static void postInvalidateOnAnimation(android.view.View);
     method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
-    method public static void postOnAnimation(android.view.View, java.lang.Runnable);
-    method public static void postOnAnimationDelayed(android.view.View, java.lang.Runnable, long);
+    method public static void postOnAnimation(android.view.View, Runnable!);
+    method public static void postOnAnimationDelayed(android.view.View, Runnable!, long);
     method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
     method public static void requestApplyInsets(android.view.View);
-    method public static <T extends android.view.View> T requireViewById(android.view.View, int);
-    method public static deprecated int resolveSizeAndState(int, int, int);
+    method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+    method @Deprecated public static int resolveSizeAndState(int, int, int);
     method public static boolean restoreDefaultFocus(android.view.View);
-    method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat);
+    method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat!);
     method public static void setAccessibilityLiveRegion(android.view.View, int);
-    method public static deprecated void setActivated(android.view.View, boolean);
-    method public static deprecated void setAlpha(android.view.View, float);
-    method public static void setAutofillHints(android.view.View, java.lang.String...);
-    method public static void setBackground(android.view.View, android.graphics.drawable.Drawable);
-    method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList);
-    method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode);
-    method public static deprecated void setChildrenDrawingOrderEnabled(android.view.ViewGroup, boolean);
-    method public static void setClipBounds(android.view.View, android.graphics.Rect);
+    method @Deprecated public static void setActivated(android.view.View!, boolean);
+    method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
+    method public static void setAutofillHints(android.view.View, java.lang.String...?);
+    method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
+    method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList!);
+    method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode!);
+    method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+    method public static void setClipBounds(android.view.View, android.graphics.Rect!);
     method public static void setElevation(android.view.View, float);
-    method public static deprecated void setFitsSystemWindows(android.view.View, boolean);
+    method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
     method public static void setFocusedByDefault(android.view.View, boolean);
     method public static void setHasTransientState(android.view.View, boolean);
     method public static void setImportantForAccessibility(android.view.View, int);
     method public static void setImportantForAutofill(android.view.View, int);
     method public static void setKeyboardNavigationCluster(android.view.View, boolean);
-    method public static void setLabelFor(android.view.View, int);
-    method public static void setLayerPaint(android.view.View, android.graphics.Paint);
-    method public static deprecated void setLayerType(android.view.View, int, android.graphics.Paint);
+    method public static void setLabelFor(android.view.View, @IdRes int);
+    method public static void setLayerPaint(android.view.View, android.graphics.Paint!);
+    method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
     method public static void setLayoutDirection(android.view.View, int);
     method public static void setNestedScrollingEnabled(android.view.View, boolean);
     method public static void setNextClusterForwardId(android.view.View, int);
-    method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener);
-    method public static deprecated void setOverScrollMode(android.view.View, int);
-    method public static void setPaddingRelative(android.view.View, int, int, int, int);
-    method public static deprecated void setPivotX(android.view.View, float);
-    method public static deprecated void setPivotY(android.view.View, float);
-    method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat);
-    method public static deprecated void setRotation(android.view.View, float);
-    method public static deprecated void setRotationX(android.view.View, float);
-    method public static deprecated void setRotationY(android.view.View, float);
-    method public static deprecated void setSaveFromParentEnabled(android.view.View, boolean);
-    method public static deprecated void setScaleX(android.view.View, float);
-    method public static deprecated void setScaleY(android.view.View, float);
+    method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener!);
+    method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+    method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+    method @Deprecated public static void setPivotX(android.view.View!, float);
+    method @Deprecated public static void setPivotY(android.view.View!, float);
+    method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat!);
+    method @Deprecated public static void setRotation(android.view.View!, float);
+    method @Deprecated public static void setRotationX(android.view.View!, float);
+    method @Deprecated public static void setRotationY(android.view.View!, float);
+    method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+    method @Deprecated public static void setScaleX(android.view.View!, float);
+    method @Deprecated public static void setScaleY(android.view.View!, float);
     method public static void setScrollIndicators(android.view.View, int);
     method public static void setScrollIndicators(android.view.View, int, int);
-    method public static void setTooltipText(android.view.View, java.lang.CharSequence);
-    method public static void setTransitionName(android.view.View, java.lang.String);
-    method public static deprecated void setTranslationX(android.view.View, float);
-    method public static deprecated void setTranslationY(android.view.View, float);
+    method public static void setTooltipText(android.view.View, CharSequence?);
+    method public static void setTransitionName(android.view.View, String!);
+    method @Deprecated public static void setTranslationX(android.view.View!, float);
+    method @Deprecated public static void setTranslationY(android.view.View!, float);
     method public static void setTranslationZ(android.view.View, float);
-    method public static deprecated void setX(android.view.View, float);
-    method public static deprecated void setY(android.view.View, float);
+    method @Deprecated public static void setX(android.view.View!, float);
+    method @Deprecated public static void setY(android.view.View!, float);
     method public static void setZ(android.view.View, float);
-    method public static boolean startDragAndDrop(android.view.View, android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+    method public static boolean startDragAndDrop(android.view.View, android.content.ClipData!, android.view.View.DragShadowBuilder!, Object!, int);
     method public static boolean startNestedScroll(android.view.View, int);
     method public static boolean startNestedScroll(android.view.View, int, int);
     method public static void stopNestedScroll(android.view.View);
     method public static void stopNestedScroll(android.view.View, int);
-    method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+    method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder!);
     field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
     field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
     field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
@@ -1958,20 +1960,20 @@
     field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
     field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
     field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
-    field public static final deprecated int LAYER_TYPE_HARDWARE = 2; // 0x2
-    field public static final deprecated int LAYER_TYPE_NONE = 0; // 0x0
-    field public static final deprecated int LAYER_TYPE_SOFTWARE = 1; // 0x1
+    field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+    field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+    field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
     field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
     field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
     field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
     field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
-    field public static final deprecated int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
-    field public static final deprecated int MEASURED_SIZE_MASK = 16777215; // 0xffffff
-    field public static final deprecated int MEASURED_STATE_MASK = -16777216; // 0xff000000
-    field public static final deprecated int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
-    field public static final deprecated int OVER_SCROLL_ALWAYS = 0; // 0x0
-    field public static final deprecated int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
-    field public static final deprecated int OVER_SCROLL_NEVER = 2; // 0x2
+    field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+    field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+    field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+    field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+    field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+    field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+    field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
     field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
     field public static final int SCROLL_AXIS_NONE = 0; // 0x0
     field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
@@ -1985,118 +1987,118 @@
     field public static final int TYPE_TOUCH = 0; // 0x0
   }
 
-  public static abstract interface ViewCompat.OnUnhandledKeyEventListenerCompat {
-    method public abstract boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
+  public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+    method public boolean onUnhandledKeyEvent(android.view.View!, android.view.KeyEvent!);
   }
 
   public final class ViewConfigurationCompat {
     method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
-    method public static int getScaledHoverSlop(android.view.ViewConfiguration);
-    method public static deprecated int getScaledPagingTouchSlop(android.view.ViewConfiguration);
+    method public static int getScaledHoverSlop(android.view.ViewConfiguration!);
+    method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
     method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
-    method public static deprecated boolean hasPermanentMenuKey(android.view.ViewConfiguration);
-    method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
+    method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+    method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration!, android.content.Context);
   }
 
   public final class ViewGroupCompat {
     method public static int getLayoutMode(android.view.ViewGroup);
     method public static int getNestedScrollAxes(android.view.ViewGroup);
     method public static boolean isTransitionGroup(android.view.ViewGroup);
-    method public static deprecated boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+    method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
     method public static void setLayoutMode(android.view.ViewGroup, int);
-    method public static deprecated void setMotionEventSplittingEnabled(android.view.ViewGroup, boolean);
+    method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
     method public static void setTransitionGroup(android.view.ViewGroup, boolean);
     field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
     field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
   }
 
   public final class ViewParentCompat {
-    method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
-    method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
-    method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
-    method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
-    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
-    method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
-    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
-    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
-    method public static deprecated boolean requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+    method public static boolean onNestedFling(android.view.ViewParent!, android.view.View!, float, float, boolean);
+    method public static boolean onNestedPreFling(android.view.ViewParent!, android.view.View!, float, float);
+    method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!);
+    method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!, int);
+    method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int);
+    method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int, int);
+    method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+    method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+    method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+    method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+    method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!);
+    method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!, int);
+    method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
   }
 
   public final class ViewPropertyAnimatorCompat {
-    method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! alpha(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! alphaBy(float);
     method public void cancel();
     method public long getDuration();
-    method public android.view.animation.Interpolator getInterpolator();
+    method public android.view.animation.Interpolator! getInterpolator();
     method public long getStartDelay();
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotation(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationX(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationXBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationY(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationYBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleX(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleXBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleY(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleYBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setDuration(long);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setInterpolator(android.view.animation.Interpolator!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setListener(androidx.core.view.ViewPropertyAnimatorListener!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setStartDelay(long);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener!);
     method public void start();
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(java.lang.Runnable);
-    method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
-    method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(java.lang.Runnable);
-    method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationX(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationXBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationY(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationYBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationZ(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationZBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! withEndAction(Runnable!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! withLayer();
+    method public androidx.core.view.ViewPropertyAnimatorCompat! withStartAction(Runnable!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! x(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! xBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! y(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! yBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! z(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! zBy(float);
   }
 
-  public abstract interface ViewPropertyAnimatorListener {
-    method public abstract void onAnimationCancel(android.view.View);
-    method public abstract void onAnimationEnd(android.view.View);
-    method public abstract void onAnimationStart(android.view.View);
+  public interface ViewPropertyAnimatorListener {
+    method public void onAnimationCancel(android.view.View!);
+    method public void onAnimationEnd(android.view.View!);
+    method public void onAnimationStart(android.view.View!);
   }
 
   public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
     ctor public ViewPropertyAnimatorListenerAdapter();
-    method public void onAnimationCancel(android.view.View);
-    method public void onAnimationEnd(android.view.View);
-    method public void onAnimationStart(android.view.View);
+    method public void onAnimationCancel(android.view.View!);
+    method public void onAnimationEnd(android.view.View!);
+    method public void onAnimationStart(android.view.View!);
   }
 
-  public abstract interface ViewPropertyAnimatorUpdateListener {
-    method public abstract void onAnimationUpdate(android.view.View);
+  public interface ViewPropertyAnimatorUpdateListener {
+    method public void onAnimationUpdate(android.view.View!);
   }
 
   public final class WindowCompat {
-    method public static <T extends android.view.View> T requireViewById(android.view.Window, int);
+    method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
     field public static final int FEATURE_ACTION_BAR = 8; // 0x8
     field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
     field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
   }
 
   public class WindowInsetsCompat {
-    ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat);
-    method public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
-    method public androidx.core.view.WindowInsetsCompat consumeStableInsets();
-    method public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
-    method public androidx.core.view.DisplayCutoutCompat getDisplayCutout();
+    ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat!);
+    method public androidx.core.view.WindowInsetsCompat! consumeDisplayCutout();
+    method public androidx.core.view.WindowInsetsCompat! consumeStableInsets();
+    method public androidx.core.view.WindowInsetsCompat! consumeSystemWindowInsets();
+    method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
     method public int getStableInsetBottom();
     method public int getStableInsetLeft();
     method public int getStableInsetRight();
@@ -2110,8 +2112,8 @@
     method public boolean hasSystemWindowInsets();
     method public boolean isConsumed();
     method public boolean isRound();
-    method public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
-    method public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+    method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(int, int, int, int);
+    method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(android.graphics.Rect!);
   }
 
 }
@@ -2119,16 +2121,16 @@
 package androidx.core.view.accessibility {
 
   public final class AccessibilityEventCompat {
-    method public static deprecated void appendRecord(android.view.accessibility.AccessibilityEvent, androidx.core.view.accessibility.AccessibilityRecordCompat);
-    method public static deprecated androidx.core.view.accessibility.AccessibilityRecordCompat asRecord(android.view.accessibility.AccessibilityEvent);
-    method public static int getAction(android.view.accessibility.AccessibilityEvent);
-    method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
-    method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
-    method public static deprecated androidx.core.view.accessibility.AccessibilityRecordCompat getRecord(android.view.accessibility.AccessibilityEvent, int);
-    method public static deprecated int getRecordCount(android.view.accessibility.AccessibilityEvent);
-    method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
-    method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
-    method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
+    method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
+    method public static int getAction(android.view.accessibility.AccessibilityEvent!);
+    method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent!);
+    method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent!);
+    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+    method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
+    method public static void setAction(android.view.accessibility.AccessibilityEvent!, int);
+    method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent!, int);
+    method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent!, int);
     field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
     field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
     field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
@@ -2138,89 +2140,89 @@
     field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
     field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
     field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
-    field public static final deprecated int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
-    field public static final deprecated int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+    field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+    field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
     field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
     field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
     field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
     field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
     field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
-    field public static final deprecated int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
-    field public static final deprecated int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
-    field public static final deprecated int TYPE_VIEW_SCROLLED = 4096; // 0x1000
-    field public static final deprecated int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+    field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+    field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+    field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+    field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
     field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
     field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
-    field public static final deprecated int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+    field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
   }
 
   public final class AccessibilityManagerCompat {
-    method public static deprecated boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
-    method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
-    method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int);
-    method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager);
-    method public static deprecated boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager);
-    method public static deprecated boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
-    method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+    method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+    method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+    method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+    method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+    method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
   }
 
-  public static abstract deprecated interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
-    method public abstract deprecated void onAccessibilityStateChanged(boolean);
+  @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+    method @Deprecated public void onAccessibilityStateChanged(boolean);
   }
 
-  public static abstract deprecated class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
-    ctor public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+  @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+    ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
   }
 
-  public static abstract interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
-    method public abstract void onTouchExplorationStateChanged(boolean);
+  public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+    method public void onTouchExplorationStateChanged(boolean);
   }
 
   public class AccessibilityNodeInfoCompat {
-    ctor public deprecated AccessibilityNodeInfoCompat(java.lang.Object);
+    ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
     method public void addAction(int);
-    method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
-    method public void addChild(android.view.View);
-    method public void addChild(android.view.View, int);
+    method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+    method public void addChild(android.view.View!);
+    method public void addChild(android.view.View!, int);
     method public boolean canOpenPopup();
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(java.lang.String);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat focusSearch(int);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat> getActionList();
+    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat>! findAccessibilityNodeInfosByText(String!);
+    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat>! findAccessibilityNodeInfosByViewId(String!);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat>! getActionList();
     method public int getActions();
-    method public void getBoundsInParent(android.graphics.Rect);
-    method public void getBoundsInScreen(android.graphics.Rect);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getChild(int);
+    method public void getBoundsInParent(android.graphics.Rect!);
+    method public void getBoundsInScreen(android.graphics.Rect!);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
     method public int getChildCount();
-    method public java.lang.CharSequence getClassName();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat getCollectionInfo();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat getCollectionItemInfo();
-    method public java.lang.CharSequence getContentDescription();
+    method public CharSequence! getClassName();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+    method public CharSequence! getContentDescription();
     method public int getDrawingOrder();
-    method public java.lang.CharSequence getError();
-    method public android.os.Bundle getExtras();
-    method public java.lang.CharSequence getHintText();
-    method public deprecated java.lang.Object getInfo();
+    method public CharSequence! getError();
+    method public android.os.Bundle! getExtras();
+    method public CharSequence? getHintText();
+    method @Deprecated public Object! getInfo();
     method public int getInputType();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getLabelFor();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getLabeledBy();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
     method public int getLiveRegion();
     method public int getMaxTextLength();
     method public int getMovementGranularities();
-    method public java.lang.CharSequence getPackageName();
-    method public java.lang.CharSequence getPaneTitle();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getParent();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat getRangeInfo();
-    method public java.lang.CharSequence getRoleDescription();
-    method public java.lang.CharSequence getText();
+    method public CharSequence! getPackageName();
+    method public CharSequence? getPaneTitle();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+    method public CharSequence? getRoleDescription();
+    method public CharSequence! getText();
     method public int getTextSelectionEnd();
     method public int getTextSelectionStart();
-    method public java.lang.CharSequence getTooltipText();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getTraversalAfter();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getTraversalBefore();
-    method public java.lang.String getViewIdResourceName();
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat getWindow();
+    method public CharSequence? getTooltipText();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+    method public String! getViewIdResourceName();
+    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
     method public int getWindowId();
     method public boolean isAccessibilityFocused();
     method public boolean isCheckable();
@@ -2243,86 +2245,86 @@
     method public boolean isSelected();
     method public boolean isShowingHintText();
     method public boolean isVisibleToUser();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View, int);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat obtain();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
     method public boolean performAction(int);
-    method public boolean performAction(int, android.os.Bundle);
+    method public boolean performAction(int, android.os.Bundle!);
     method public void recycle();
     method public boolean refresh();
-    method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
-    method public boolean removeChild(android.view.View);
-    method public boolean removeChild(android.view.View, int);
+    method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+    method public boolean removeChild(android.view.View!);
+    method public boolean removeChild(android.view.View!, int);
     method public void setAccessibilityFocused(boolean);
-    method public void setBoundsInParent(android.graphics.Rect);
-    method public void setBoundsInScreen(android.graphics.Rect);
+    method public void setBoundsInParent(android.graphics.Rect!);
+    method public void setBoundsInScreen(android.graphics.Rect!);
     method public void setCanOpenPopup(boolean);
     method public void setCheckable(boolean);
     method public void setChecked(boolean);
-    method public void setClassName(java.lang.CharSequence);
+    method public void setClassName(CharSequence!);
     method public void setClickable(boolean);
-    method public void setCollectionInfo(java.lang.Object);
-    method public void setCollectionItemInfo(java.lang.Object);
-    method public void setContentDescription(java.lang.CharSequence);
+    method public void setCollectionInfo(Object!);
+    method public void setCollectionItemInfo(Object!);
+    method public void setContentDescription(CharSequence!);
     method public void setContentInvalid(boolean);
     method public void setContextClickable(boolean);
     method public void setDismissable(boolean);
     method public void setDrawingOrder(int);
     method public void setEditable(boolean);
     method public void setEnabled(boolean);
-    method public void setError(java.lang.CharSequence);
+    method public void setError(CharSequence!);
     method public void setFocusable(boolean);
     method public void setFocused(boolean);
     method public void setHeading(boolean);
-    method public void setHintText(java.lang.CharSequence);
+    method public void setHintText(CharSequence?);
     method public void setImportantForAccessibility(boolean);
     method public void setInputType(int);
-    method public void setLabelFor(android.view.View);
-    method public void setLabelFor(android.view.View, int);
-    method public void setLabeledBy(android.view.View);
-    method public void setLabeledBy(android.view.View, int);
+    method public void setLabelFor(android.view.View!);
+    method public void setLabelFor(android.view.View!, int);
+    method public void setLabeledBy(android.view.View!);
+    method public void setLabeledBy(android.view.View!, int);
     method public void setLiveRegion(int);
     method public void setLongClickable(boolean);
     method public void setMaxTextLength(int);
     method public void setMovementGranularities(int);
     method public void setMultiLine(boolean);
-    method public void setPackageName(java.lang.CharSequence);
-    method public void setPaneTitle(java.lang.CharSequence);
-    method public void setParent(android.view.View);
-    method public void setParent(android.view.View, int);
+    method public void setPackageName(CharSequence!);
+    method public void setPaneTitle(CharSequence?);
+    method public void setParent(android.view.View!);
+    method public void setParent(android.view.View!, int);
     method public void setPassword(boolean);
-    method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat);
-    method public void setRoleDescription(java.lang.CharSequence);
+    method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+    method public void setRoleDescription(CharSequence?);
     method public void setScreenReaderFocusable(boolean);
     method public void setScrollable(boolean);
     method public void setSelected(boolean);
     method public void setShowingHintText(boolean);
-    method public void setSource(android.view.View);
-    method public void setSource(android.view.View, int);
-    method public void setText(java.lang.CharSequence);
+    method public void setSource(android.view.View!);
+    method public void setSource(android.view.View!, int);
+    method public void setText(CharSequence!);
     method public void setTextSelection(int, int);
-    method public void setTooltipText(java.lang.CharSequence);
-    method public void setTraversalAfter(android.view.View);
-    method public void setTraversalAfter(android.view.View, int);
-    method public void setTraversalBefore(android.view.View);
-    method public void setTraversalBefore(android.view.View, int);
-    method public void setViewIdResourceName(java.lang.String);
+    method public void setTooltipText(CharSequence?);
+    method public void setTraversalAfter(android.view.View!);
+    method public void setTraversalAfter(android.view.View!, int);
+    method public void setTraversalBefore(android.view.View!);
+    method public void setTraversalBefore(android.view.View!, int);
+    method public void setViewIdResourceName(String!);
     method public void setVisibleToUser(boolean);
-    method public android.view.accessibility.AccessibilityNodeInfo unwrap();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat wrap(android.view.accessibility.AccessibilityNodeInfo);
+    method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
     field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
-    field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
-    field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
-    field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
-    field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
-    field public static final java.lang.String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
-    field public static final java.lang.String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
-    field public static final java.lang.String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
-    field public static final java.lang.String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
-    field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
-    field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
-    field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+    field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+    field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+    field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+    field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+    field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+    field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+    field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
     field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
     field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
     field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
@@ -2354,42 +2356,42 @@
   }
 
   public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
-    ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, java.lang.CharSequence);
+    ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
     method public int getId();
-    method public java.lang.CharSequence getLabel();
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_ACCESSIBILITY_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_ACCESSIBILITY_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_SELECTION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COLLAPSE;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CONTEXT_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COPY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CUT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DISMISS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_EXPAND;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_HIDE_TOOLTIP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_LONG_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_MOVE_WINDOW;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_HTML_ELEMENT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PASTE;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_HTML_ELEMENT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_BACKWARD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_DOWN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_FORWARD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_LEFT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_RIGHT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_TO_POSITION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_UP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SELECT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_PROGRESS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_SELECTION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_TEXT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_ON_SCREEN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_TOOLTIP;
+    method public CharSequence! getLabel();
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
   }
 
   public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
@@ -2397,8 +2399,8 @@
     method public int getRowCount();
     method public int getSelectionMode();
     method public boolean isHierarchical();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean, int);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
     field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
     field public static final int SELECTION_MODE_NONE = 0; // 0x0
     field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
@@ -2409,10 +2411,10 @@
     method public int getColumnSpan();
     method public int getRowIndex();
     method public int getRowSpan();
-    method public deprecated boolean isHeading();
+    method @Deprecated public boolean isHeading();
     method public boolean isSelected();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean, boolean);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
   }
 
   public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
@@ -2420,7 +2422,7 @@
     method public float getMax();
     method public float getMin();
     method public int getType();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat obtain(int, float, float, float);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
     field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
     field public static final int RANGE_TYPE_INT = 0; // 0x0
     field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
@@ -2428,89 +2430,89 @@
 
   public class AccessibilityNodeProviderCompat {
     ctor public AccessibilityNodeProviderCompat();
-    ctor public AccessibilityNodeProviderCompat(java.lang.Object);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String, int);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
-    method public java.lang.Object getProvider();
-    method public boolean performAction(int, int, android.os.Bundle);
+    ctor public AccessibilityNodeProviderCompat(Object!);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat>? findAccessibilityNodeInfosByText(String!, int);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+    method public Object! getProvider();
+    method public boolean performAction(int, int, android.os.Bundle!);
     field public static final int HOST_VIEW_ID = -1; // 0xffffffff
   }
 
   public class AccessibilityRecordCompat {
-    ctor public deprecated AccessibilityRecordCompat(java.lang.Object);
-    method public deprecated boolean equals(java.lang.Object);
-    method public deprecated int getAddedCount();
-    method public deprecated java.lang.CharSequence getBeforeText();
-    method public deprecated java.lang.CharSequence getClassName();
-    method public deprecated java.lang.CharSequence getContentDescription();
-    method public deprecated int getCurrentItemIndex();
-    method public deprecated int getFromIndex();
-    method public deprecated java.lang.Object getImpl();
-    method public deprecated int getItemCount();
-    method public deprecated int getMaxScrollX();
-    method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
-    method public deprecated int getMaxScrollY();
-    method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
-    method public deprecated android.os.Parcelable getParcelableData();
-    method public deprecated int getRemovedCount();
-    method public deprecated int getScrollX();
-    method public deprecated int getScrollY();
-    method public deprecated androidx.core.view.accessibility.AccessibilityNodeInfoCompat getSource();
-    method public deprecated java.util.List<java.lang.CharSequence> getText();
-    method public deprecated int getToIndex();
-    method public deprecated int getWindowId();
-    method public deprecated int hashCode();
-    method public deprecated boolean isChecked();
-    method public deprecated boolean isEnabled();
-    method public deprecated boolean isFullScreen();
-    method public deprecated boolean isPassword();
-    method public deprecated boolean isScrollable();
-    method public static deprecated androidx.core.view.accessibility.AccessibilityRecordCompat obtain(androidx.core.view.accessibility.AccessibilityRecordCompat);
-    method public static deprecated androidx.core.view.accessibility.AccessibilityRecordCompat obtain();
-    method public deprecated void recycle();
-    method public deprecated void setAddedCount(int);
-    method public deprecated void setBeforeText(java.lang.CharSequence);
-    method public deprecated void setChecked(boolean);
-    method public deprecated void setClassName(java.lang.CharSequence);
-    method public deprecated void setContentDescription(java.lang.CharSequence);
-    method public deprecated void setCurrentItemIndex(int);
-    method public deprecated void setEnabled(boolean);
-    method public deprecated void setFromIndex(int);
-    method public deprecated void setFullScreen(boolean);
-    method public deprecated void setItemCount(int);
-    method public deprecated void setMaxScrollX(int);
-    method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
-    method public deprecated void setMaxScrollY(int);
-    method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
-    method public deprecated void setParcelableData(android.os.Parcelable);
-    method public deprecated void setPassword(boolean);
-    method public deprecated void setRemovedCount(int);
-    method public deprecated void setScrollX(int);
-    method public deprecated void setScrollY(int);
-    method public deprecated void setScrollable(boolean);
-    method public deprecated void setSource(android.view.View);
-    method public deprecated void setSource(android.view.View, int);
-    method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View, int);
-    method public deprecated void setToIndex(int);
+    ctor @Deprecated public AccessibilityRecordCompat(Object!);
+    method @Deprecated public boolean equals(Object?);
+    method @Deprecated public int getAddedCount();
+    method @Deprecated public CharSequence! getBeforeText();
+    method @Deprecated public CharSequence! getClassName();
+    method @Deprecated public CharSequence! getContentDescription();
+    method @Deprecated public int getCurrentItemIndex();
+    method @Deprecated public int getFromIndex();
+    method @Deprecated public Object! getImpl();
+    method @Deprecated public int getItemCount();
+    method @Deprecated public int getMaxScrollX();
+    method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord!);
+    method @Deprecated public int getMaxScrollY();
+    method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord!);
+    method @Deprecated public android.os.Parcelable! getParcelableData();
+    method @Deprecated public int getRemovedCount();
+    method @Deprecated public int getScrollX();
+    method @Deprecated public int getScrollY();
+    method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+    method @Deprecated public java.util.List<java.lang.CharSequence>! getText();
+    method @Deprecated public int getToIndex();
+    method @Deprecated public int getWindowId();
+    method @Deprecated public int hashCode();
+    method @Deprecated public boolean isChecked();
+    method @Deprecated public boolean isEnabled();
+    method @Deprecated public boolean isFullScreen();
+    method @Deprecated public boolean isPassword();
+    method @Deprecated public boolean isScrollable();
+    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+    method @Deprecated public void recycle();
+    method @Deprecated public void setAddedCount(int);
+    method @Deprecated public void setBeforeText(CharSequence!);
+    method @Deprecated public void setChecked(boolean);
+    method @Deprecated public void setClassName(CharSequence!);
+    method @Deprecated public void setContentDescription(CharSequence!);
+    method @Deprecated public void setCurrentItemIndex(int);
+    method @Deprecated public void setEnabled(boolean);
+    method @Deprecated public void setFromIndex(int);
+    method @Deprecated public void setFullScreen(boolean);
+    method @Deprecated public void setItemCount(int);
+    method @Deprecated public void setMaxScrollX(int);
+    method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord!, int);
+    method @Deprecated public void setMaxScrollY(int);
+    method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord!, int);
+    method @Deprecated public void setParcelableData(android.os.Parcelable!);
+    method @Deprecated public void setPassword(boolean);
+    method @Deprecated public void setRemovedCount(int);
+    method @Deprecated public void setScrollX(int);
+    method @Deprecated public void setScrollY(int);
+    method @Deprecated public void setScrollable(boolean);
+    method @Deprecated public void setSource(android.view.View!);
+    method @Deprecated public void setSource(android.view.View!, int);
+    method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View!, int);
+    method @Deprecated public void setToIndex(int);
   }
 
   public class AccessibilityWindowInfoCompat {
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getAnchor();
-    method public void getBoundsInScreen(android.graphics.Rect);
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat getChild(int);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getAnchor();
+    method public void getBoundsInScreen(android.graphics.Rect!);
+    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getChild(int);
     method public int getChildCount();
     method public int getId();
     method public int getLayer();
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat getParent();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat getRoot();
-    method public java.lang.CharSequence getTitle();
+    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getParent();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getRoot();
+    method public CharSequence! getTitle();
     method public int getType();
     method public boolean isAccessibilityFocused();
     method public boolean isActive();
     method public boolean isFocused();
-    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat obtain();
-    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat);
+    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain();
+    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat!);
     method public void recycle();
     field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
     field public static final int TYPE_APPLICATION = 1; // 0x1
@@ -2524,9 +2526,9 @@
 package androidx.core.view.animation {
 
   public final class PathInterpolatorCompat {
-    method public static android.view.animation.Interpolator create(android.graphics.Path);
-    method public static android.view.animation.Interpolator create(float, float);
-    method public static android.view.animation.Interpolator create(float, float, float, float);
+    method public static android.view.animation.Interpolator! create(android.graphics.Path!);
+    method public static android.view.animation.Interpolator! create(float, float);
+    method public static android.view.animation.Interpolator! create(float, float, float, float);
   }
 
 }
@@ -2534,33 +2536,33 @@
 package androidx.core.view.inputmethod {
 
   public final class EditorInfoCompat {
-    ctor public deprecated EditorInfoCompat();
-    method public static java.lang.String[] getContentMimeTypes(android.view.inputmethod.EditorInfo);
-    method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, java.lang.String[]);
+    ctor @Deprecated public EditorInfoCompat();
+    method public static String[] getContentMimeTypes(android.view.inputmethod.EditorInfo!);
+    method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String[]?);
     field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
     field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
   }
 
   public final class InputConnectionCompat {
-    ctor public deprecated InputConnectionCompat();
-    method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+    ctor @Deprecated public InputConnectionCompat();
+    method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
     method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
     field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
   }
 
-  public static abstract interface InputConnectionCompat.OnCommitContentListener {
-    method public abstract boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+  public static interface InputConnectionCompat.OnCommitContentListener {
+    method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat!, int, android.os.Bundle!);
   }
 
   public final class InputContentInfoCompat {
-    ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri);
+    ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
     method public android.net.Uri getContentUri();
     method public android.content.ClipDescription getDescription();
-    method public android.net.Uri getLinkUri();
+    method public android.net.Uri? getLinkUri();
     method public void releasePermission();
     method public void requestPermission();
-    method public java.lang.Object unwrap();
-    method public static androidx.core.view.inputmethod.InputContentInfoCompat wrap(java.lang.Object);
+    method public Object? unwrap();
+    method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
   }
 
 }
@@ -2573,12 +2575,12 @@
     method public abstract boolean canTargetScrollVertically(int);
     method public boolean isEnabled();
     method public boolean isExclusive();
-    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+    method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
     method public abstract void scrollTargetBy(int, int);
     method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
     method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
-    method public androidx.core.widget.AutoScrollHelper setEnabled(boolean);
-    method public androidx.core.widget.AutoScrollHelper setExclusive(boolean);
+    method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+    method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
     method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
     method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
     method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
@@ -2595,45 +2597,45 @@
   }
 
   public final class CompoundButtonCompat {
-    method public static android.graphics.drawable.Drawable getButtonDrawable(android.widget.CompoundButton);
-    method public static android.content.res.ColorStateList getButtonTintList(android.widget.CompoundButton);
-    method public static android.graphics.PorterDuff.Mode getButtonTintMode(android.widget.CompoundButton);
-    method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList);
-    method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode);
+    method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
+    method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
+    method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
+    method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
+    method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
   }
 
   public class ContentLoadingProgressBar extends android.widget.ProgressBar {
     ctor public ContentLoadingProgressBar(android.content.Context);
-    ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet);
-    method public synchronized void hide();
+    ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+    method public void hide();
     method public void onAttachedToWindow();
     method public void onDetachedFromWindow();
-    method public synchronized void show();
+    method public void show();
   }
 
   public final class EdgeEffectCompat {
-    ctor public deprecated EdgeEffectCompat(android.content.Context);
-    method public deprecated boolean draw(android.graphics.Canvas);
-    method public deprecated void finish();
-    method public deprecated boolean isFinished();
-    method public deprecated boolean onAbsorb(int);
-    method public deprecated boolean onPull(float);
-    method public deprecated boolean onPull(float, float);
+    ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+    method @Deprecated public boolean draw(android.graphics.Canvas!);
+    method @Deprecated public void finish();
+    method @Deprecated public boolean isFinished();
+    method @Deprecated public boolean onAbsorb(int);
+    method @Deprecated public boolean onPull(float);
+    method @Deprecated public boolean onPull(float, float);
     method public static void onPull(android.widget.EdgeEffect, float, float);
-    method public deprecated boolean onRelease();
-    method public deprecated void setSize(int, int);
+    method @Deprecated public boolean onRelease();
+    method @Deprecated public void setSize(int, int);
   }
 
   public class ImageViewCompat {
-    method public static android.content.res.ColorStateList getImageTintList(android.widget.ImageView);
-    method public static android.graphics.PorterDuff.Mode getImageTintMode(android.widget.ImageView);
-    method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList);
-    method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode);
+    method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
+    method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
+    method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
+    method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
   }
 
   public final class ListPopupWindowCompat {
-    method public static deprecated android.view.View.OnTouchListener createDragToOpenListener(java.lang.Object, android.view.View);
-    method public static android.view.View.OnTouchListener createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+    method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+    method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
   }
 
   public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
@@ -2650,18 +2652,18 @@
 
   public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild2 androidx.core.view.NestedScrollingParent2 androidx.core.view.ScrollingView {
     ctor public NestedScrollView(android.content.Context);
-    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet);
-    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet, int);
+    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
+    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
     method public boolean arrowScroll(int);
-    method public int computeHorizontalScrollExtent();
-    method public int computeHorizontalScrollOffset();
-    method public int computeHorizontalScrollRange();
-    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
-    method public int computeVerticalScrollExtent();
-    method public int computeVerticalScrollOffset();
-    method public int computeVerticalScrollRange();
-    method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int computeHorizontalScrollExtent();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int computeHorizontalScrollOffset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int computeHorizontalScrollRange();
+    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int computeVerticalScrollExtent();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int computeVerticalScrollOffset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int computeVerticalScrollRange();
+    method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
     method public boolean executeKeyEvent(android.view.KeyEvent);
     method public void fling(int);
     method public boolean fullScroll(int);
@@ -2671,13 +2673,13 @@
     method public boolean isSmoothScrollingEnabled();
     method public void onAttachedToWindow();
     method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
+    method public void onNestedScroll(android.view.View!, int, int, int, int, int);
     method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
     method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
     method public void onStopNestedScroll(android.view.View, int);
     method public boolean pageScroll(int);
     method public void setFillViewport(boolean);
-    method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener);
+    method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
     method public void setSmoothScrollingEnabled(boolean);
     method public final void smoothScrollBy(int, int);
     method public final void smoothScrollTo(int, int);
@@ -2685,12 +2687,12 @@
     method public void stopNestedScroll(int);
   }
 
-  public static abstract interface NestedScrollView.OnScrollChangeListener {
-    method public abstract void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
+  public static interface NestedScrollView.OnScrollChangeListener {
+    method public void onScrollChange(androidx.core.widget.NestedScrollView!, int, int, int, int);
   }
 
   public final class PopupMenuCompat {
-    method public static android.view.View.OnTouchListener getDragToOpenListener(java.lang.Object);
+    method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
   }
 
   public final class PopupWindowCompat {
@@ -2701,25 +2703,25 @@
     method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
   }
 
-  public final deprecated class ScrollerCompat {
-    method public deprecated void abortAnimation();
-    method public deprecated boolean computeScrollOffset();
-    method public static deprecated androidx.core.widget.ScrollerCompat create(android.content.Context);
-    method public static deprecated androidx.core.widget.ScrollerCompat create(android.content.Context, android.view.animation.Interpolator);
-    method public deprecated void fling(int, int, int, int, int, int, int, int);
-    method public deprecated void fling(int, int, int, int, int, int, int, int, int, int);
-    method public deprecated float getCurrVelocity();
-    method public deprecated int getCurrX();
-    method public deprecated int getCurrY();
-    method public deprecated int getFinalX();
-    method public deprecated int getFinalY();
-    method public deprecated boolean isFinished();
-    method public deprecated boolean isOverScrolled();
-    method public deprecated void notifyHorizontalEdgeReached(int, int, int);
-    method public deprecated void notifyVerticalEdgeReached(int, int, int);
-    method public deprecated boolean springBack(int, int, int, int, int, int);
-    method public deprecated void startScroll(int, int, int, int);
-    method public deprecated void startScroll(int, int, int, int, int);
+  @Deprecated public final class ScrollerCompat {
+    method @Deprecated public void abortAnimation();
+    method @Deprecated public boolean computeScrollOffset();
+    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+    method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+    method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+    method @Deprecated public float getCurrVelocity();
+    method @Deprecated public int getCurrX();
+    method @Deprecated public int getCurrY();
+    method @Deprecated public int getFinalX();
+    method @Deprecated public int getFinalY();
+    method @Deprecated public boolean isFinished();
+    method @Deprecated public boolean isOverScrolled();
+    method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+    method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+    method @Deprecated public boolean springBack(int, int, int, int, int, int);
+    method @Deprecated public void startScroll(int, int, int, int);
+    method @Deprecated public void startScroll(int, int, int, int, int);
   }
 
   public final class TextViewCompat {
@@ -2737,25 +2739,25 @@
     method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
     method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
     method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
-    method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
-    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
-    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, int, int, int, int);
+    method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
     method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
-    method public static void setFirstBaselineToTopHeight(android.widget.TextView, int);
-    method public static void setLastBaselineToBottomHeight(android.widget.TextView, int);
-    method public static void setLineHeight(android.widget.TextView, int);
+    method public static void setFirstBaselineToTopHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+    method public static void setLastBaselineToBottomHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+    method public static void setLineHeight(android.widget.TextView, @Px @IntRange(from=0) int);
     method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
-    method public static void setTextAppearance(android.widget.TextView, int);
+    method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
     method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
     field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
     field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
   }
 
-  public abstract interface TintableCompoundButton {
-    method public abstract android.content.res.ColorStateList getSupportButtonTintList();
-    method public abstract android.graphics.PorterDuff.Mode getSupportButtonTintMode();
-    method public abstract void setSupportButtonTintList(android.content.res.ColorStateList);
-    method public abstract void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+  public interface TintableCompoundButton {
+    method public android.content.res.ColorStateList? getSupportButtonTintList();
+    method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public void setSupportButtonTintList(android.content.res.ColorStateList?);
+    method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
   }
 
 }
diff --git a/core/res/values-bn/strings.xml b/core/res/values-bn/strings.xml
new file mode 100644
index 0000000..3039039
--- /dev/null
+++ b/core/res/values-bn/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"৯৯৯+"</string>
+</resources>
diff --git a/core/res/values-gl/strings.xml b/core/res/values-gl/strings.xml
index 8675877..bf7b259 100644
--- a/core/res/values-gl/strings.xml
+++ b/core/res/values-gl/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"999+"</string>
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"&gt;999"</string>
 </resources>
diff --git a/core/res/values-gu/strings.xml b/core/res/values-gu/strings.xml
new file mode 100644
index 0000000..8675877
--- /dev/null
+++ b/core/res/values-gu/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"999+"</string>
+</resources>
diff --git a/core/res/values-ne/strings.xml b/core/res/values-ne/strings.xml
new file mode 100644
index 0000000..5972749
--- /dev/null
+++ b/core/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"९९९+"</string>
+</resources>
diff --git a/core/res/values-or/strings.xml b/core/res/values-or/strings.xml
new file mode 100644
index 0000000..8675877
--- /dev/null
+++ b/core/res/values-or/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"999+"</string>
+</resources>
diff --git a/core/res/values-pa/strings.xml b/core/res/values-pa/strings.xml
new file mode 100644
index 0000000..8675877
--- /dev/null
+++ b/core/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"999+"</string>
+</resources>
diff --git a/core/res/values-ru/strings.xml b/core/res/values-ru/strings.xml
index 8675877..bf7b259 100644
--- a/core/res/values-ru/strings.xml
+++ b/core/res/values-ru/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"999+"</string>
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"&gt;999"</string>
 </resources>
diff --git a/core/res/values-ta/strings.xml b/core/res/values-ta/strings.xml
new file mode 100644
index 0000000..8675877
--- /dev/null
+++ b/core/res/values-ta/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"999+"</string>
+</resources>
diff --git a/core/res/values-te/strings.xml b/core/res/values-te/strings.xml
new file mode 100644
index 0000000..8675877
--- /dev/null
+++ b/core/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"999+"</string>
+</resources>
diff --git a/core/res/values-ur/strings.xml b/core/res/values-ur/strings.xml
new file mode 100644
index 0000000..c81c3bb
--- /dev/null
+++ b/core/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"+999"</string>
+</resources>
diff --git a/fragment/api/1.0.0.txt b/fragment/api/1.0.0.txt
index ec3d391..f517de1 100644
--- a/fragment/api/1.0.0.txt
+++ b/fragment/api/1.0.0.txt
@@ -1,22 +1,23 @@
+// Signature format: 2.0
 package androidx.fragment.app {
 
   public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
     ctor public DialogFragment();
     method public void dismiss();
     method public void dismissAllowingStateLoss();
-    method public android.app.Dialog getDialog();
+    method public android.app.Dialog! getDialog();
     method public boolean getShowsDialog();
-    method public int getTheme();
+    method @StyleRes public int getTheme();
     method public boolean isCancelable();
-    method public void onCancel(android.content.DialogInterface);
-    method public android.app.Dialog onCreateDialog(android.os.Bundle);
-    method public void onDismiss(android.content.DialogInterface);
+    method public void onCancel(android.content.DialogInterface!);
+    method public android.app.Dialog onCreateDialog(android.os.Bundle?);
+    method public void onDismiss(android.content.DialogInterface!);
     method public void setCancelable(boolean);
     method public void setShowsDialog(boolean);
-    method public void setStyle(int, int);
-    method public void show(androidx.fragment.app.FragmentManager, java.lang.String);
-    method public int show(androidx.fragment.app.FragmentTransaction, java.lang.String);
-    method public void showNow(androidx.fragment.app.FragmentManager, java.lang.String);
+    method public void setStyle(int, @StyleRes int);
+    method public void show(androidx.fragment.app.FragmentManager!, String!);
+    method public int show(androidx.fragment.app.FragmentTransaction!, String!);
+    method public void showNow(androidx.fragment.app.FragmentManager!, String!);
     field public static final int STYLE_NORMAL = 0; // 0x0
     field public static final int STYLE_NO_FRAME = 2; // 0x2
     field public static final int STYLE_NO_INPUT = 3; // 0x3
@@ -25,43 +26,43 @@
 
   public class Fragment implements android.content.ComponentCallbacks androidx.lifecycle.LifecycleOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
     ctor public Fragment();
-    method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
-    method public final boolean equals(java.lang.Object);
-    method public final androidx.fragment.app.FragmentActivity getActivity();
+    method public void dump(String!, java.io.FileDescriptor!, java.io.PrintWriter!, String[]!);
+    method public final boolean equals(Object?);
+    method public final androidx.fragment.app.FragmentActivity? getActivity();
     method public boolean getAllowEnterTransitionOverlap();
     method public boolean getAllowReturnTransitionOverlap();
-    method public final android.os.Bundle getArguments();
+    method public final android.os.Bundle? getArguments();
     method public final androidx.fragment.app.FragmentManager getChildFragmentManager();
-    method public android.content.Context getContext();
-    method public java.lang.Object getEnterTransition();
-    method public java.lang.Object getExitTransition();
-    method public final androidx.fragment.app.FragmentManager getFragmentManager();
-    method public final java.lang.Object getHost();
+    method public android.content.Context? getContext();
+    method public Object? getEnterTransition();
+    method public Object? getExitTransition();
+    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method public final Object? getHost();
     method public final int getId();
-    method public final android.view.LayoutInflater getLayoutInflater();
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method public deprecated androidx.loader.app.LoaderManager getLoaderManager();
-    method public final androidx.fragment.app.Fragment getParentFragment();
-    method public java.lang.Object getReenterTransition();
+    method public final android.view.LayoutInflater! getLayoutInflater();
+    method public androidx.lifecycle.Lifecycle! getLifecycle();
+    method @Deprecated public androidx.loader.app.LoaderManager! getLoaderManager();
+    method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public Object! getReenterTransition();
     method public final android.content.res.Resources getResources();
     method public final boolean getRetainInstance();
-    method public java.lang.Object getReturnTransition();
-    method public java.lang.Object getSharedElementEnterTransition();
-    method public java.lang.Object getSharedElementReturnTransition();
-    method public final java.lang.String getString(int);
-    method public final java.lang.String getString(int, java.lang.Object...);
-    method public final java.lang.String getTag();
-    method public final androidx.fragment.app.Fragment getTargetFragment();
+    method public Object? getReturnTransition();
+    method public Object? getSharedElementEnterTransition();
+    method public Object? getSharedElementReturnTransition();
+    method public final String getString(@StringRes int);
+    method public final String getString(@StringRes int, java.lang.Object...!);
+    method public final String? getTag();
+    method public final androidx.fragment.app.Fragment? getTargetFragment();
     method public final int getTargetRequestCode();
-    method public final java.lang.CharSequence getText(int);
+    method public final CharSequence getText(@StringRes int);
     method public boolean getUserVisibleHint();
-    method public android.view.View getView();
-    method public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
+    method public android.view.View? getView();
+    method @MainThread public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
     method public androidx.lifecycle.LiveData<androidx.lifecycle.LifecycleOwner> getViewLifecycleOwnerLiveData();
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
     method public final int hashCode();
-    method public static androidx.fragment.app.Fragment instantiate(android.content.Context, java.lang.String);
-    method public static androidx.fragment.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+    method public static androidx.fragment.app.Fragment! instantiate(android.content.Context!, String!);
+    method public static androidx.fragment.app.Fragment! instantiate(android.content.Context!, String!, android.os.Bundle?);
     method public final boolean isAdded();
     method public final boolean isDetached();
     method public final boolean isHidden();
@@ -70,104 +71,105 @@
     method public final boolean isResumed();
     method public final boolean isStateSaved();
     method public final boolean isVisible();
-    method public void onActivityCreated(android.os.Bundle);
-    method public void onActivityResult(int, int, android.content.Intent);
-    method public void onAttach(android.content.Context);
-    method public deprecated void onAttach(android.app.Activity);
-    method public void onAttachFragment(androidx.fragment.app.Fragment);
-    method public void onConfigurationChanged(android.content.res.Configuration);
-    method public boolean onContextItemSelected(android.view.MenuItem);
-    method public void onCreate(android.os.Bundle);
-    method public android.view.animation.Animation onCreateAnimation(int, boolean, int);
-    method public android.animation.Animator onCreateAnimator(int, boolean, int);
-    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
-    method public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
-    method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
-    method public void onDestroy();
+    method @CallSuper public void onActivityCreated(android.os.Bundle?);
+    method public void onActivityResult(int, int, android.content.Intent!);
+    method @CallSuper public void onAttach(android.content.Context!);
+    method @Deprecated @CallSuper public void onAttach(android.app.Activity!);
+    method public void onAttachFragment(androidx.fragment.app.Fragment!);
+    method @CallSuper public void onConfigurationChanged(android.content.res.Configuration!);
+    method public boolean onContextItemSelected(android.view.MenuItem!);
+    method @CallSuper public void onCreate(android.os.Bundle?);
+    method public android.view.animation.Animation! onCreateAnimation(int, boolean, int);
+    method public android.animation.Animator! onCreateAnimator(int, boolean, int);
+    method public void onCreateContextMenu(android.view.ContextMenu!, android.view.View!, android.view.ContextMenu.ContextMenuInfo!);
+    method public void onCreateOptionsMenu(android.view.Menu!, android.view.MenuInflater!);
+    method public android.view.View? onCreateView(android.view.LayoutInflater, android.view.ViewGroup?, android.os.Bundle?);
+    method @CallSuper public void onDestroy();
     method public void onDestroyOptionsMenu();
-    method public void onDestroyView();
-    method public void onDetach();
-    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+    method @CallSuper public void onDestroyView();
+    method @CallSuper public void onDetach();
+    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
     method public void onHiddenChanged(boolean);
-    method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
-    method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
-    method public void onLowMemory();
+    method @CallSuper public void onInflate(android.content.Context!, android.util.AttributeSet!, android.os.Bundle!);
+    method @Deprecated @CallSuper public void onInflate(android.app.Activity!, android.util.AttributeSet!, android.os.Bundle!);
+    method @CallSuper public void onLowMemory();
     method public void onMultiWindowModeChanged(boolean);
-    method public boolean onOptionsItemSelected(android.view.MenuItem);
-    method public void onOptionsMenuClosed(android.view.Menu);
-    method public void onPause();
+    method public boolean onOptionsItemSelected(android.view.MenuItem!);
+    method public void onOptionsMenuClosed(android.view.Menu!);
+    method @CallSuper public void onPause();
     method public void onPictureInPictureModeChanged(boolean);
-    method public void onPrepareOptionsMenu(android.view.Menu);
-    method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
-    method public void onResume();
+    method public void onPrepareOptionsMenu(android.view.Menu!);
+    method public void onRequestPermissionsResult(int, String[], int[]);
+    method @CallSuper public void onResume();
     method public void onSaveInstanceState(android.os.Bundle);
-    method public void onStart();
-    method public void onStop();
-    method public void onViewCreated(android.view.View, android.os.Bundle);
-    method public void onViewStateRestored(android.os.Bundle);
+    method @CallSuper public void onStart();
+    method @CallSuper public void onStop();
+    method public void onViewCreated(android.view.View, android.os.Bundle?);
+    method @CallSuper public void onViewStateRestored(android.os.Bundle?);
     method public void postponeEnterTransition();
-    method public void registerForContextMenu(android.view.View);
-    method public final void requestPermissions(java.lang.String[], int);
+    method public void registerForContextMenu(android.view.View!);
+    method public final void requestPermissions(String[], int);
     method public final androidx.fragment.app.FragmentActivity requireActivity();
     method public final android.content.Context requireContext();
     method public final androidx.fragment.app.FragmentManager requireFragmentManager();
-    method public final java.lang.Object requireHost();
+    method public final Object requireHost();
     method public void setAllowEnterTransitionOverlap(boolean);
     method public void setAllowReturnTransitionOverlap(boolean);
-    method public void setArguments(android.os.Bundle);
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback);
-    method public void setEnterTransition(java.lang.Object);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback);
-    method public void setExitTransition(java.lang.Object);
+    method public void setArguments(android.os.Bundle?);
+    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback!);
+    method public void setEnterTransition(Object?);
+    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback!);
+    method public void setExitTransition(Object?);
     method public void setHasOptionsMenu(boolean);
-    method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState);
+    method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState?);
     method public void setMenuVisibility(boolean);
-    method public void setReenterTransition(java.lang.Object);
+    method public void setReenterTransition(Object?);
     method public void setRetainInstance(boolean);
-    method public void setReturnTransition(java.lang.Object);
-    method public void setSharedElementEnterTransition(java.lang.Object);
-    method public void setSharedElementReturnTransition(java.lang.Object);
-    method public void setTargetFragment(androidx.fragment.app.Fragment, int);
+    method public void setReturnTransition(Object?);
+    method public void setSharedElementEnterTransition(Object?);
+    method public void setSharedElementReturnTransition(Object?);
+    method public void setTargetFragment(androidx.fragment.app.Fragment?, int);
     method public void setUserVisibleHint(boolean);
-    method public boolean shouldShowRequestPermissionRationale(java.lang.String);
-    method public void startActivity(android.content.Intent);
-    method public void startActivity(android.content.Intent, android.os.Bundle);
-    method public void startActivityForResult(android.content.Intent, int);
-    method public void startActivityForResult(android.content.Intent, int, android.os.Bundle);
-    method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public boolean shouldShowRequestPermissionRationale(String);
+    method public void startActivity(android.content.Intent!);
+    method public void startActivity(android.content.Intent!, android.os.Bundle?);
+    method public void startActivityForResult(android.content.Intent!, int);
+    method public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
+    method public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle!) throws android.content.IntentSender.SendIntentException;
     method public void startPostponedEnterTransition();
-    method public void unregisterForContextMenu(android.view.View);
+    method public void unregisterForContextMenu(android.view.View!);
   }
 
   public static class Fragment.InstantiationException extends java.lang.RuntimeException {
-    ctor public Fragment.InstantiationException(java.lang.String, java.lang.Exception);
+    ctor public Fragment.InstantiationException(String!, Exception!);
   }
 
   public static class Fragment.SavedState implements android.os.Parcelable {
     method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<androidx.fragment.app.Fragment.SavedState> CREATOR;
+    method public void writeToParcel(android.os.Parcel!, int);
+    field public static final android.os.Parcelable.Creator<androidx.fragment.app.Fragment.SavedState>! CREATOR;
   }
 
   public class FragmentActivity extends androidx.core.app.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator androidx.lifecycle.ViewModelStoreOwner {
     ctor public FragmentActivity();
-    method public java.lang.Object getLastCustomNonConfigurationInstance();
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method public deprecated androidx.loader.app.LoaderManager getSupportLoaderManager();
+    method public Object! getLastCustomNonConfigurationInstance();
+    method public androidx.lifecycle.Lifecycle! getLifecycle();
+    method public androidx.fragment.app.FragmentManager! getSupportFragmentManager();
+    method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
-    method public void onAttachFragment(androidx.fragment.app.Fragment);
-    method public void onMultiWindowModeChanged(boolean);
-    method public void onPictureInPictureModeChanged(boolean);
+    method public void onAttachFragment(androidx.fragment.app.Fragment!);
+    method @CallSuper public void onMultiWindowModeChanged(boolean);
+    method @CallSuper public void onPictureInPictureModeChanged(boolean);
     method protected void onResumeFragments();
-    method public java.lang.Object onRetainCustomNonConfigurationInstance();
-    method public final java.lang.Object onRetainNonConfigurationInstance();
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int, android.os.Bundle);
-    method public void startIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public Object! onRetainCustomNonConfigurationInstance();
+    method public final Object! onRetainNonConfigurationInstance();
+    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback!);
+    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback!);
+    method public void startActivityFromFragment(androidx.fragment.app.Fragment!, android.content.Intent!, int);
+    method public void startActivityFromFragment(androidx.fragment.app.Fragment!, android.content.Intent!, int, android.os.Bundle?);
+    method public void startIntentSenderFromFragment(androidx.fragment.app.Fragment!, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle!) throws android.content.IntentSender.SendIntentException;
     method public void supportFinishAfterTransition();
-    method public deprecated void supportInvalidateOptionsMenu();
+    method @Deprecated public void supportInvalidateOptionsMenu();
     method public void supportPostponeEnterTransition();
     method public void supportStartPostponedEnterTransition();
     method public final void validateRequestPermissionsRequestCode(int);
@@ -175,70 +177,76 @@
 
   public abstract class FragmentContainer {
     ctor public FragmentContainer();
-    method public androidx.fragment.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
-    method public abstract android.view.View onFindViewById(int);
+    method public androidx.fragment.app.Fragment! instantiate(android.content.Context!, String!, android.os.Bundle!);
+    method public abstract android.view.View? onFindViewById(@IdRes int);
     method public abstract boolean onHasView();
   }
 
   public class FragmentController {
-    method public void attachHost(androidx.fragment.app.Fragment);
-    method public static androidx.fragment.app.FragmentController createController(androidx.fragment.app.FragmentHostCallback<?>);
+    method public void attachHost(androidx.fragment.app.Fragment!);
+    method public static androidx.fragment.app.FragmentController! createController(androidx.fragment.app.FragmentHostCallback<?>!);
     method public void dispatchActivityCreated();
-    method public void dispatchConfigurationChanged(android.content.res.Configuration);
-    method public boolean dispatchContextItemSelected(android.view.MenuItem);
+    method public void dispatchConfigurationChanged(android.content.res.Configuration!);
+    method public boolean dispatchContextItemSelected(android.view.MenuItem!);
     method public void dispatchCreate();
-    method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method public boolean dispatchCreateOptionsMenu(android.view.Menu!, android.view.MenuInflater!);
     method public void dispatchDestroy();
     method public void dispatchDestroyView();
     method public void dispatchLowMemory();
     method public void dispatchMultiWindowModeChanged(boolean);
-    method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
-    method public void dispatchOptionsMenuClosed(android.view.Menu);
+    method public boolean dispatchOptionsItemSelected(android.view.MenuItem!);
+    method public void dispatchOptionsMenuClosed(android.view.Menu!);
     method public void dispatchPause();
     method public void dispatchPictureInPictureModeChanged(boolean);
-    method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
-    method public deprecated void dispatchReallyStop();
+    method public boolean dispatchPrepareOptionsMenu(android.view.Menu!);
+    method @Deprecated public void dispatchReallyStop();
     method public void dispatchResume();
     method public void dispatchStart();
     method public void dispatchStop();
-    method public deprecated void doLoaderDestroy();
-    method public deprecated void doLoaderRetain();
-    method public deprecated void doLoaderStart();
-    method public deprecated void doLoaderStop(boolean);
-    method public deprecated void dumpLoaders(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method @Deprecated public void doLoaderDestroy();
+    method @Deprecated public void doLoaderRetain();
+    method @Deprecated public void doLoaderStart();
+    method @Deprecated public void doLoaderStop(boolean);
+    method @Deprecated public void dumpLoaders(String!, java.io.FileDescriptor!, java.io.PrintWriter!, String[]!);
     method public boolean execPendingActions();
-    method public androidx.fragment.app.Fragment findFragmentByWho(java.lang.String);
-    method public java.util.List<androidx.fragment.app.Fragment> getActiveFragments(java.util.List<androidx.fragment.app.Fragment>);
+    method public androidx.fragment.app.Fragment? findFragmentByWho(String!);
+    method public java.util.List<androidx.fragment.app.Fragment>! getActiveFragments(java.util.List<androidx.fragment.app.Fragment>!);
     method public int getActiveFragmentsCount();
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method public deprecated androidx.loader.app.LoaderManager getSupportLoaderManager();
+    method public androidx.fragment.app.FragmentManager! getSupportFragmentManager();
+    method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
     method public void noteStateNotSaved();
-    method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
-    method public deprecated void reportLoaderStart();
-    method public deprecated void restoreAllState(android.os.Parcelable, java.util.List<androidx.fragment.app.Fragment>);
-    method public void restoreAllState(android.os.Parcelable, androidx.fragment.app.FragmentManagerNonConfig);
-    method public deprecated void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String, androidx.loader.app.LoaderManager>);
-    method public deprecated androidx.collection.SimpleArrayMap<java.lang.String, androidx.loader.app.LoaderManager> retainLoaderNonConfig();
-    method public androidx.fragment.app.FragmentManagerNonConfig retainNestedNonConfig();
-    method public deprecated java.util.List<androidx.fragment.app.Fragment> retainNonConfig();
-    method public android.os.Parcelable saveAllState();
+    method public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
+    method @Deprecated public void reportLoaderStart();
+    method @Deprecated public void restoreAllState(android.os.Parcelable!, java.util.List<androidx.fragment.app.Fragment>!);
+    method public void restoreAllState(android.os.Parcelable!, androidx.fragment.app.FragmentManagerNonConfig!);
+    method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String,androidx.loader.app.LoaderManager>!);
+    method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String,androidx.loader.app.LoaderManager>! retainLoaderNonConfig();
+    method public androidx.fragment.app.FragmentManagerNonConfig! retainNestedNonConfig();
+    method @Deprecated public java.util.List<androidx.fragment.app.Fragment>! retainNonConfig();
+    method public android.os.Parcelable! saveAllState();
+  }
+
+  public class FragmentFactory {
+    ctor public FragmentFactory();
+    method public androidx.fragment.app.Fragment instantiate(ClassLoader, String, android.os.Bundle?);
+    method public static Class<? extends androidx.fragment.app.Fragment> loadFragmentClass(ClassLoader, String);
   }
 
   public abstract class FragmentHostCallback<E> extends androidx.fragment.app.FragmentContainer {
     ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
-    method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
-    method public android.view.View onFindViewById(int);
-    method public abstract E onGetHost();
+    method public void onDump(String!, java.io.FileDescriptor!, java.io.PrintWriter!, String[]!);
+    method public android.view.View? onFindViewById(int);
+    method public abstract E? onGetHost();
     method public android.view.LayoutInflater onGetLayoutInflater();
     method public int onGetWindowAnimations();
     method public boolean onHasView();
     method public boolean onHasWindowAnimations();
-    method public void onRequestPermissionsFromFragment(androidx.fragment.app.Fragment, java.lang.String[], int);
-    method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment);
-    method public boolean onShouldShowRequestPermissionRationale(java.lang.String);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int, android.os.Bundle);
-    method public void onStartIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public void onRequestPermissionsFromFragment(androidx.fragment.app.Fragment, String[], int);
+    method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment!);
+    method public boolean onShouldShowRequestPermissionRationale(String);
+    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment!, android.content.Intent!, int);
+    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment!, android.content.Intent!, int, android.os.Bundle?);
+    method public void onStartIntentSenderFromFragment(androidx.fragment.app.Fragment!, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle!) throws android.content.IntentSender.SendIntentException;
     method public void onSupportInvalidateOptionsMenu();
   }
 
@@ -246,96 +254,96 @@
     ctor public FragmentManager();
     method public abstract void addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
     method public abstract androidx.fragment.app.FragmentTransaction beginTransaction();
-    method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public abstract void dump(String!, java.io.FileDescriptor!, java.io.PrintWriter!, String[]!);
     method public static void enableDebugLogging(boolean);
     method public abstract boolean executePendingTransactions();
-    method public abstract androidx.fragment.app.Fragment findFragmentById(int);
-    method public abstract androidx.fragment.app.Fragment findFragmentByTag(java.lang.String);
+    method public abstract androidx.fragment.app.Fragment? findFragmentById(@IdRes int);
+    method public abstract androidx.fragment.app.Fragment? findFragmentByTag(String?);
     method public abstract androidx.fragment.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
     method public abstract int getBackStackEntryCount();
-    method public abstract androidx.fragment.app.Fragment getFragment(android.os.Bundle, java.lang.String);
+    method public abstract androidx.fragment.app.Fragment? getFragment(android.os.Bundle, String);
     method public abstract java.util.List<androidx.fragment.app.Fragment> getFragments();
-    method public abstract androidx.fragment.app.Fragment getPrimaryNavigationFragment();
+    method public abstract androidx.fragment.app.Fragment? getPrimaryNavigationFragment();
     method public abstract boolean isDestroyed();
     method public abstract boolean isStateSaved();
     method public abstract void popBackStack();
-    method public abstract void popBackStack(java.lang.String, int);
+    method public abstract void popBackStack(String?, int);
     method public abstract void popBackStack(int, int);
     method public abstract boolean popBackStackImmediate();
-    method public abstract boolean popBackStackImmediate(java.lang.String, int);
+    method public abstract boolean popBackStackImmediate(String?, int);
     method public abstract boolean popBackStackImmediate(int, int);
-    method public abstract void putFragment(android.os.Bundle, java.lang.String, androidx.fragment.app.Fragment);
+    method public abstract void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
     method public abstract void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
     method public abstract void removeOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
-    method public abstract androidx.fragment.app.Fragment.SavedState saveFragmentInstanceState(androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.Fragment.SavedState? saveFragmentInstanceState(androidx.fragment.app.Fragment!);
     method public abstract void unregisterFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks);
     field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
   }
 
-  public static abstract interface FragmentManager.BackStackEntry {
-    method public abstract java.lang.CharSequence getBreadCrumbShortTitle();
-    method public abstract int getBreadCrumbShortTitleRes();
-    method public abstract java.lang.CharSequence getBreadCrumbTitle();
-    method public abstract int getBreadCrumbTitleRes();
-    method public abstract int getId();
-    method public abstract java.lang.String getName();
+  public static interface FragmentManager.BackStackEntry {
+    method public CharSequence? getBreadCrumbShortTitle();
+    method @StringRes public int getBreadCrumbShortTitleRes();
+    method public CharSequence? getBreadCrumbTitle();
+    method @StringRes public int getBreadCrumbTitleRes();
+    method public int getId();
+    method public String? getName();
   }
 
-  public static abstract class FragmentManager.FragmentLifecycleCallbacks {
+  public abstract static class FragmentManager.FragmentLifecycleCallbacks {
     ctor public FragmentManager.FragmentLifecycleCallbacks();
-    method public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
+    method public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
     method public void onFragmentAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
+    method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
     method public void onFragmentDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
     method public void onFragmentDetached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
     method public void onFragmentPaused(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
     method public void onFragmentPreAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
+    method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
     method public void onFragmentResumed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
     method public void onFragmentSaveInstanceState(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
     method public void onFragmentStarted(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
     method public void onFragmentStopped(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle);
+    method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle?);
     method public void onFragmentViewDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
   }
 
-  public static abstract interface FragmentManager.OnBackStackChangedListener {
-    method public abstract void onBackStackChanged();
+  public static interface FragmentManager.OnBackStackChangedListener {
+    method public void onBackStackChanged();
   }
 
   public class FragmentManagerNonConfig {
   }
 
   public abstract class FragmentPagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor public FragmentPagerAdapter(androidx.fragment.app.FragmentManager);
-    method public abstract androidx.fragment.app.Fragment getItem(int);
+    ctor public FragmentPagerAdapter(androidx.fragment.app.FragmentManager!);
+    method public abstract androidx.fragment.app.Fragment! getItem(int);
     method public long getItemId(int);
-    method public boolean isViewFromObject(android.view.View, java.lang.Object);
+    method public boolean isViewFromObject(android.view.View!, Object!);
   }
 
   public abstract class FragmentStatePagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager);
-    method public abstract androidx.fragment.app.Fragment getItem(int);
-    method public boolean isViewFromObject(android.view.View, java.lang.Object);
+    ctor public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager!);
+    method public abstract androidx.fragment.app.Fragment! getItem(int);
+    method public boolean isViewFromObject(android.view.View!, Object!);
   }
 
   public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
-    ctor public FragmentTabHost(android.content.Context);
-    ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
-    method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
-    method public void onTabChanged(java.lang.String);
-    method public deprecated void setup();
-    method public void setup(android.content.Context, androidx.fragment.app.FragmentManager);
-    method public void setup(android.content.Context, androidx.fragment.app.FragmentManager, int);
+    ctor public FragmentTabHost(android.content.Context!);
+    ctor public FragmentTabHost(android.content.Context!, android.util.AttributeSet!);
+    method public void addTab(android.widget.TabHost.TabSpec, Class<?>, android.os.Bundle?);
+    method public void onTabChanged(String!);
+    method @Deprecated public void setup();
+    method public void setup(android.content.Context!, androidx.fragment.app.FragmentManager!);
+    method public void setup(android.content.Context!, androidx.fragment.app.FragmentManager!, int);
   }
 
   public abstract class FragmentTransaction {
     ctor public FragmentTransaction();
-    method public abstract androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, java.lang.String);
-    method public abstract androidx.fragment.app.FragmentTransaction add(int, androidx.fragment.app.Fragment);
-    method public abstract androidx.fragment.app.FragmentTransaction add(int, androidx.fragment.app.Fragment, java.lang.String);
-    method public abstract androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, java.lang.String);
-    method public abstract androidx.fragment.app.FragmentTransaction addToBackStack(java.lang.String);
+    method public abstract androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
+    method public abstract androidx.fragment.app.FragmentTransaction addToBackStack(String?);
     method public abstract androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
     method public abstract int commit();
     method public abstract int commitAllowingStateLoss();
@@ -347,20 +355,20 @@
     method public abstract boolean isAddToBackStackAllowed();
     method public abstract boolean isEmpty();
     method public abstract androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
-    method public abstract androidx.fragment.app.FragmentTransaction replace(int, androidx.fragment.app.Fragment);
-    method public abstract androidx.fragment.app.FragmentTransaction replace(int, androidx.fragment.app.Fragment, java.lang.String);
-    method public abstract androidx.fragment.app.FragmentTransaction runOnCommit(java.lang.Runnable);
-    method public abstract deprecated androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
-    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(int);
-    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(java.lang.CharSequence);
-    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(int);
-    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(java.lang.CharSequence);
-    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(int, int);
-    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(int, int, int, int);
-    method public abstract androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
+    method @Deprecated public abstract androidx.fragment.app.FragmentTransaction! setAllowOptimization(boolean);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence?);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(CharSequence?);
+    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment?);
     method public abstract androidx.fragment.app.FragmentTransaction setReorderingAllowed(boolean);
     method public abstract androidx.fragment.app.FragmentTransaction setTransition(int);
-    method public abstract androidx.fragment.app.FragmentTransaction setTransitionStyle(int);
+    method public abstract androidx.fragment.app.FragmentTransaction setTransitionStyle(@StyleRes int);
     method public abstract androidx.fragment.app.FragmentTransaction show(androidx.fragment.app.Fragment);
     field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
     field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
@@ -373,13 +381,13 @@
 
   public class ListFragment extends androidx.fragment.app.Fragment {
     ctor public ListFragment();
-    method public android.widget.ListAdapter getListAdapter();
-    method public android.widget.ListView getListView();
+    method public android.widget.ListAdapter! getListAdapter();
+    method public android.widget.ListView! getListView();
     method public long getSelectedItemId();
     method public int getSelectedItemPosition();
-    method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
-    method public void setEmptyText(java.lang.CharSequence);
-    method public void setListAdapter(android.widget.ListAdapter);
+    method public void onListItemClick(android.widget.ListView!, android.view.View!, int, long);
+    method public void setEmptyText(CharSequence!);
+    method public void setListAdapter(android.widget.ListAdapter!);
     method public void setListShown(boolean);
     method public void setListShownNoAnimation(boolean);
     method public void setSelection(int);
diff --git a/fragment/api/1.1.0-alpha02.txt b/fragment/api/1.1.0-alpha02.txt
new file mode 100644
index 0000000..8e43ddd
--- /dev/null
+++ b/fragment/api/1.1.0-alpha02.txt
@@ -0,0 +1,398 @@
+// Signature format: 2.0
+package androidx.fragment.app {
+
+  public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    ctor public DialogFragment();
+    method public void dismiss();
+    method public void dismissAllowingStateLoss();
+    method public android.app.Dialog? getDialog();
+    method public boolean getShowsDialog();
+    method @StyleRes public int getTheme();
+    method public boolean isCancelable();
+    method public void onCancel(android.content.DialogInterface);
+    method public android.app.Dialog onCreateDialog(android.os.Bundle?);
+    method public void onDismiss(android.content.DialogInterface);
+    method public final android.app.Dialog requireDialog();
+    method public void setCancelable(boolean);
+    method public void setShowsDialog(boolean);
+    method public void setStyle(int, @StyleRes int);
+    method public void show(androidx.fragment.app.FragmentManager, String?);
+    method public int show(androidx.fragment.app.FragmentTransaction, String?);
+    method public void showNow(androidx.fragment.app.FragmentManager, String?);
+    field public static final int STYLE_NORMAL = 0; // 0x0
+    field public static final int STYLE_NO_FRAME = 2; // 0x2
+    field public static final int STYLE_NO_INPUT = 3; // 0x3
+    field public static final int STYLE_NO_TITLE = 1; // 0x1
+  }
+
+  public class Fragment implements android.content.ComponentCallbacks androidx.lifecycle.LifecycleOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
+    ctor public Fragment();
+    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String[]?);
+    method public final boolean equals(Object?);
+    method public final androidx.fragment.app.FragmentActivity? getActivity();
+    method public boolean getAllowEnterTransitionOverlap();
+    method public boolean getAllowReturnTransitionOverlap();
+    method public final android.os.Bundle? getArguments();
+    method public final androidx.fragment.app.FragmentManager getChildFragmentManager();
+    method public android.content.Context? getContext();
+    method public Object? getEnterTransition();
+    method public Object? getExitTransition();
+    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method public final Object? getHost();
+    method public final int getId();
+    method public final android.view.LayoutInflater getLayoutInflater();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
+    method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public Object? getReenterTransition();
+    method public final android.content.res.Resources getResources();
+    method public final boolean getRetainInstance();
+    method public Object? getReturnTransition();
+    method public Object? getSharedElementEnterTransition();
+    method public Object? getSharedElementReturnTransition();
+    method public final String getString(@StringRes int);
+    method public final String getString(@StringRes int, java.lang.Object...?);
+    method public final String? getTag();
+    method public final androidx.fragment.app.Fragment? getTargetFragment();
+    method public final int getTargetRequestCode();
+    method public final CharSequence getText(@StringRes int);
+    method public boolean getUserVisibleHint();
+    method public android.view.View? getView();
+    method @MainThread public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
+    method public androidx.lifecycle.LiveData<androidx.lifecycle.LifecycleOwner> getViewLifecycleOwnerLiveData();
+    method public androidx.lifecycle.ViewModelStore getViewModelStore();
+    method public final int hashCode();
+    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String);
+    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
+    method public final boolean isAdded();
+    method public final boolean isDetached();
+    method public final boolean isHidden();
+    method public final boolean isInLayout();
+    method public final boolean isRemoving();
+    method public final boolean isResumed();
+    method public final boolean isStateSaved();
+    method public final boolean isVisible();
+    method @CallSuper public void onActivityCreated(android.os.Bundle?);
+    method public void onActivityResult(int, int, android.content.Intent?);
+    method @CallSuper public void onAttach(android.content.Context);
+    method @Deprecated @CallSuper public void onAttach(android.app.Activity);
+    method public void onAttachFragment(androidx.fragment.app.Fragment);
+    method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
+    method public boolean onContextItemSelected(android.view.MenuItem);
+    method @CallSuper public void onCreate(android.os.Bundle?);
+    method public android.view.animation.Animation? onCreateAnimation(int, boolean, int);
+    method public android.animation.Animator? onCreateAnimator(int, boolean, int);
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo?);
+    method public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method public android.view.View? onCreateView(android.view.LayoutInflater, android.view.ViewGroup?, android.os.Bundle?);
+    method @CallSuper public void onDestroy();
+    method public void onDestroyOptionsMenu();
+    method @CallSuper public void onDestroyView();
+    method @CallSuper public void onDetach();
+    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
+    method public void onHiddenChanged(boolean);
+    method @CallSuper public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
+    method @Deprecated @CallSuper public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
+    method @CallSuper public void onLowMemory();
+    method public void onMultiWindowModeChanged(boolean);
+    method public boolean onOptionsItemSelected(android.view.MenuItem);
+    method public void onOptionsMenuClosed(android.view.Menu);
+    method @CallSuper public void onPause();
+    method public void onPictureInPictureModeChanged(boolean);
+    method public void onPrepareOptionsMenu(android.view.Menu);
+    method public void onRequestPermissionsResult(int, String[], int[]);
+    method @CallSuper public void onResume();
+    method public void onSaveInstanceState(android.os.Bundle);
+    method @CallSuper public void onStart();
+    method @CallSuper public void onStop();
+    method public void onViewCreated(android.view.View, android.os.Bundle?);
+    method @CallSuper public void onViewStateRestored(android.os.Bundle?);
+    method public void postponeEnterTransition();
+    method public void registerForContextMenu(android.view.View);
+    method public final void requestPermissions(String[], int);
+    method public final androidx.fragment.app.FragmentActivity requireActivity();
+    method public final android.content.Context requireContext();
+    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method public final Object requireHost();
+    method public void setAllowEnterTransitionOverlap(boolean);
+    method public void setAllowReturnTransitionOverlap(boolean);
+    method public void setArguments(android.os.Bundle?);
+    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void setEnterTransition(Object?);
+    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void setExitTransition(Object?);
+    method public void setHasOptionsMenu(boolean);
+    method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState?);
+    method public void setMenuVisibility(boolean);
+    method public void setReenterTransition(Object?);
+    method public void setRetainInstance(boolean);
+    method public void setReturnTransition(Object?);
+    method public void setSharedElementEnterTransition(Object?);
+    method public void setSharedElementReturnTransition(Object?);
+    method public void setTargetFragment(androidx.fragment.app.Fragment?, int);
+    method public void setUserVisibleHint(boolean);
+    method public boolean shouldShowRequestPermissionRationale(String);
+    method public void startActivity(android.content.Intent!);
+    method public void startActivity(android.content.Intent!, android.os.Bundle?);
+    method public void startActivityForResult(android.content.Intent!, int);
+    method public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
+    method public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+    method public void startPostponedEnterTransition();
+    method public void unregisterForContextMenu(android.view.View);
+  }
+
+  public static class Fragment.InstantiationException extends java.lang.RuntimeException {
+    ctor public Fragment.InstantiationException(String, Exception?);
+  }
+
+  public static class Fragment.SavedState implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.fragment.app.Fragment.SavedState> CREATOR;
+  }
+
+  public class FragmentActivity extends androidx.activity.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator {
+    ctor public FragmentActivity();
+    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
+    method @Deprecated public androidx.loader.app.LoaderManager getSupportLoaderManager();
+    method public android.content.Context getThemedContext();
+    method public void onAttachFragment(androidx.fragment.app.Fragment);
+    method @CallSuper public void onMultiWindowModeChanged(boolean);
+    method @CallSuper public void onPictureInPictureModeChanged(boolean);
+    method protected void onResumeFragments();
+    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
+    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
+    method public void startIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+    method public void supportFinishAfterTransition();
+    method @Deprecated public void supportInvalidateOptionsMenu();
+    method public void supportPostponeEnterTransition();
+    method public void supportStartPostponedEnterTransition();
+    method public final void validateRequestPermissionsRequestCode(int);
+  }
+
+  public abstract class FragmentContainer {
+    ctor public FragmentContainer();
+    method @Deprecated public androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
+    method public abstract android.view.View? onFindViewById(@IdRes int);
+    method public abstract boolean onHasView();
+  }
+
+  public class FragmentController {
+    method public void attachHost(androidx.fragment.app.Fragment?);
+    method public static androidx.fragment.app.FragmentController createController(androidx.fragment.app.FragmentHostCallback<?>);
+    method public void dispatchActivityCreated();
+    method public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method public boolean dispatchContextItemSelected(android.view.MenuItem);
+    method public void dispatchCreate();
+    method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method public void dispatchDestroy();
+    method public void dispatchDestroyView();
+    method public void dispatchLowMemory();
+    method public void dispatchMultiWindowModeChanged(boolean);
+    method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+    method public void dispatchOptionsMenuClosed(android.view.Menu);
+    method public void dispatchPause();
+    method public void dispatchPictureInPictureModeChanged(boolean);
+    method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+    method @Deprecated public void dispatchReallyStop();
+    method public void dispatchResume();
+    method public void dispatchStart();
+    method public void dispatchStop();
+    method @Deprecated public void doLoaderDestroy();
+    method @Deprecated public void doLoaderRetain();
+    method @Deprecated public void doLoaderStart();
+    method @Deprecated public void doLoaderStop(boolean);
+    method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor?, java.io.PrintWriter, String[]?);
+    method public boolean execPendingActions();
+    method public androidx.fragment.app.Fragment? findFragmentByWho(String);
+    method public java.util.List<androidx.fragment.app.Fragment> getActiveFragments(java.util.List<androidx.fragment.app.Fragment>!);
+    method public int getActiveFragmentsCount();
+    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
+    method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
+    method public void noteStateNotSaved();
+    method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void reportLoaderStart();
+    method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment>?);
+    method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
+    method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String,androidx.loader.app.LoaderManager>!);
+    method public void restoreSaveState(android.os.Parcelable?);
+    method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String,androidx.loader.app.LoaderManager>? retainLoaderNonConfig();
+    method @Deprecated public androidx.fragment.app.FragmentManagerNonConfig? retainNestedNonConfig();
+    method @Deprecated public java.util.List<androidx.fragment.app.Fragment>? retainNonConfig();
+    method public android.os.Parcelable? saveAllState();
+  }
+
+  public class FragmentFactory {
+    ctor public FragmentFactory();
+    method public androidx.fragment.app.Fragment instantiate(ClassLoader, String, android.os.Bundle?);
+    method public static Class<? extends androidx.fragment.app.Fragment> loadFragmentClass(ClassLoader, String);
+  }
+
+  public abstract class FragmentHostCallback<E> extends androidx.fragment.app.FragmentContainer {
+    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method public void onDump(String, java.io.FileDescriptor?, java.io.PrintWriter, String[]?);
+    method public android.view.View? onFindViewById(int);
+    method public abstract E? onGetHost();
+    method public android.view.LayoutInflater onGetLayoutInflater();
+    method public int onGetWindowAnimations();
+    method public boolean onHasView();
+    method public boolean onHasWindowAnimations();
+    method public void onRequestPermissionsFromFragment(androidx.fragment.app.Fragment, String[], int);
+    method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment);
+    method public boolean onShouldShowRequestPermissionRationale(String);
+    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
+    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
+    method public void onStartIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+    method public void onSupportInvalidateOptionsMenu();
+  }
+
+  public abstract class FragmentManager {
+    ctor public FragmentManager();
+    method public abstract void addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
+    method public abstract androidx.fragment.app.FragmentTransaction beginTransaction();
+    method public abstract void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String[]?);
+    method public static void enableDebugLogging(boolean);
+    method public abstract boolean executePendingTransactions();
+    method public abstract androidx.fragment.app.Fragment? findFragmentById(@IdRes int);
+    method public abstract androidx.fragment.app.Fragment? findFragmentByTag(String?);
+    method public abstract androidx.fragment.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+    method public abstract int getBackStackEntryCount();
+    method public abstract androidx.fragment.app.Fragment? getFragment(android.os.Bundle, String);
+    method public abstract androidx.fragment.app.FragmentFactory getFragmentFactory();
+    method public abstract java.util.List<androidx.fragment.app.Fragment> getFragments();
+    method public abstract androidx.fragment.app.Fragment? getPrimaryNavigationFragment();
+    method public abstract boolean isDestroyed();
+    method public abstract boolean isStateSaved();
+    method public abstract void popBackStack();
+    method public abstract void popBackStack(String?, int);
+    method public abstract void popBackStack(int, int);
+    method public abstract boolean popBackStackImmediate();
+    method public abstract boolean popBackStackImmediate(String?, int);
+    method public abstract boolean popBackStackImmediate(int, int);
+    method public abstract void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
+    method public abstract void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+    method public abstract void removeOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
+    method public abstract androidx.fragment.app.Fragment.SavedState? saveFragmentInstanceState(androidx.fragment.app.Fragment);
+    method public abstract void setFragmentFactory(androidx.fragment.app.FragmentFactory);
+    method public abstract void unregisterFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks);
+    field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+  }
+
+  public static interface FragmentManager.BackStackEntry {
+    method public CharSequence? getBreadCrumbShortTitle();
+    method @StringRes public int getBreadCrumbShortTitleRes();
+    method public CharSequence? getBreadCrumbTitle();
+    method @StringRes public int getBreadCrumbTitleRes();
+    method public int getId();
+    method public String? getName();
+  }
+
+  public abstract static class FragmentManager.FragmentLifecycleCallbacks {
+    ctor public FragmentManager.FragmentLifecycleCallbacks();
+    method public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
+    method public void onFragmentAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
+    method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
+    method public void onFragmentDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentDetached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentPaused(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentPreAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
+    method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
+    method public void onFragmentResumed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentSaveInstanceState(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
+    method public void onFragmentStarted(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentStopped(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle?);
+    method public void onFragmentViewDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+  }
+
+  public static interface FragmentManager.OnBackStackChangedListener {
+    method public void onBackStackChanged();
+  }
+
+  @Deprecated public class FragmentManagerNonConfig {
+  }
+
+  public abstract class FragmentPagerAdapter extends androidx.viewpager.widget.PagerAdapter {
+    ctor public FragmentPagerAdapter(androidx.fragment.app.FragmentManager);
+    method public abstract androidx.fragment.app.Fragment getItem(int);
+    method public long getItemId(int);
+    method public boolean isViewFromObject(android.view.View, Object);
+  }
+
+  public abstract class FragmentStatePagerAdapter extends androidx.viewpager.widget.PagerAdapter {
+    ctor public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager);
+    method public abstract androidx.fragment.app.Fragment getItem(int);
+    method public boolean isViewFromObject(android.view.View, Object);
+  }
+
+  public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+    ctor public FragmentTabHost(android.content.Context);
+    ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet?);
+    method public void addTab(android.widget.TabHost.TabSpec, Class<?>, android.os.Bundle?);
+    method public void onTabChanged(String?);
+    method @Deprecated public void setup();
+    method public void setup(android.content.Context, androidx.fragment.app.FragmentManager);
+    method public void setup(android.content.Context, androidx.fragment.app.FragmentManager, int);
+  }
+
+  public abstract class FragmentTransaction {
+    ctor public FragmentTransaction();
+    method public abstract androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
+    method public abstract androidx.fragment.app.FragmentTransaction addToBackStack(String?);
+    method public abstract androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
+    method public abstract int commit();
+    method public abstract int commitAllowingStateLoss();
+    method public abstract void commitNow();
+    method public abstract void commitNowAllowingStateLoss();
+    method public abstract androidx.fragment.app.FragmentTransaction detach(androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction disallowAddToBackStack();
+    method public abstract androidx.fragment.app.FragmentTransaction hide(androidx.fragment.app.Fragment);
+    method public abstract boolean isAddToBackStackAllowed();
+    method public abstract boolean isEmpty();
+    method public abstract androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
+    method @Deprecated public abstract androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence?);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(CharSequence?);
+    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment?);
+    method public abstract androidx.fragment.app.FragmentTransaction setReorderingAllowed(boolean);
+    method public abstract androidx.fragment.app.FragmentTransaction setTransition(int);
+    method public abstract androidx.fragment.app.FragmentTransaction setTransitionStyle(@StyleRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction show(androidx.fragment.app.Fragment);
+    field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
+    field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
+    field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
+    field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
+    field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
+    field public static final int TRANSIT_NONE = 0; // 0x0
+    field public static final int TRANSIT_UNSET = -1; // 0xffffffff
+  }
+
+  public class ListFragment extends androidx.fragment.app.Fragment {
+    ctor public ListFragment();
+    method public android.widget.ListAdapter? getListAdapter();
+    method public android.widget.ListView getListView();
+    method public long getSelectedItemId();
+    method public int getSelectedItemPosition();
+    method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
+    method public final android.widget.ListAdapter requireListAdapter();
+    method public void setEmptyText(CharSequence?);
+    method public void setListAdapter(android.widget.ListAdapter?);
+    method public void setListShown(boolean);
+    method public void setListShownNoAnimation(boolean);
+    method public void setSelection(int);
+  }
+
+}
+
diff --git a/fragment/ktx/api/1.1.0-alpha02.txt b/fragment/ktx/api/1.1.0-alpha02.txt
new file mode 100644
index 0000000..a94ec17
--- /dev/null
+++ b/fragment/ktx/api/1.1.0-alpha02.txt
@@ -0,0 +1,23 @@
+// Signature format: 2.0
+package androidx.fragment.app {
+
+  public final class FragmentManagerKt {
+    ctor public FragmentManagerKt();
+    method public static void commit(androidx.fragment.app.FragmentManager, boolean allowStateLoss = false, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
+    method public static void commitNow(androidx.fragment.app.FragmentManager, boolean allowStateLoss = false, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
+    method @Deprecated public static void transaction(androidx.fragment.app.FragmentManager, boolean now = false, boolean allowStateLoss = false, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
+  }
+
+  public final class FragmentViewModelLazy<VM extends androidx.lifecycle.ViewModel> implements kotlin.Lazy<VM> {
+    ctor public FragmentViewModelLazy(androidx.fragment.app.Fragment fragment, kotlin.reflect.KClass<VM> viewModelClass, androidx.lifecycle.ViewModelProvider.Factory? factory);
+    method public VM getValue();
+    method public boolean isInitialized();
+    property public VM value;
+  }
+
+  public final class FragmentViewModelLazyKt {
+    ctor public FragmentViewModelLazyKt();
+  }
+
+}
+
diff --git a/fragment/testing/api/1.1.0-alpha02.txt b/fragment/testing/api/1.1.0-alpha02.txt
new file mode 100644
index 0000000..2ad9886
--- /dev/null
+++ b/fragment/testing/api/1.1.0-alpha02.txt
@@ -0,0 +1,25 @@
+// Signature format: 2.0
+package androidx.fragment.app.testing {
+
+  public final class FragmentScenario<F extends androidx.fragment.app.Fragment> {
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F>);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F>, android.os.Bundle?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F>, android.os.Bundle?, androidx.fragment.app.FragmentFactory?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F>);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F>, android.os.Bundle?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F>, android.os.Bundle?, androidx.fragment.app.FragmentFactory?);
+    method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State);
+    method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F>);
+    method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
+  }
+
+  public static interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
+    method public void perform(F);
+  }
+
+  public final class FragmentScenarioKt {
+    ctor public FragmentScenarioKt();
+  }
+
+}
+
diff --git a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioKotlinTest.kt b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioKotlinTest.kt
index 9347abd..92b03ee 100644
--- a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioKotlinTest.kt
+++ b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioKotlinTest.kt
@@ -64,4 +64,34 @@
             assertThat(it.state).isEqualTo(State.RESUMED)
         }
     }
+
+    @Test
+    fun testlaunchInContainer_withInstantiate() {
+        var numberOfInstantiations = 0
+        val scenario = launchFragmentInContainer(null) {
+            numberOfInstantiations++
+            NoDefaultConstructorFragment("my constructor arg")
+        }
+        assertThat(numberOfInstantiations).isEqualTo(1)
+        scenario.onFragment {
+            assertThat(it.constructorArg).isEqualTo("my constructor arg")
+            assertThat(it.numberOfRecreations).isEqualTo(0)
+            assertThat(it.state).isEqualTo(State.RESUMED)
+            assertThat(it.isViewAttachedToWindow).isTrue()
+        }
+    }
+
+    @Test
+    fun testlaunch_withInstantiate() {
+        var numberOfInstantiations = 0
+        val scenario = launchFragment(null) {
+            numberOfInstantiations++
+            NoDefaultConstructorFragment("my constructor arg")
+        }
+        assertThat(numberOfInstantiations).isEqualTo(1)
+        scenario.onFragment {
+            assertThat(it.constructorArg).isEqualTo("my constructor arg")
+            assertThat(it.state).isEqualTo(State.RESUMED)
+        }
+    }
 }
diff --git a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.java b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.java
index 486c7f4..4282854 100644
--- a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.java
+++ b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.java
@@ -21,6 +21,9 @@
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentFactory;
 import androidx.lifecycle.Lifecycle.State;
 import androidx.test.filters.LargeTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -112,6 +115,33 @@
 
     @Test
     @LargeTest
+    public void launchFragmentWithFragmentFactory() {
+        FragmentFactory factory = new FragmentFactory() {
+            @NonNull
+            @Override
+            public Fragment instantiate(@NonNull ClassLoader classLoader, @NonNull String className,
+                    @Nullable Bundle args) {
+                if (!NoDefaultConstructorFragment.class.getName().equals(className)) {
+                    return super.instantiate(classLoader, className, args);
+                } else {
+                    return new NoDefaultConstructorFragment("my constructor arg");
+                }
+            }
+        };
+        FragmentScenario<NoDefaultConstructorFragment> scenario =
+                FragmentScenario.launch(
+                        NoDefaultConstructorFragment.class, /*fragmentArgs=*/null, factory);
+        scenario.onFragment(
+                new FragmentScenario.FragmentAction<NoDefaultConstructorFragment>() {
+                    @Override
+                    public void perform(@NonNull NoDefaultConstructorFragment fragment) {
+                        assertThat(fragment.getConstructorArg()).isEqualTo("my constructor arg");
+                    }
+                });
+    }
+
+    @Test
+    @LargeTest
     public void fromResumedToCreated() {
         FragmentScenario<StateRecordingFragment> scenario =
                 FragmentScenario.launch(StateRecordingFragment.class);
@@ -344,4 +374,32 @@
                     }
                 });
     }
+
+    @Test
+    @LargeTest
+    public void recreateFragmentWithFragmentFactory() {
+        FragmentFactory factory = new FragmentFactory() {
+            @NonNull
+            @Override
+            public Fragment instantiate(@NonNull ClassLoader classLoader, @NonNull String className,
+                    @Nullable Bundle args) {
+                if (!NoDefaultConstructorFragment.class.getName().equals(className)) {
+                    return super.instantiate(classLoader, className, args);
+                } else {
+                    return new NoDefaultConstructorFragment("my constructor arg");
+                }
+            }
+        };
+        FragmentScenario<NoDefaultConstructorFragment> scenario =
+                FragmentScenario.launch(
+                        NoDefaultConstructorFragment.class, /*fragmentArgs=*/null, factory);
+        scenario.recreate();
+        scenario.onFragment(
+                new FragmentScenario.FragmentAction<NoDefaultConstructorFragment>() {
+                    @Override
+                    public void perform(@NonNull NoDefaultConstructorFragment fragment) {
+                        assertThat(fragment.getConstructorArg()).isEqualTo("my constructor arg");
+                    }
+                });
+    }
 }
diff --git a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/NoDefaultConstructorFragment.java b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/NoDefaultConstructorFragment.java
new file mode 100644
index 0000000..10fa573
--- /dev/null
+++ b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/NoDefaultConstructorFragment.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.fragment.app.testing;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentFactory;
+
+/**
+ * A minimum example fragment which doesn't have default constructor. You have to use
+ * {@link FragmentFactory} to instantiate this fragment.
+ */
+public class NoDefaultConstructorFragment extends StateRecordingFragment {
+
+    @NonNull private final String mConstructorArg;
+
+    public NoDefaultConstructorFragment(@NonNull String arg) {
+        this.mConstructorArg = arg;
+    }
+
+    @NonNull
+    public String getConstructorArg() {
+        return mConstructorArg;
+    }
+}
diff --git a/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.java b/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.java
index 01760d75..0eccbbf 100644
--- a/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.java
+++ b/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.java
@@ -30,6 +30,8 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentFactory;
 import androidx.lifecycle.Lifecycle.State;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProvider;
 import androidx.test.core.app.ActivityScenario;
 
 /**
@@ -51,6 +53,7 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final Class<F> mFragmentClass;
     private final ActivityScenario<EmptyFragmentActivity> mActivityScenario;
+    @Nullable private final FragmentFactory mFragmentFactory;
 
     /**
      * An empty activity inheriting FragmentActivity. This Activity is used to host Fragment in
@@ -59,12 +62,58 @@
      * @hide
      */
     @RestrictTo(LIBRARY)
-    public static class EmptyFragmentActivity extends FragmentActivity {}
+    public static class EmptyFragmentActivity extends FragmentActivity {
+        @Override
+        protected void onCreate(@Nullable Bundle savedInstanceState) {
+            // Checks if we have a custom FragmentFactory and set it.
+            ViewModelProvider viewModelProvider = new ViewModelProvider(
+                    this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()));
+            FragmentFactory factory = viewModelProvider
+                    .get(FragmentFactoryHolderViewModel.class)
+                    .getFragmentFactory();
+            if (factory != null) {
+                getSupportFragmentManager().setFragmentFactory(factory);
+            }
+
+            // FragmentFactory needs to be set before calling the super.onCreate, otherwise the
+            // Activity crashes when it is recreating and there is a fragment which has no
+            // default constructor.
+            super.onCreate(savedInstanceState);
+        }
+    }
+
+    /**
+     * A view-model to hold a fragment factory.
+     *
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public static class FragmentFactoryHolderViewModel extends ViewModel {
+
+        @Nullable private FragmentFactory mFragmentFactory;
+
+        void setFragmentFactory(@Nullable FragmentFactory factory) {
+            mFragmentFactory = factory;
+        }
+
+        @Nullable
+        FragmentFactory getFragmentFactory() {
+            return mFragmentFactory;
+        }
+
+        @Override
+        protected void onCleared() {
+            super.onCleared();
+            mFragmentFactory = null;
+        }
+    }
 
     private FragmentScenario(
             @NonNull Class<F> fragmentClass,
+            @Nullable FragmentFactory fragmentFactory,
             @NonNull ActivityScenario<EmptyFragmentActivity> activityScenario) {
         this.mFragmentClass = fragmentClass;
+        this.mFragmentFactory = fragmentFactory;
         this.mActivityScenario = activityScenario;
     }
 
@@ -166,12 +215,20 @@
             @NonNull final Class<F> fragmentClass, final @Nullable Bundle fragmentArgs,
             @Nullable final FragmentFactory factory, final int containerViewId) {
         FragmentScenario<F> scenario = new FragmentScenario<>(
-                fragmentClass, ActivityScenario.launch(EmptyFragmentActivity.class));
+                fragmentClass, factory,
+                ActivityScenario.launch(EmptyFragmentActivity.class));
         scenario.mActivityScenario.onActivity(
                 new ActivityScenario.ActivityAction<EmptyFragmentActivity>() {
                     @Override
                     public void perform(EmptyFragmentActivity activity) {
                         if (factory != null) {
+                            ViewModelProvider viewModelProvider = new ViewModelProvider(
+                                    activity,
+                                    ViewModelProvider.AndroidViewModelFactory.getInstance(
+                                            activity.getApplication()));
+                            viewModelProvider
+                                    .get(FragmentFactoryHolderViewModel.class)
+                                    .setFragmentFactory(factory);
                             activity.getSupportFragmentManager().setFragmentFactory(factory);
                         }
                         Fragment fragment = activity.getSupportFragmentManager()
diff --git a/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt b/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
index c9aa0b3..9246386 100644
--- a/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
+++ b/fragment/testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
@@ -18,6 +18,7 @@
 
 import android.os.Bundle
 import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
 import androidx.fragment.app.FragmentFactory
 
 /**
@@ -35,6 +36,29 @@
 ) = FragmentScenario.launch(F::class.java, fragmentArgs, factory)
 
 /**
+ * Launches a Fragment with given arguments hosted by an empty [FragmentActivity] using
+ * [instantiate] to create the Fragment and waits for it to reach a resumed state.
+ *
+ * This method cannot be called from the main thread.
+ *
+ * @param fragmentArgs a bundle to passed into fragment
+ * @param instantiate method which will be used to instantiate the Fragment.
+ */
+inline fun <reified F : Fragment> launchFragment(
+    fragmentArgs: Bundle? = null,
+    crossinline instantiate: (args: Bundle?) -> F
+) = FragmentScenario.launch(F::class.java, fragmentArgs, object : FragmentFactory() {
+    override fun instantiate(
+        classLoader: ClassLoader,
+        className: String,
+        args: Bundle?
+    ) = when (className) {
+        F::class.java.name -> instantiate(args)
+        else -> super.instantiate(classLoader, className, args)
+    }
+})
+
+/**
  * Launches a Fragment in the Activity's root view container `android.R.id.content`, with
  * given arguments hosted by an empty [FragmentActivity] and waits for it to reach a
  * resumed state.
@@ -48,3 +72,30 @@
     fragmentArgs: Bundle? = null,
     factory: FragmentFactory? = null
 ) = FragmentScenario.launchInContainer(F::class.java, fragmentArgs, factory)
+
+/**
+ * Launches a Fragment in the Activity's root view container `android.R.id.content`, with
+ * given arguments hosted by an empty [FragmentActivity] using
+ * [instantiate] to create the Fragment and waits for it to reach a
+ * resumed state.
+ *
+ * This method cannot be called from the main thread.
+ *
+ * @param fragmentArgs a bundle to passed into fragment
+ * @param instantiate method which will be used to instantiate the Fragment. This is a
+ * simplification of the [FragmentFactory] interface for cases where only a single class
+ * needs a custom constructor called.
+ */
+inline fun <reified F : Fragment> launchFragmentInContainer(
+    fragmentArgs: Bundle? = null,
+    crossinline instantiate: (args: Bundle?) -> F
+) = FragmentScenario.launchInContainer(F::class.java, fragmentArgs, object : FragmentFactory() {
+    override fun instantiate(
+        classLoader: ClassLoader,
+        className: String,
+        args: Bundle?
+    ) = when (className) {
+        F::class.java.name -> instantiate(args)
+        else -> super.instantiate(classLoader, className, args)
+    }
+})
diff --git a/leanback-preference/api/1.0.0.txt b/leanback-preference/api/1.0.0.txt
index 5584204..75f7d49 100644
--- a/leanback-preference/api/1.0.0.txt
+++ b/leanback-preference/api/1.0.0.txt
@@ -1,61 +1,115 @@
+// Signature format: 2.0
 package androidx.leanback.preference {
 
-  public abstract class BaseLeanbackPreferenceFragment extends androidx.preference.PreferenceFragment {
-    ctor public BaseLeanbackPreferenceFragment();
+  @Deprecated public abstract class BaseLeanbackPreferenceFragment extends androidx.preference.PreferenceFragment {
+    ctor @Deprecated public BaseLeanbackPreferenceFragment();
+    method @Deprecated public androidx.recyclerview.widget.RecyclerView! onCreateRecyclerView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
   }
 
-  public class LeanbackListPreferenceDialogFragment extends androidx.leanback.preference.LeanbackPreferenceDialogFragment {
-    ctor public LeanbackListPreferenceDialogFragment();
-    method public static androidx.leanback.preference.LeanbackListPreferenceDialogFragment newInstanceMulti(java.lang.String);
-    method public static androidx.leanback.preference.LeanbackListPreferenceDialogFragment newInstanceSingle(java.lang.String);
-    method public androidx.recyclerview.widget.RecyclerView.Adapter onCreateAdapter();
+  public abstract class BaseLeanbackPreferenceFragmentCompat extends androidx.preference.PreferenceFragmentCompat {
+    ctor public BaseLeanbackPreferenceFragmentCompat();
   }
 
-  public class LeanbackListPreferenceDialogFragment.AdapterMulti extends androidx.recyclerview.widget.RecyclerView.Adapter implements androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
-    ctor public LeanbackListPreferenceDialogFragment.AdapterMulti(java.lang.CharSequence[], java.lang.CharSequence[], java.util.Set<java.lang.String>);
-    method public int getItemCount();
-    method public void onBindViewHolder(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
-    method public androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
-    method public void onItemClick(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+  public class LeanbackEditTextPreferenceDialogFragmentCompat extends androidx.leanback.preference.LeanbackPreferenceDialogFragmentCompat {
+    ctor public LeanbackEditTextPreferenceDialogFragmentCompat();
+    method public static androidx.leanback.preference.LeanbackEditTextPreferenceDialogFragmentCompat! newInstance(String!);
+    field public static final String EXTRA_IME_OPTIONS = "ime_option";
+    field public static final String EXTRA_INPUT_TYPE = "input_type";
   }
 
-  public class LeanbackListPreferenceDialogFragment.AdapterSingle extends androidx.recyclerview.widget.RecyclerView.Adapter implements androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
-    ctor public LeanbackListPreferenceDialogFragment.AdapterSingle(java.lang.CharSequence[], java.lang.CharSequence[], java.lang.CharSequence);
-    method public int getItemCount();
-    method public void onBindViewHolder(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
-    method public androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
-    method public void onItemClick(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+  @Deprecated public class LeanbackListPreferenceDialogFragment extends androidx.leanback.preference.LeanbackPreferenceDialogFragment {
+    ctor @Deprecated public LeanbackListPreferenceDialogFragment();
+    method @Deprecated public static androidx.leanback.preference.LeanbackListPreferenceDialogFragment! newInstanceMulti(String!);
+    method @Deprecated public static androidx.leanback.preference.LeanbackListPreferenceDialogFragment! newInstanceSingle(String!);
+    method @Deprecated public androidx.recyclerview.widget.RecyclerView.Adapter! onCreateAdapter();
+    method @Deprecated public android.view.View? onCreateView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
+    method @Deprecated public void onSaveInstanceState(android.os.Bundle!);
   }
 
-  public static class LeanbackListPreferenceDialogFragment.ViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
-    ctor public LeanbackListPreferenceDialogFragment.ViewHolder(android.view.View, androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener);
-    method public android.view.ViewGroup getContainer();
-    method public android.widget.TextView getTitleView();
-    method public android.widget.Checkable getWidgetView();
-    method public void onClick(android.view.View);
+  @Deprecated public class LeanbackListPreferenceDialogFragment.AdapterMulti extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder> implements androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+    ctor @Deprecated public LeanbackListPreferenceDialogFragment.AdapterMulti(CharSequence[]!, CharSequence[]!, java.util.Set<java.lang.String>!);
+    method @Deprecated public int getItemCount();
+    method @Deprecated public void onBindViewHolder(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder!, int);
+    method @Deprecated public androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder! onCreateViewHolder(android.view.ViewGroup!, int);
+    method @Deprecated public void onItemClick(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder!);
   }
 
-  public static abstract interface LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
-    method public abstract void onItemClick(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+  @Deprecated public class LeanbackListPreferenceDialogFragment.AdapterSingle extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder> implements androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+    ctor @Deprecated public LeanbackListPreferenceDialogFragment.AdapterSingle(CharSequence[]!, CharSequence[]!, CharSequence!);
+    method @Deprecated public int getItemCount();
+    method @Deprecated public void onBindViewHolder(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder!, int);
+    method @Deprecated public androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder! onCreateViewHolder(android.view.ViewGroup!, int);
+    method @Deprecated public void onItemClick(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder!);
   }
 
-  public class LeanbackPreferenceDialogFragment extends android.app.Fragment {
-    ctor public LeanbackPreferenceDialogFragment();
-    method public androidx.preference.DialogPreference getPreference();
-    field public static final java.lang.String ARG_KEY = "key";
+  @Deprecated public static class LeanbackListPreferenceDialogFragment.ViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
+    ctor @Deprecated public LeanbackListPreferenceDialogFragment.ViewHolder(android.view.View, androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener);
+    method @Deprecated public android.view.ViewGroup! getContainer();
+    method @Deprecated public android.widget.TextView! getTitleView();
+    method @Deprecated public android.widget.Checkable! getWidgetView();
+    method @Deprecated public void onClick(android.view.View!);
   }
 
-  public abstract class LeanbackPreferenceFragment extends androidx.leanback.preference.BaseLeanbackPreferenceFragment {
-    ctor public LeanbackPreferenceFragment();
-    method public void setTitle(java.lang.CharSequence);
+  @Deprecated public static interface LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+    method @Deprecated public void onItemClick(androidx.leanback.preference.LeanbackListPreferenceDialogFragment.ViewHolder!);
   }
 
-  public abstract class LeanbackSettingsFragment extends android.app.Fragment implements androidx.preference.PreferenceFragment.OnPreferenceDisplayDialogCallback androidx.preference.PreferenceFragment.OnPreferenceStartFragmentCallback androidx.preference.PreferenceFragment.OnPreferenceStartScreenCallback {
-    ctor public LeanbackSettingsFragment();
-    method public boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragment, androidx.preference.Preference);
+  public class LeanbackListPreferenceDialogFragmentCompat extends androidx.leanback.preference.LeanbackPreferenceDialogFragmentCompat {
+    ctor public LeanbackListPreferenceDialogFragmentCompat();
+    method public static androidx.leanback.preference.LeanbackListPreferenceDialogFragmentCompat! newInstanceMulti(String!);
+    method public static androidx.leanback.preference.LeanbackListPreferenceDialogFragmentCompat! newInstanceSingle(String!);
+  }
+
+  public static final class LeanbackListPreferenceDialogFragmentCompat.ViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
+    method public android.view.ViewGroup! getContainer();
+    method public android.widget.TextView! getTitleView();
+    method public android.widget.Checkable! getWidgetView();
+    method public void onClick(android.view.View!);
+  }
+
+  @Deprecated public class LeanbackPreferenceDialogFragment extends android.app.Fragment {
+    ctor @Deprecated public LeanbackPreferenceDialogFragment();
+    method @Deprecated public androidx.preference.DialogPreference! getPreference();
+    method @Deprecated public void onCreate(android.os.Bundle!);
+    field @Deprecated public static final String ARG_KEY = "key";
+  }
+
+  public class LeanbackPreferenceDialogFragmentCompat extends androidx.fragment.app.Fragment {
+    ctor public LeanbackPreferenceDialogFragmentCompat();
+    method public androidx.preference.DialogPreference! getPreference();
+    field public static final String ARG_KEY = "key";
+  }
+
+  @Deprecated public abstract class LeanbackPreferenceFragment extends androidx.leanback.preference.BaseLeanbackPreferenceFragment {
+    ctor @Deprecated public LeanbackPreferenceFragment();
+    method @Deprecated public android.view.View! onCreateView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
+    method @Deprecated public void onViewCreated(android.view.View!, android.os.Bundle!);
+    method @Deprecated public void setTitle(CharSequence!);
+  }
+
+  public abstract class LeanbackPreferenceFragmentCompat extends androidx.leanback.preference.BaseLeanbackPreferenceFragmentCompat {
+    ctor public LeanbackPreferenceFragmentCompat();
+    method public void setTitle(CharSequence!);
+  }
+
+  @Deprecated public abstract class LeanbackSettingsFragment extends android.app.Fragment implements androidx.preference.PreferenceFragment.OnPreferenceDisplayDialogCallback androidx.preference.PreferenceFragment.OnPreferenceStartFragmentCallback androidx.preference.PreferenceFragment.OnPreferenceStartScreenCallback {
+    ctor @Deprecated public LeanbackSettingsFragment();
+    method @Deprecated public android.view.View! onCreateView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
+    method @Deprecated public void onPause();
+    method @Deprecated public boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragment, androidx.preference.Preference!);
+    method @Deprecated public abstract void onPreferenceStartInitialScreen();
+    method @Deprecated public void onResume();
+    method @Deprecated public void onViewCreated(android.view.View!, android.os.Bundle!);
+    method @Deprecated public void startImmersiveFragment(android.app.Fragment);
+    method @Deprecated public void startPreferenceFragment(android.app.Fragment);
+  }
+
+  public abstract class LeanbackSettingsFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback androidx.preference.PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
+    ctor public LeanbackSettingsFragmentCompat();
+    method public boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragmentCompat, androidx.preference.Preference!);
     method public abstract void onPreferenceStartInitialScreen();
-    method public void startImmersiveFragment(android.app.Fragment);
-    method public void startPreferenceFragment(android.app.Fragment);
+    method public void startImmersiveFragment(androidx.fragment.app.Fragment);
+    method public void startPreferenceFragment(androidx.fragment.app.Fragment);
   }
 
 }
diff --git a/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java b/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java
index 0a406ae..c0b4407 100644
--- a/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java
+++ b/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java
@@ -43,8 +43,27 @@
     private static Map<Class, List<Constructor<? extends GeneratedAdapter>>> sClassToAdapters =
             new HashMap<>();
 
+    // Left for binary compatibility when lifecycle-common goes up 2.1 as transitive dep
+    // but lifecycle-runtime stays 2.0
+
+    /**
+     * @deprecated Left for compatibility with lifecycle-runtime:2.0
+     */
+    @Deprecated
     @NonNull
-    static LifecycleEventObserver getCallback(Object object) {
+    static GenericLifecycleObserver getCallback(final Object object) {
+        final LifecycleEventObserver observer = lifecycleEventObserver(object);
+        return new GenericLifecycleObserver() {
+            @Override
+            public void onStateChanged(@NonNull LifecycleOwner source,
+                    @NonNull Lifecycle.Event event) {
+                observer.onStateChanged(source, event);
+            }
+        };
+    }
+
+    @NonNull
+    static LifecycleEventObserver lifecycleEventObserver(Object object) {
         boolean isLifecycleEventObserver = object instanceof LifecycleEventObserver;
         boolean isFullLifecycleObserver = object instanceof FullLifecycleObserver;
         if (isLifecycleEventObserver && isFullLifecycleObserver) {
diff --git a/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java b/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java
index d259df5..a137f43 100644
--- a/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java
+++ b/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java
@@ -17,6 +17,7 @@
 package androidx.lifecycle;
 
 import static androidx.lifecycle.Lifecycle.Event.ON_ANY;
+import static androidx.lifecycle.Lifecycling.lifecycleEventObserver;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
@@ -41,19 +42,19 @@
 
     @Test
     public void testDerivedWithNewLfMethodsNoGeneratedAdapter() {
-        LifecycleEventObserver callback = Lifecycling.getCallback(new DerivedWithNewMethods());
+        LifecycleEventObserver callback = lifecycleEventObserver(new DerivedWithNewMethods());
         assertThat(callback, instanceOf(ReflectiveGenericLifecycleObserver.class));
     }
 
     @Test
     public void testDerivedWithNoNewLfMethodsNoGeneratedAdapter() {
-        LifecycleEventObserver callback = Lifecycling.getCallback(new DerivedWithNoNewMethods());
+        LifecycleEventObserver callback = lifecycleEventObserver(new DerivedWithNoNewMethods());
         assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
     }
 
     @Test
     public void testDerivedWithOverridenMethodsNoGeneratedAdapter() {
-        LifecycleEventObserver callback = Lifecycling.getCallback(
+        LifecycleEventObserver callback = lifecycleEventObserver(
                 new DerivedWithOverridenMethodsWithLfAnnotation());
         // that is not effective but...
         assertThat(callback, instanceOf(ReflectiveGenericLifecycleObserver.class));
@@ -61,27 +62,27 @@
 
     @Test
     public void testInterfaceImpl1NoGeneratedAdapter() {
-        LifecycleEventObserver callback = Lifecycling.getCallback(new InterfaceImpl1());
+        LifecycleEventObserver callback = lifecycleEventObserver(new InterfaceImpl1());
         assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
     }
 
     @Test
     public void testInterfaceImpl2NoGeneratedAdapter() {
-        LifecycleEventObserver callback = Lifecycling.getCallback(new InterfaceImpl2());
+        LifecycleEventObserver callback = lifecycleEventObserver(new InterfaceImpl2());
         assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
     }
 
     @Test
     public void testInterfaceImpl3NoGeneratedAdapter() {
-        LifecycleEventObserver callback = Lifecycling.getCallback(new InterfaceImpl3());
+        LifecycleEventObserver callback = lifecycleEventObserver(new InterfaceImpl3());
         assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
     }
 
     @Test
     public void testDerivedSequence() {
-        LifecycleEventObserver callback2 = Lifecycling.getCallback(new DerivedSequence2());
+        LifecycleEventObserver callback2 = lifecycleEventObserver(new DerivedSequence2());
         assertThat(callback2, instanceOf(ReflectiveGenericLifecycleObserver.class));
-        LifecycleEventObserver callback1 = Lifecycling.getCallback(new DerivedSequence1());
+        LifecycleEventObserver callback1 = lifecycleEventObserver(new DerivedSequence1());
         assertThat(callback1, instanceOf(SingleGeneratedAdapterObserver.class));
     }
 
@@ -93,6 +94,18 @@
             public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
             }
         };
+        LifecycleEventObserver observer = lifecycleEventObserver(genericLifecycleObserver);
+        assertThat(observer, is(observer));
+    }
+
+    // MUST BE HERE TILL Lifecycle 3.0.0 release for back-compatibility with other modules
+    @Test
+    public void testDeprecatedLifecyclingCallback() {
+        GenericLifecycleObserver genericLifecycleObserver = new GenericLifecycleObserver() {
+            @Override
+            public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+            }
+        };
         LifecycleEventObserver observer = Lifecycling.getCallback(genericLifecycleObserver);
         assertThat(observer, is(observer));
     }
@@ -137,7 +150,7 @@
             }
         }
 
-        LifecycleEventObserver callback = Lifecycling.getCallback(
+        LifecycleEventObserver callback = lifecycleEventObserver(
                 new AnnotatedFullLifecycleObserver());
         // check that neither of these calls fail
         callback.onStateChanged(new DefaultLifecycleOwner(), Lifecycle.Event.ON_CREATE);
@@ -163,7 +176,7 @@
             }
         }
 
-        LifecycleEventObserver callback = Lifecycling.getCallback(
+        LifecycleEventObserver callback = lifecycleEventObserver(
                 new AnnotatedLifecycleEventObserver());
         // check that neither of these calls fail
         callback.onStateChanged(new DefaultLifecycleOwner(), Lifecycle.Event.ON_CREATE);
diff --git a/lifecycle/integration-tests/testapp/src/test/java/androidx/lifecycle/GeneratedAdaptersTest.java b/lifecycle/integration-tests/testapp/src/test/java/androidx/lifecycle/GeneratedAdaptersTest.java
index bfbfbb38..0e3c193 100644
--- a/lifecycle/integration-tests/testapp/src/test/java/androidx/lifecycle/GeneratedAdaptersTest.java
+++ b/lifecycle/integration-tests/testapp/src/test/java/androidx/lifecycle/GeneratedAdaptersTest.java
@@ -18,6 +18,7 @@
 
 import static androidx.lifecycle.Lifecycle.Event.ON_ANY;
 import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
+import static androidx.lifecycle.Lifecycling.lifecycleEventObserver;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
@@ -66,7 +67,7 @@
     @Test
     public void testSimpleSingleGeneratedAdapter() {
         List<String>  actual = new ArrayList<>();
-        LifecycleEventObserver callback = Lifecycling.getCallback(new SimpleObserver(actual));
+        LifecycleEventObserver callback = lifecycleEventObserver(new SimpleObserver(actual));
         callback.onStateChanged(mOwner, Lifecycle.Event.ON_CREATE);
         assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
         assertThat(actual, is(singletonList("onCreate")));
@@ -93,7 +94,7 @@
     @Test
     public void testOnAny() {
         List<String>  actual = new ArrayList<>();
-        LifecycleEventObserver callback = Lifecycling.getCallback(new TestObserver(actual));
+        LifecycleEventObserver callback = lifecycleEventObserver(new TestObserver(actual));
         callback.onStateChanged(mOwner, Lifecycle.Event.ON_CREATE);
         assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
         assertThat(actual, is(asList("onCreate", "onAny")));
@@ -142,7 +143,7 @@
     @Test
     public void testClashingInterfaces() {
         List<String>  actual = new ArrayList<>();
-        LifecycleEventObserver callback = Lifecycling.getCallback(new Impl1(actual));
+        LifecycleEventObserver callback = lifecycleEventObserver(new Impl1(actual));
         callback.onStateChanged(mOwner, Lifecycle.Event.ON_PAUSE);
         assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
         assertThat(actual, is(asList("onPause_0", "onPause_1")));
@@ -203,7 +204,7 @@
     @Test
     public void testClashingClassAndInterface() {
         List<String>  actual = new ArrayList<>();
-        LifecycleEventObserver callback = Lifecycling.getCallback(new Derived(actual));
+        LifecycleEventObserver callback = lifecycleEventObserver(new Derived(actual));
         callback.onStateChanged(mOwner, Lifecycle.Event.ON_RESUME);
         assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
         assertThat(actual, is(asList("onResume", "onAny_0", "onAny_1", "onAny_2")));
diff --git a/lifecycle/livedata-core/api/2.0.0.txt b/lifecycle/livedata-core/api/2.0.0.txt
index 5cd4a08..82a6312 100644
--- a/lifecycle/livedata-core/api/2.0.0.txt
+++ b/lifecycle/livedata-core/api/2.0.0.txt
@@ -1,28 +1,29 @@
+// Signature format: 2.0
 package androidx.lifecycle {
 
   public abstract class LiveData<T> {
     ctor public LiveData();
-    method public T getValue();
+    method public T? getValue();
     method public boolean hasActiveObservers();
     method public boolean hasObservers();
-    method public void observe(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Observer<? super T>);
-    method public void observeForever(androidx.lifecycle.Observer<? super T>);
+    method @MainThread public void observe(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Observer<? super T>);
+    method @MainThread public void observeForever(androidx.lifecycle.Observer<? super T>);
     method protected void onActive();
     method protected void onInactive();
-    method protected void postValue(T);
-    method public void removeObserver(androidx.lifecycle.Observer<? super T>);
-    method public void removeObservers(androidx.lifecycle.LifecycleOwner);
-    method protected void setValue(T);
+    method protected void postValue(T!);
+    method @MainThread public void removeObserver(androidx.lifecycle.Observer<? super T>);
+    method @MainThread public void removeObservers(androidx.lifecycle.LifecycleOwner);
+    method @MainThread protected void setValue(T!);
   }
 
-  public class MutableLiveData<T> extends androidx.lifecycle.LiveData {
+  public class MutableLiveData<T> extends androidx.lifecycle.LiveData<T> {
     ctor public MutableLiveData();
-    method public void postValue(T);
-    method public void setValue(T);
+    method public void postValue(T!);
+    method public void setValue(T!);
   }
 
-  public abstract interface Observer<T> {
-    method public abstract void onChanged(T);
+  public interface Observer<T> {
+    method public void onChanged(T!);
   }
 
 }
diff --git a/lifecycle/runtime/src/main/java/androidx/lifecycle/LifecycleRegistry.java b/lifecycle/runtime/src/main/java/androidx/lifecycle/LifecycleRegistry.java
index bffe5eb..c286c69 100644
--- a/lifecycle/runtime/src/main/java/androidx/lifecycle/LifecycleRegistry.java
+++ b/lifecycle/runtime/src/main/java/androidx/lifecycle/LifecycleRegistry.java
@@ -345,7 +345,7 @@
         LifecycleEventObserver mLifecycleObserver;
 
         ObserverWithState(LifecycleObserver observer, State initialState) {
-            mLifecycleObserver = Lifecycling.getCallback(observer);
+            mLifecycleObserver = Lifecycling.lifecycleEventObserver(observer);
             mState = initialState;
         }
 
diff --git a/loader/build.gradle b/loader/build.gradle
index c927d80..8674f82 100644
--- a/loader/build.gradle
+++ b/loader/build.gradle
@@ -7,8 +7,8 @@
 }
 
 dependencies {
-    api(project(":annotation"))
-    api(project(":core"))
+    api("androidx.annotation:annotation:1.0.0")
+    api("androidx.core:core:1.0.0")
     api(ARCH_LIFECYCLE_LIVEDATA_CORE, libs.exclude_annotations_transitive)
     api(ARCH_LIFECYCLE_VIEWMODEL, libs.exclude_annotations_transitive)
 
diff --git a/localbroadcastmanager/api/1.1.0-alpha01.txt b/localbroadcastmanager/api/1.1.0-alpha01.txt
new file mode 100644
index 0000000..3e3571d
--- /dev/null
+++ b/localbroadcastmanager/api/1.1.0-alpha01.txt
@@ -0,0 +1,13 @@
+// Signature format: 2.0
+package androidx.localbroadcastmanager.content {
+
+  @Deprecated public final class LocalBroadcastManager {
+    method @Deprecated public static androidx.localbroadcastmanager.content.LocalBroadcastManager getInstance(android.content.Context);
+    method @Deprecated public void registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+    method @Deprecated public boolean sendBroadcast(android.content.Intent);
+    method @Deprecated public void sendBroadcastSync(android.content.Intent);
+    method @Deprecated public void unregisterReceiver(android.content.BroadcastReceiver);
+  }
+
+}
+
diff --git a/localbroadcastmanager/api/current.txt b/localbroadcastmanager/api/current.txt
index 8513cd9..3e3571d 100644
--- a/localbroadcastmanager/api/current.txt
+++ b/localbroadcastmanager/api/current.txt
@@ -1,12 +1,12 @@
 // Signature format: 2.0
 package androidx.localbroadcastmanager.content {
 
-  public final class LocalBroadcastManager {
-    method public static androidx.localbroadcastmanager.content.LocalBroadcastManager getInstance(android.content.Context);
-    method public void registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
-    method public boolean sendBroadcast(android.content.Intent);
-    method public void sendBroadcastSync(android.content.Intent);
-    method public void unregisterReceiver(android.content.BroadcastReceiver);
+  @Deprecated public final class LocalBroadcastManager {
+    method @Deprecated public static androidx.localbroadcastmanager.content.LocalBroadcastManager getInstance(android.content.Context);
+    method @Deprecated public void registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+    method @Deprecated public boolean sendBroadcast(android.content.Intent);
+    method @Deprecated public void sendBroadcastSync(android.content.Intent);
+    method @Deprecated public void unregisterReceiver(android.content.BroadcastReceiver);
   }
 
 }
diff --git a/localbroadcastmanager/src/main/java/androidx/localbroadcastmanager/content/LocalBroadcastManager.java b/localbroadcastmanager/src/main/java/androidx/localbroadcastmanager/content/LocalBroadcastManager.java
index 12397e1..04f2f7f 100644
--- a/localbroadcastmanager/src/main/java/androidx/localbroadcastmanager/content/LocalBroadcastManager.java
+++ b/localbroadcastmanager/src/main/java/androidx/localbroadcastmanager/content/LocalBroadcastManager.java
@@ -44,7 +44,13 @@
  * <li> It is more efficient than sending a global broadcast through the
  * system.
  * </ul>
+ *
+ * @deprecated LocalBroadcastManager is an application-wide event bus and embraces layer violations
+ * in your app: any component may listen events from any other. You can replace usage of
+ * {@code LocalBroadcastManager} with other implementation of observable pattern, depending on your
+ * usecase suitable options may be {@link androidx.lifecycle.LiveData} or reactive streams.
  */
+@Deprecated
 public final class LocalBroadcastManager {
     private static final class ReceiverRecord {
         final IntentFilter filter;
diff --git a/media-widget/api/1.0.0-alpha5.txt b/media-widget/api/1.0.0-alpha5.txt
index b803bef..944dacb 100644
--- a/media-widget/api/1.0.0-alpha5.txt
+++ b/media-widget/api/1.0.0-alpha5.txt
@@ -1,33 +1,33 @@
 // Signature format: 2.0
-package androidx.media.widget {
+package androidx.media2.widget {
 
-  @RequiresApi(21) public class MediaControlView2 extends android.view.ViewGroup {
-    ctor public MediaControlView2(android.content.Context);
-    ctor public MediaControlView2(android.content.Context, android.util.AttributeSet?);
-    ctor public MediaControlView2(android.content.Context, android.util.AttributeSet?, int);
+  @RequiresApi(21) public class MediaControlView extends android.view.ViewGroup {
+    ctor public MediaControlView(android.content.Context);
+    ctor public MediaControlView(android.content.Context, android.util.AttributeSet?);
+    ctor public MediaControlView(android.content.Context, android.util.AttributeSet?, int);
     method public void onMeasure(int, int);
     method public void requestPlayButtonFocus();
-    method public void setMediaSessionToken2(androidx.media2.SessionToken2);
-    method public void setOnFullScreenListener(androidx.media.widget.MediaControlView2.OnFullScreenListener);
+    method public void setOnFullScreenListener(androidx.media2.widget.MediaControlView.OnFullScreenListener);
+    method public void setSessionToken(androidx.media2.SessionToken);
   }
 
-  public static interface MediaControlView2.OnFullScreenListener {
+  public static interface MediaControlView.OnFullScreenListener {
     method public void onFullScreen(android.view.View, boolean);
   }
 
-  public class VideoView2 extends android.view.ViewGroup {
-    ctor public VideoView2(android.content.Context);
-    ctor public VideoView2(android.content.Context, android.util.AttributeSet?);
-    ctor public VideoView2(android.content.Context, android.util.AttributeSet?, int);
-    method public androidx.media.widget.MediaControlView2? getMediaControlView2();
-    method public androidx.media2.SessionToken2 getMediaSessionToken2();
+  public class VideoView extends android.view.ViewGroup {
+    ctor public VideoView(android.content.Context);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet?);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet?, int);
+    method public androidx.media2.widget.MediaControlView? getMediaControlView();
+    method public androidx.media2.SessionToken getSessionToken();
     method public int getViewType();
     method public void onAttachedToWindow();
     method public void onDetachedFromWindow();
     method public void onMeasure(int, int);
     method public void setAudioAttributes(androidx.media.AudioAttributesCompat);
-    method public void setMediaControlView2(androidx.media.widget.MediaControlView2, long);
-    method public void setMediaItem2(androidx.media2.MediaItem2);
+    method public void setMediaControlView(androidx.media2.widget.MediaControlView, long);
+    method public void setMediaItem(androidx.media2.MediaItem);
     method public void setViewType(int);
     field public static final int VIEW_TYPE_SURFACEVIEW = 0; // 0x0
     field public static final int VIEW_TYPE_TEXTUREVIEW = 1; // 0x1
diff --git a/media-widget/api/current.txt b/media-widget/api/current.txt
index b803bef..944dacb 100644
--- a/media-widget/api/current.txt
+++ b/media-widget/api/current.txt
@@ -1,33 +1,33 @@
 // Signature format: 2.0
-package androidx.media.widget {
+package androidx.media2.widget {
 
-  @RequiresApi(21) public class MediaControlView2 extends android.view.ViewGroup {
-    ctor public MediaControlView2(android.content.Context);
-    ctor public MediaControlView2(android.content.Context, android.util.AttributeSet?);
-    ctor public MediaControlView2(android.content.Context, android.util.AttributeSet?, int);
+  @RequiresApi(21) public class MediaControlView extends android.view.ViewGroup {
+    ctor public MediaControlView(android.content.Context);
+    ctor public MediaControlView(android.content.Context, android.util.AttributeSet?);
+    ctor public MediaControlView(android.content.Context, android.util.AttributeSet?, int);
     method public void onMeasure(int, int);
     method public void requestPlayButtonFocus();
-    method public void setMediaSessionToken2(androidx.media2.SessionToken2);
-    method public void setOnFullScreenListener(androidx.media.widget.MediaControlView2.OnFullScreenListener);
+    method public void setOnFullScreenListener(androidx.media2.widget.MediaControlView.OnFullScreenListener);
+    method public void setSessionToken(androidx.media2.SessionToken);
   }
 
-  public static interface MediaControlView2.OnFullScreenListener {
+  public static interface MediaControlView.OnFullScreenListener {
     method public void onFullScreen(android.view.View, boolean);
   }
 
-  public class VideoView2 extends android.view.ViewGroup {
-    ctor public VideoView2(android.content.Context);
-    ctor public VideoView2(android.content.Context, android.util.AttributeSet?);
-    ctor public VideoView2(android.content.Context, android.util.AttributeSet?, int);
-    method public androidx.media.widget.MediaControlView2? getMediaControlView2();
-    method public androidx.media2.SessionToken2 getMediaSessionToken2();
+  public class VideoView extends android.view.ViewGroup {
+    ctor public VideoView(android.content.Context);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet?);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet?, int);
+    method public androidx.media2.widget.MediaControlView? getMediaControlView();
+    method public androidx.media2.SessionToken getSessionToken();
     method public int getViewType();
     method public void onAttachedToWindow();
     method public void onDetachedFromWindow();
     method public void onMeasure(int, int);
     method public void setAudioAttributes(androidx.media.AudioAttributesCompat);
-    method public void setMediaControlView2(androidx.media.widget.MediaControlView2, long);
-    method public void setMediaItem2(androidx.media2.MediaItem2);
+    method public void setMediaControlView(androidx.media2.widget.MediaControlView, long);
+    method public void setMediaItem(androidx.media2.MediaItem);
     method public void setViewType(int);
     field public static final int VIEW_TYPE_SURFACEVIEW = 0; // 0x0
     field public static final int VIEW_TYPE_TEXTUREVIEW = 1; // 0x1
diff --git a/media-widget/src/androidTest/AndroidManifest.xml b/media-widget/src/androidTest/AndroidManifest.xml
index 2769a7d..a0a0914 100644
--- a/media-widget/src/androidTest/AndroidManifest.xml
+++ b/media-widget/src/androidTest/AndroidManifest.xml
@@ -15,24 +15,24 @@
   limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.media.widget.test">
+    package="androidx.media2.widget.test">
     <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
 
     <application>
-        <activity android:name="androidx.media.widget.VideoView2TestActivity"
+        <activity android:name="androidx.media2.widget.VideoViewTestActivity"
             android:theme="@style/Theme.AppCompat"
             android:configChanges="keyboardHidden|orientation|screenSize"
-            android:label="VideoView2TestActivity">
+            android:label="VideoViewTestActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
             </intent-filter>
         </activity>
 
-        <activity android:name="androidx.media.widget.MediaControlView2TestActivity"
+        <activity android:name="androidx.media2.widget.MediaControlViewTestActivity"
                   android:theme="@style/Theme.AppCompat"
                   android:configChanges="keyboardHidden|orientation|screenSize"
-                  android:label="MediaControlView2TestActivity">
+                  android:label="MediaControlViewTestActivity">
             <intent-filter>
                 <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
             </intent-filter>
diff --git a/media-widget/src/androidTest/java/androidx/media/widget/MediaControlView2TestActivity.java b/media-widget/src/androidTest/java/androidx/media/widget/MediaControlView2TestActivity.java
deleted file mode 100644
index a9406e0..0000000
--- a/media-widget/src/androidTest/java/androidx/media/widget/MediaControlView2TestActivity.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media.widget;
-
-import android.os.Bundle;
-
-import androidx.fragment.app.FragmentActivity;
-import androidx.media.widget.test.R;
-
-/**
- * A minimal application for {@link MediaControlView2Test}.
- */
-public class MediaControlView2TestActivity extends FragmentActivity {
-    /**
-     * Called with the activity is first created.
-     */
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.mediacontrolview2test_layout);
-    }
-}
diff --git a/media-widget/src/androidTest/java/androidx/media/widget/MediaControlView2Test.java b/media-widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTest.java
similarity index 78%
rename from media-widget/src/androidTest/java/androidx/media/widget/MediaControlView2Test.java
rename to media-widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTest.java
index 2e29e89..4948681 100644
--- a/media-widget/src/androidTest/java/androidx/media/widget/MediaControlView2Test.java
+++ b/media-widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import static android.content.Context.KEYGUARD_SERVICE;
 
@@ -39,13 +39,13 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.content.ContextCompat;
-import androidx.media.widget.test.R;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.UriMediaItem2;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaController;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.SessionPlayer;
+import androidx.media2.UriMediaItem;
+import androidx.media2.widget.test.R;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.LargeTest;
@@ -66,15 +66,15 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Test {@link MediaControlView2}.
+ * Test {@link MediaControlView}.
  *
  * TODO: Lower minSdkVersion to Kitkat.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
 @RunWith(AndroidJUnit4.class)
 @LargeTest
-public class MediaControlView2Test {
-    private static final String TAG = "MediaControlView2Test";
+public class MediaControlViewTest {
+    private static final String TAG = "MediaControlViewTest";
     // Expected success time
     private static final int WAIT_TIME_MS = 1000;
     private static final int HTTPS_WAIT_TIME_MS = 5000;
@@ -86,18 +86,18 @@
     private Instrumentation mInstrumentation;
 
     private Activity mActivity;
-    private VideoView2 mVideoView;
+    private VideoView mVideoView;
     private Uri mFileSchemeUri;
     private Uri mHttpsSchemeUri;
     private Uri mHttpSchemeUri;
-    private MediaItem2 mFileSchemeMediaItem;
-    private MediaItem2 mHttpsSchemeMediaItem;
-    private MediaItem2 mHttpSchemeMediaItem;
-    private List<MediaController2> mControllers = new ArrayList<>();
+    private MediaItem mFileSchemeMediaItem;
+    private MediaItem mHttpsSchemeMediaItem;
+    private MediaItem mHttpSchemeMediaItem;
+    private List<MediaController> mControllers = new ArrayList<>();
 
     @Rule
-    public ActivityTestRule<MediaControlView2TestActivity> mActivityRule =
-            new ActivityTestRule<>(MediaControlView2TestActivity.class);
+    public ActivityTestRule<MediaControlViewTestActivity> mActivityRule =
+            new ActivityTestRule<>(MediaControlViewTestActivity.class);
 
     @Before
     public void setup() throws Throwable {
@@ -131,9 +131,9 @@
     @UiThreadTest
     @Test
     public void testConstructor() {
-        new MediaControlView2(mActivity);
-        new MediaControlView2(mActivity, null);
-        new MediaControlView2(mActivity, null, 0);
+        new MediaControlView(mActivity);
+        new MediaControlView(mActivity, null);
+        new MediaControlView(mActivity, null, 0);
     }
 
     @Test
@@ -146,14 +146,14 @@
 
         final CountDownLatch latchForPausedState = new CountDownLatch(1);
         final CountDownLatch latchForPlayingState = new CountDownLatch(1);
-        final MediaController2 controller =
-                createController(new MediaController2.ControllerCallback() {
+        final MediaController controller =
+                createController(new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlayerStateChanged(@NonNull MediaController2 controller,
+                    public void onPlayerStateChanged(@NonNull MediaController controller,
                             int state) {
-                        if (state == SessionPlayer2.PLAYER_STATE_PAUSED) {
+                        if (state == SessionPlayer.PLAYER_STATE_PAUSED) {
                             latchForPausedState.countDown();
-                        } else if (state == SessionPlayer2.PLAYER_STATE_PLAYING) {
+                        } else if (state == SessionPlayer.PLAYER_STATE_PLAYING) {
                             latchForPlayingState.countDown();
                         }
                     }
@@ -161,7 +161,7 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mFileSchemeMediaItem);
+                mVideoView.setMediaItem(mFileSchemeMediaItem);
             }
         });
         assertTrue(latchForPausedState.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
@@ -179,10 +179,10 @@
 
         final CountDownLatch latchForPausedState = new CountDownLatch(1);
         final CountDownLatch latchForFfwd = new CountDownLatch(1);
-        final MediaController2 controller =
-                createController(new MediaController2.ControllerCallback() {
+        final MediaController controller =
+                createController(new MediaController.ControllerCallback() {
                     @Override
-                    public void onSeekCompleted(@NonNull MediaController2 controller,
+                    public void onSeekCompleted(@NonNull MediaController controller,
                             long position) {
                         if (position >= FFWD_MS) {
                             latchForFfwd.countDown();
@@ -190,9 +190,9 @@
                     }
 
                     @Override
-                    public void onPlayerStateChanged(@NonNull MediaController2 controller,
+                    public void onPlayerStateChanged(@NonNull MediaController controller,
                             int state) {
-                        if (state == SessionPlayer2.PLAYER_STATE_PAUSED) {
+                        if (state == SessionPlayer.PLAYER_STATE_PAUSED) {
                             latchForPausedState.countDown();
                         }
                     }
@@ -200,7 +200,7 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mFileSchemeMediaItem);
+                mVideoView.setMediaItem(mFileSchemeMediaItem);
             }
         });
         assertTrue(latchForPausedState.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
@@ -218,20 +218,20 @@
 
         final CountDownLatch latchForFfwd = new CountDownLatch(1);
         final CountDownLatch latchForRew = new CountDownLatch(1);
-        final MediaController2 controller =
-                createController(new MediaController2.ControllerCallback() {
+        final MediaController controller =
+                createController(new MediaController.ControllerCallback() {
                     long mExpectedPosition;
                     final long mDelta = 1000L;
                     @Override
-                    public void onPlayerStateChanged(@NonNull MediaController2 controller,
+                    public void onPlayerStateChanged(@NonNull MediaController controller,
                             int state) {
-                        if (state == SessionPlayer2.PLAYER_STATE_PAUSED) {
+                        if (state == SessionPlayer.PLAYER_STATE_PAUSED) {
                             mExpectedPosition = FFWD_MS;
                             controller.seekTo(mExpectedPosition);
                         }
                     }
                     @Override
-                    public void onSeekCompleted(@NonNull MediaController2 controller,
+                    public void onSeekCompleted(@NonNull MediaController controller,
                             long position) {
                         assertTrue(equalsSeekPosition(mExpectedPosition, position, mDelta));
                         if (mExpectedPosition == FFWD_MS) {
@@ -249,7 +249,7 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mFileSchemeMediaItem);
+                mVideoView.setMediaItem(mFileSchemeMediaItem);
             }
         });
         assertTrue(latchForFfwd.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
@@ -267,14 +267,14 @@
 
         final CountDownLatch latchForPausedState = new CountDownLatch(1);
         final CountDownLatch latchForPlayingState = new CountDownLatch(1);
-        final MediaController2 controller =
-                createController(new MediaController2.ControllerCallback() {
+        final MediaController controller =
+                createController(new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlayerStateChanged(@NonNull MediaController2 controller,
+                    public void onPlayerStateChanged(@NonNull MediaController controller,
                             int state) {
-                        if (state == SessionPlayer2.PLAYER_STATE_PAUSED) {
+                        if (state == SessionPlayer.PLAYER_STATE_PAUSED) {
                             latchForPausedState.countDown();
-                        } else if (state == SessionPlayer2.PLAYER_STATE_PLAYING) {
+                        } else if (state == SessionPlayer.PLAYER_STATE_PLAYING) {
                             latchForPlayingState.countDown();
                         }
                     }
@@ -282,7 +282,7 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mHttpsSchemeMediaItem);
+                mVideoView.setMediaItem(mHttpsSchemeMediaItem);
             }
         });
         assertTrue(latchForPausedState.await(HTTPS_WAIT_TIME_MS, TimeUnit.MILLISECONDS));
@@ -301,22 +301,22 @@
         final long duration = 49056L;
         final String title = "BigBuckBunny";
         final CountDownLatch latch = new CountDownLatch(2);
-        final MediaController2 controller =
-                createController(new MediaController2.ControllerCallback() {
+        final MediaController controller =
+                createController(new MediaController.ControllerCallback() {
                     @Override
-                    public void onCurrentMediaItemChanged(@NonNull MediaController2 controller,
-                            @Nullable MediaItem2 item) {
+                    public void onCurrentMediaItemChanged(@NonNull MediaController controller,
+                            @Nullable MediaItem item) {
                         if (item != null) {
-                            MediaMetadata2 metadata = item.getMetadata();
+                            MediaMetadata metadata = item.getMetadata();
                             if (metadata != null) {
-                                if (metadata.containsKey(MediaMetadata2.METADATA_KEY_TITLE)) {
+                                if (metadata.containsKey(MediaMetadata.METADATA_KEY_TITLE)) {
                                     assertEquals(title, metadata.getString(
-                                            MediaMetadata2.METADATA_KEY_TITLE));
+                                            MediaMetadata.METADATA_KEY_TITLE));
                                     latch.countDown();
                                 }
-                                if (metadata.containsKey(MediaMetadata2.METADATA_KEY_DURATION)) {
+                                if (metadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
                                     assertEquals(duration, metadata.getLong(
-                                            MediaMetadata2.METADATA_KEY_DURATION));
+                                            MediaMetadata.METADATA_KEY_DURATION));
                                     latch.countDown();
                                 }
                             }
@@ -326,7 +326,7 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mFileSchemeMediaItem);
+                mVideoView.setMediaItem(mFileSchemeMediaItem);
             }
         });
         assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
@@ -347,32 +347,32 @@
         final long duration = 4206L;
         final String title = "Chimey Phone";
         final String artist = "Android";
-        final MediaItem2 uriMediaItem = createTestMediaItem2(uri);
-        final MediaItem2 fileMediaItem = new FileMediaItem2.Builder(afd.getFileDescriptor(),
+        final MediaItem uriMediaItem = createTestMediaItem2(uri);
+        final MediaItem fileMediaItem = new FileMediaItem.Builder(afd.getFileDescriptor(),
                 afd.getStartOffset(), afd.getLength()).build();
         final CountDownLatch latchForUri = new CountDownLatch(3);
         final CountDownLatch latchForFile = new CountDownLatch(3);
-        final MediaController2 controller =
-                createController(new MediaController2.ControllerCallback() {
+        final MediaController controller =
+                createController(new MediaController.ControllerCallback() {
                     @Override
-                    public void onCurrentMediaItemChanged(@NonNull MediaController2 controller,
-                            @Nullable MediaItem2 item) {
+                    public void onCurrentMediaItemChanged(@NonNull MediaController controller,
+                            @Nullable MediaItem item) {
                         if (item != null) {
-                            MediaMetadata2 metadata = item.getMetadata();
+                            MediaMetadata metadata = item.getMetadata();
                             if (metadata != null) {
-                                if (metadata.containsKey(MediaMetadata2.METADATA_KEY_TITLE)) {
+                                if (metadata.containsKey(MediaMetadata.METADATA_KEY_TITLE)) {
                                     assertEquals(title, metadata.getString(
-                                            MediaMetadata2.METADATA_KEY_TITLE));
+                                            MediaMetadata.METADATA_KEY_TITLE));
                                     countDown();
                                 }
-                                if (metadata.containsKey(MediaMetadata2.METADATA_KEY_ARTIST)) {
+                                if (metadata.containsKey(MediaMetadata.METADATA_KEY_ARTIST)) {
                                     assertEquals(artist, metadata.getString(
-                                            MediaMetadata2.METADATA_KEY_ARTIST));
+                                            MediaMetadata.METADATA_KEY_ARTIST));
                                     countDown();
                                 }
-                                if (metadata.containsKey(MediaMetadata2.METADATA_KEY_DURATION)) {
+                                if (metadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
                                     assertEquals(duration, metadata.getLong(
-                                            MediaMetadata2.METADATA_KEY_DURATION));
+                                            MediaMetadata.METADATA_KEY_DURATION));
                                     countDown();
                                 }
                             }
@@ -389,14 +389,14 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(uriMediaItem);
+                mVideoView.setMediaItem(uriMediaItem);
             }
         });
         assertTrue(latchForUri.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(fileMediaItem);
+                mVideoView.setMediaItem(fileMediaItem);
             }
         });
         assertTrue(latchForFile.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
@@ -441,8 +441,8 @@
         }
     }
 
-    private MediaItem2 createTestMediaItem2(Uri uri) {
-        return new UriMediaItem2.Builder(mVideoView.getContext(), uri).build();
+    private MediaItem createTestMediaItem2(Uri uri) {
+        return new UriMediaItem.Builder(mVideoView.getContext(), uri).build();
     }
 
     private boolean hasCodec(Uri uri) {
@@ -453,9 +453,9 @@
         return TestUtils.hasCodecsForFileDescriptor(afd);
     }
 
-    private MediaController2 createController(MediaController2.ControllerCallback callback) {
-        MediaController2 controller = new MediaController2(mVideoView.getContext(),
-                mVideoView.getMediaSessionToken2(), mMainHandlerExecutor, callback);
+    private MediaController createController(MediaController.ControllerCallback callback) {
+        MediaController controller = new MediaController(mVideoView.getContext(),
+                mVideoView.getSessionToken(), mMainHandlerExecutor, callback);
         mControllers.add(controller);
         return controller;
     }
diff --git a/media-widget/src/androidTest/java/androidx/media/widget/VideoView2TestActivity.java b/media-widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
similarity index 77%
copy from media-widget/src/androidTest/java/androidx/media/widget/VideoView2TestActivity.java
copy to media-widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
index 912d336..b908e61 100644
--- a/media-widget/src/androidTest/java/androidx/media/widget/VideoView2TestActivity.java
+++ b/media-widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
@@ -14,23 +14,23 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.os.Bundle;
 
 import androidx.fragment.app.FragmentActivity;
-import androidx.media.widget.test.R;
+import androidx.media2.widget.test.R;
 
 /**
- * A minimal application for {@link VideoView2} test.
+ * A minimal application for {@link MediaControlViewTest}.
  */
-public class VideoView2TestActivity extends FragmentActivity {
+public class MediaControlViewTestActivity extends FragmentActivity {
     /**
      * Called with the activity is first created.
      */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.videoview2_layout);
+        setContentView(R.layout.mediacontrolviewtest_layout);
     }
 }
diff --git a/media-widget/src/androidTest/java/androidx/media/widget/TestUtils.java b/media-widget/src/androidTest/java/androidx/media2/widget/TestUtils.java
similarity index 98%
rename from media-widget/src/androidTest/java/androidx/media/widget/TestUtils.java
rename to media-widget/src/androidTest/java/androidx/media2/widget/TestUtils.java
index 60ef66c..6ec9b03 100644
--- a/media-widget/src/androidTest/java/androidx/media/widget/TestUtils.java
+++ b/media-widget/src/androidTest/java/androidx/media2/widget/TestUtils.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
diff --git a/media-widget/src/androidTest/java/androidx/media/widget/VideoView2Test.java b/media-widget/src/androidTest/java/androidx/media2/widget/VideoViewTest.java
similarity index 73%
rename from media-widget/src/androidTest/java/androidx/media/widget/VideoView2Test.java
rename to media-widget/src/androidTest/java/androidx/media2/widget/VideoViewTest.java
index a4d14bb..c159df7 100644
--- a/media-widget/src/androidTest/java/androidx/media/widget/VideoView2Test.java
+++ b/media-widget/src/androidTest/java/androidx/media2/widget/VideoViewTest.java
@@ -14,17 +14,17 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import static android.content.Context.KEYGUARD_SERVICE;
 
-import static androidx.media.widget.MediaControlView2.COMMAND_HIDE_SUBTITLE;
-import static androidx.media.widget.MediaControlView2.COMMAND_SHOW_SUBTITLE;
-import static androidx.media.widget.MediaControlView2.EVENT_UPDATE_SUBTITLE_DESELECTED;
-import static androidx.media.widget.MediaControlView2.EVENT_UPDATE_SUBTITLE_SELECTED;
-import static androidx.media.widget.MediaControlView2.EVENT_UPDATE_TRACK_STATUS;
-import static androidx.media.widget.MediaControlView2.KEY_SELECTED_SUBTITLE_INDEX;
-import static androidx.media.widget.MediaControlView2.KEY_SUBTITLE_TRACK_COUNT;
+import static androidx.media2.widget.MediaControlView.COMMAND_HIDE_SUBTITLE;
+import static androidx.media2.widget.MediaControlView.COMMAND_SHOW_SUBTITLE;
+import static androidx.media2.widget.MediaControlView.EVENT_UPDATE_SUBTITLE_DESELECTED;
+import static androidx.media2.widget.MediaControlView.EVENT_UPDATE_SUBTITLE_SELECTED;
+import static androidx.media2.widget.MediaControlView.EVENT_UPDATE_TRACK_STATUS;
+import static androidx.media2.widget.MediaControlView.KEY_SELECTED_SUBTITLE_INDEX;
+import static androidx.media2.widget.MediaControlView.KEY_SUBTITLE_TRACK_COUNT;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
@@ -51,15 +51,15 @@
 import android.view.WindowManager;
 
 import androidx.core.content.ContextCompat;
-import androidx.media.widget.test.R;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaController2.ControllerResult;
-import androidx.media2.MediaItem2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.UriMediaItem2;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaController;
+import androidx.media2.MediaController.ControllerResult;
+import androidx.media2.MediaItem;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
+import androidx.media2.UriMediaItem;
+import androidx.media2.widget.test.R;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.LargeTest;
@@ -77,17 +77,17 @@
 import java.util.concurrent.Executor;
 
 /**
- * Test {@link VideoView2}.
+ * Test {@link VideoView}.
  *
  * TODO: Lower minSdkVersion to Kitkat.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
 @RunWith(AndroidJUnit4.class)
 @LargeTest
-public class VideoView2Test {
+public class VideoViewTest {
 
     /** Debug TAG. **/
-    private static final String TAG = "VideoView2Test";
+    private static final String TAG = "VideoViewTest";
     /** The maximum time to wait for an operation. */
     private static final long TIME_OUT = 1000L;
 
@@ -96,14 +96,14 @@
     private Instrumentation mInstrumentation;
 
     private Activity mActivity;
-    private VideoView2 mVideoView;
-    private MediaItem2 mMediaItem;
-    private MediaController2.ControllerCallback mControllerCallback;
-    private MediaController2 mController;
+    private VideoView mVideoView;
+    private MediaItem mMediaItem;
+    private MediaController.ControllerCallback mControllerCallback;
+    private MediaController mController;
 
     @Rule
-    public ActivityTestRule<VideoView2TestActivity> mActivityRule =
-            new ActivityTestRule<>(VideoView2TestActivity.class);
+    public ActivityTestRule<VideoViewTestActivity> mActivityRule =
+            new ActivityTestRule<>(VideoViewTestActivity.class);
 
     @Before
     public void setup() throws Throwable {
@@ -118,14 +118,14 @@
         setKeepScreenOn();
         checkAttachedToWindow();
 
-        mControllerCallback = mock(MediaController2.ControllerCallback.class);
+        mControllerCallback = mock(MediaController.ControllerCallback.class);
         when(mControllerCallback.onCustomCommand(
-                nullable(MediaController2.class),
-                nullable(SessionCommand2.class),
+                nullable(MediaController.class),
+                nullable(SessionCommand.class),
                 nullable(Bundle.class))).thenReturn(
                         new ControllerResult(ControllerResult.RESULT_CODE_SUCCESS, null));
-        mController = new MediaController2(mVideoView.getContext(),
-                mVideoView.getMediaSessionToken2(), mMainHandlerExecutor, mControllerCallback);
+        mController = new MediaController(mVideoView.getContext(),
+                mVideoView.getSessionToken(), mMainHandlerExecutor, mControllerCallback);
     }
 
     @After
@@ -138,9 +138,9 @@
     @UiThreadTest
     @Test
     public void testConstructor() {
-        new VideoView2(mActivity);
-        new VideoView2(mActivity, null);
-        new VideoView2(mActivity, null, 0);
+        new VideoView(mActivity);
+        new VideoView(mActivity, null);
+        new VideoView(mActivity, null, 0);
     }
 
     @Test
@@ -154,17 +154,17 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mMediaItem);
+                mVideoView.setMediaItem(mMediaItem);
             }
         });
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onConnected(
-                any(MediaController2.class), any(SessionCommandGroup2.class));
+                any(MediaController.class), any(SessionCommandGroup.class));
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PAUSED));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PAUSED));
 
         mController.play();
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PLAYING));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PLAYING));
     }
 
     @Test
@@ -177,16 +177,16 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mMediaItem);
+                mVideoView.setMediaItem(mMediaItem);
             }
         });
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onConnected(
-                any(MediaController2.class), any(SessionCommandGroup2.class));
+                any(MediaController.class), any(SessionCommandGroup.class));
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PAUSED));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PAUSED));
         verify(mControllerCallback, after(TIME_OUT).never()).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PLAYING));
-        assertEquals(SessionPlayer2.PLAYER_STATE_PAUSED, mController.getPlayerState());
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PLAYING));
+        assertEquals(SessionPlayer.PLAYER_STATE_PAUSED, mController.getPlayerState());
     }
 
     @Test
@@ -200,24 +200,24 @@
 
         AssetFileDescriptor afd = mContext.getResources()
                 .openRawResourceFd(R.raw.testvideo_with_2_subtitle_tracks);
-        final MediaItem2 item = new FileMediaItem2.Builder(
+        final MediaItem item = new FileMediaItem.Builder(
                 afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength())
                 .build();
 
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(item);
+                mVideoView.setMediaItem(item);
             }
         });
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onConnected(
-                any(MediaController2.class), any(SessionCommandGroup2.class));
+                any(MediaController.class), any(SessionCommandGroup.class));
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PAUSED));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PAUSED));
 
         mController.play();
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PLAYING));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PLAYING));
     }
 
     @Test
@@ -228,8 +228,8 @@
             return;
         }
 
-        final VideoView2.OnViewTypeChangedListener mockViewTypeListener =
-                mock(VideoView2.OnViewTypeChangedListener.class);
+        final VideoView.OnViewTypeChangedListener mockViewTypeListener =
+                mock(VideoView.OnViewTypeChangedListener.class);
 
         // The default view type is surface view.
         assertEquals(mVideoView.getViewType(), mVideoView.VIEW_TYPE_SURFACEVIEW);
@@ -239,19 +239,19 @@
             public void run() {
                 mVideoView.setOnViewTypeChangedListener(mockViewTypeListener);
                 mVideoView.setViewType(mVideoView.VIEW_TYPE_TEXTUREVIEW);
-                mVideoView.setMediaItem2(mMediaItem);
+                mVideoView.setMediaItem(mMediaItem);
             }
         });
         verify(mockViewTypeListener, timeout(TIME_OUT))
-                .onViewTypeChanged(mVideoView, VideoView2.VIEW_TYPE_TEXTUREVIEW);
+                .onViewTypeChanged(mVideoView, VideoView.VIEW_TYPE_TEXTUREVIEW);
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onConnected(
-                any(MediaController2.class), any(SessionCommandGroup2.class));
+                any(MediaController.class), any(SessionCommandGroup.class));
         verify(mControllerCallback, timeout(TIME_OUT).atLeast(1)).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PAUSED));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PAUSED));
 
         mController.play();
         verify(mControllerCallback, timeout(TIME_OUT).atLeast(1)).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PLAYING));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PLAYING));
     }
 
     @Test
@@ -262,8 +262,8 @@
             return;
         }
 
-        final VideoView2.OnViewTypeChangedListener mockViewTypeListener =
-                mock(VideoView2.OnViewTypeChangedListener.class);
+        final VideoView.OnViewTypeChangedListener mockViewTypeListener =
+                mock(VideoView.OnViewTypeChangedListener.class);
 
         // The default view type is surface view.
         assertEquals(mVideoView.getViewType(), mVideoView.VIEW_TYPE_SURFACEVIEW);
@@ -276,14 +276,14 @@
                 mVideoView.setViewType(mVideoView.VIEW_TYPE_SURFACEVIEW);
                 mVideoView.setViewType(mVideoView.VIEW_TYPE_TEXTUREVIEW);
                 mVideoView.setViewType(mVideoView.VIEW_TYPE_SURFACEVIEW);
-                mVideoView.setMediaItem2(mMediaItem);
+                mVideoView.setMediaItem(mMediaItem);
             }
         });
 
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onConnected(
-                any(MediaController2.class), any(SessionCommandGroup2.class));
+                any(MediaController.class), any(SessionCommandGroup.class));
         verify(mControllerCallback, timeout(TIME_OUT).atLeast(1)).onPlayerStateChanged(
-                any(MediaController2.class), eq(SessionPlayer2.PLAYER_STATE_PAUSED));
+                any(MediaController.class), eq(SessionPlayer.PLAYER_STATE_PAUSED));
 
         assertEquals(mVideoView.getViewType(), mVideoView.VIEW_TYPE_SURFACEVIEW);
     }
@@ -297,16 +297,16 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mVideoView.setMediaItem2(mMediaItem);
+                mVideoView.setMediaItem(mMediaItem);
             }
         });
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onConnected(
-                any(MediaController2.class), any(SessionCommandGroup2.class));
+                any(MediaController.class), any(SessionCommandGroup.class));
         mController.play();
 
         // Verify the subtitle track count
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onCustomCommand(
-                any(MediaController2.class),
+                any(MediaController.class),
                 argThat(new CommandMatcher(EVENT_UPDATE_TRACK_STATUS)),
                 argThat(new CommandArgumentMatcher(KEY_SUBTITLE_TRACK_COUNT, 2)));
 
@@ -314,31 +314,31 @@
         Bundle extra = new Bundle();
         extra.putInt(KEY_SELECTED_SUBTITLE_INDEX, 0);
         mController.sendCustomCommand(
-                new SessionCommand2(COMMAND_SHOW_SUBTITLE, null), extra);
+                new SessionCommand(COMMAND_SHOW_SUBTITLE, null), extra);
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onCustomCommand(
-                any(MediaController2.class),
+                any(MediaController.class),
                 argThat(new CommandMatcher(EVENT_UPDATE_SUBTITLE_SELECTED)),
                 argThat(new CommandArgumentMatcher(KEY_SELECTED_SUBTITLE_INDEX, 0)));
 
         // Select the second subtitle track
         extra.putInt(KEY_SELECTED_SUBTITLE_INDEX, 1);
         mController.sendCustomCommand(
-                new SessionCommand2(COMMAND_SHOW_SUBTITLE, null), extra);
+                new SessionCommand(COMMAND_SHOW_SUBTITLE, null), extra);
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onCustomCommand(
-                any(MediaController2.class),
+                any(MediaController.class),
                 argThat(new CommandMatcher(EVENT_UPDATE_SUBTITLE_SELECTED)),
                 argThat(new CommandArgumentMatcher(KEY_SELECTED_SUBTITLE_INDEX, 1)));
 
         // Deselect subtitle track
         mController.sendCustomCommand(
-                new SessionCommand2(COMMAND_HIDE_SUBTITLE, null), null);
+                new SessionCommand(COMMAND_HIDE_SUBTITLE, null), null);
         verify(mControllerCallback, timeout(TIME_OUT).atLeastOnce()).onCustomCommand(
-                any(MediaController2.class),
+                any(MediaController.class),
                 argThat(new CommandMatcher(EVENT_UPDATE_SUBTITLE_DESELECTED)),
                 nullable(Bundle.class));
     }
 
-    class CommandMatcher implements ArgumentMatcher<SessionCommand2> {
+    class CommandMatcher implements ArgumentMatcher<SessionCommand> {
         final String mExpectedCommand;
 
         CommandMatcher(String command) {
@@ -346,7 +346,7 @@
         }
 
         @Override
-        public boolean matches(SessionCommand2 command) {
+        public boolean matches(SessionCommand command) {
             return mExpectedCommand.equals(command.getCustomCommand());
         }
     }
@@ -401,11 +401,11 @@
         return TestUtils.hasCodecsForResource(mActivity, R.raw.testvideo_with_2_subtitle_tracks);
     }
 
-    private MediaItem2 createTestMediaItem2() {
+    private MediaItem createTestMediaItem2() {
         Uri testVideoUri = Uri.parse(
                 "android.resource://" + mContext.getPackageName() + "/"
                         + R.raw.testvideo_with_2_subtitle_tracks);
-        return new UriMediaItem2.Builder(mVideoView.getContext(), testVideoUri)
+        return new UriMediaItem.Builder(mVideoView.getContext(), testVideoUri)
                 .build();
     }
 }
diff --git a/media-widget/src/androidTest/java/androidx/media/widget/VideoView2TestActivity.java b/media-widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
similarity index 78%
rename from media-widget/src/androidTest/java/androidx/media/widget/VideoView2TestActivity.java
rename to media-widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
index 912d336..23e04c1 100644
--- a/media-widget/src/androidTest/java/androidx/media/widget/VideoView2TestActivity.java
+++ b/media-widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
@@ -14,23 +14,23 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.os.Bundle;
 
 import androidx.fragment.app.FragmentActivity;
-import androidx.media.widget.test.R;
+import androidx.media2.widget.test.R;
 
 /**
- * A minimal application for {@link VideoView2} test.
+ * A minimal application for {@link VideoView} test.
  */
-public class VideoView2TestActivity extends FragmentActivity {
+public class VideoViewTestActivity extends FragmentActivity {
     /**
      * Called with the activity is first created.
      */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.videoview2_layout);
+        setContentView(R.layout.videoview_layout);
     }
 }
diff --git a/media-widget/src/androidTest/res/layout/mediacontrolview2test_layout.xml b/media-widget/src/androidTest/res/layout/mediacontrolviewtest_layout.xml
similarity index 96%
rename from media-widget/src/androidTest/res/layout/mediacontrolview2test_layout.xml
rename to media-widget/src/androidTest/res/layout/mediacontrolviewtest_layout.xml
index 9671f72..e0e9116 100644
--- a/media-widget/src/androidTest/res/layout/mediacontrolview2test_layout.xml
+++ b/media-widget/src/androidTest/res/layout/mediacontrolviewtest_layout.xml
@@ -19,7 +19,7 @@
               android:layout_width="match_parent"
               android:layout_height="match_parent">
 
-    <androidx.media.widget.VideoView2
+    <androidx.media2.widget.VideoView
             android:id="@+id/videoview"
             android:layout_width="match_parent"
             android:layout_height="match_parent"/>
diff --git a/media-widget/src/androidTest/res/layout/videoview2_layout.xml b/media-widget/src/androidTest/res/layout/videoview_layout.xml
similarity index 96%
rename from media-widget/src/androidTest/res/layout/videoview2_layout.xml
rename to media-widget/src/androidTest/res/layout/videoview_layout.xml
index 40e07d5..f1935c1 100644
--- a/media-widget/src/androidTest/res/layout/videoview2_layout.xml
+++ b/media-widget/src/androidTest/res/layout/videoview_layout.xml
@@ -19,7 +19,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <androidx.media.widget.VideoView2
+    <androidx.media2.widget.VideoView
         android:id="@+id/videoview"
         android:layout_width="160dp"
         android:layout_height="120dp"/>
diff --git a/media-widget/src/main/AndroidManifest.xml b/media-widget/src/main/AndroidManifest.xml
index 824903e..8de476b 100644
--- a/media-widget/src/main/AndroidManifest.xml
+++ b/media-widget/src/main/AndroidManifest.xml
@@ -14,4 +14,4 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest package="androidx.media.widget"/>
+<manifest package="androidx.media2.widget"/>
diff --git a/media-widget/src/main/java/androidx/media/widget/RoutePlayer.java b/media-widget/src/main/java/androidx/media/widget/RoutePlayer.java
deleted file mode 100644
index 1a67b3f..0000000
--- a/media-widget/src/main/java/androidx/media/widget/RoutePlayer.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media.widget;
-
-import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.media.session.MediaSession;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-import android.support.v4.media.session.PlaybackStateCompat;
-
-import androidx.annotation.RequiresApi;
-import androidx.annotation.RestrictTo;
-import androidx.mediarouter.media.MediaItemStatus;
-import androidx.mediarouter.media.MediaRouter;
-import androidx.mediarouter.media.MediaSessionStatus;
-import androidx.mediarouter.media.RemotePlaybackClient;
-import androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback;
-import androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback;
-import androidx.mediarouter.media.RemotePlaybackClient.StatusCallback;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public class RoutePlayer extends MediaSession.Callback {
-    public static final long PLAYBACK_ACTIONS = PlaybackStateCompat.ACTION_PAUSE
-            | PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_SEEK_TO
-            | PlaybackStateCompat.ACTION_FAST_FORWARD | PlaybackStateCompat.ACTION_REWIND;
-
-    private RemotePlaybackClient mClient;
-    private String mSessionId;
-    private String mItemId;
-    private PlayerEventCallback mCallback;
-
-    private StatusCallback mStatusCallback = new StatusCallback() {
-        @Override
-        public void onItemStatusChanged(Bundle data,
-                                        String sessionId, MediaSessionStatus sessionStatus,
-                                        String itemId, MediaItemStatus itemStatus) {
-            updateSessionStatus(sessionId, sessionStatus);
-            updateItemStatus(itemId, itemStatus);
-        }
-    };
-
-    public RoutePlayer(Context context, MediaRouter.RouteInfo route) {
-        mClient = new RemotePlaybackClient(context, route);
-        mClient.setStatusCallback(mStatusCallback);
-        if (mClient.isSessionManagementSupported()) {
-            mClient.startSession(null, new SessionActionCallback() {
-                @Override
-                public void onResult(Bundle data,
-                                     String sessionId, MediaSessionStatus sessionStatus) {
-                    updateSessionStatus(sessionId, sessionStatus);
-                }
-            });
-        }
-    }
-
-    @Override
-    public void onPlay() {
-        if (mClient.isSessionManagementSupported()) {
-            mClient.resume(null, new SessionActionCallback() {
-                @Override
-                public void onResult(Bundle data,
-                                     String sessionId, MediaSessionStatus sessionStatus) {
-                    updateSessionStatus(sessionId, sessionStatus);
-                }
-            });
-        }
-    }
-
-    @Override
-    public void onPause() {
-        if (mClient.isSessionManagementSupported()) {
-            mClient.pause(null, new SessionActionCallback() {
-                @Override
-                public void onResult(Bundle data,
-                                     String sessionId, MediaSessionStatus sessionStatus) {
-                    updateSessionStatus(sessionId, sessionStatus);
-                }
-            });
-        }
-    }
-
-    @Override
-    public void onSeekTo(long pos) {
-        if (mClient.isSessionManagementSupported()) {
-            mClient.seek(mItemId, pos, null, new ItemActionCallback() {
-                @Override
-                public void onResult(Bundle data,
-                                     String sessionId, MediaSessionStatus sessionStatus,
-                                     String itemId, MediaItemStatus itemStatus) {
-                    updateSessionStatus(sessionId, sessionStatus);
-                    updateItemStatus(itemId, itemStatus);
-                }
-            });
-        }
-    }
-
-    @Override
-    public void onStop() {
-        if (mClient.isSessionManagementSupported()) {
-            mClient.stop(null, new SessionActionCallback() {
-                @Override
-                public void onResult(Bundle data,
-                                     String sessionId, MediaSessionStatus sessionStatus) {
-                    updateSessionStatus(sessionId, sessionStatus);
-                }
-            });
-        }
-    }
-
-    /**
-     * Sets a callback to be notified of events for this player.
-     * @param callback the callback to receive the events.
-     */
-    public void setPlayerEventCallback(PlayerEventCallback callback) {
-        mCallback = callback;
-    }
-
-    // b/77556429
-//    public void openVideo(DataSourceDesc dsd) {
-//        mClient.play(dsd.getUri(), "video/mp4", null, 0, null, new ItemActionCallback() {
-//            @Override
-//            public void onResult(Bundle data,
-//                                 String sessionId, MediaSessionStatus sessionStatus,
-//                                 String itemId, MediaItemStatus itemStatus) {
-//                updateSessionStatus(sessionId, sessionStatus);
-//                updateItemStatus(itemId, itemStatus);
-//                playInternal(dsd.getUri());
-//            }
-//        });
-//    }
-
-    /**
-     * Opens the video based on the given uri and updates the media session and item statuses.
-     * @param uri link to the video
-     */
-    public void openVideo(Uri uri) {
-        mClient.play(uri, "video/mp4", null, 0, null, new ItemActionCallback() {
-            @Override
-            public void onResult(Bundle data,
-                                 String sessionId, MediaSessionStatus sessionStatus,
-                                 String itemId, MediaItemStatus itemStatus) {
-                updateSessionStatus(sessionId, sessionStatus);
-                updateItemStatus(itemId, itemStatus);
-            }
-        });
-    }
-
-    /**
-     * Releases the {@link RemotePlaybackClient} and {@link PlayerEventCallback} instances.
-     */
-    public void release() {
-        if (mClient != null) {
-            mClient.release();
-            mClient = null;
-        }
-        if (mCallback != null) {
-            mCallback = null;
-        }
-    }
-
-    private void playInternal(Uri uri) {
-        mClient.play(uri, "video/mp4", null, 0, null, new ItemActionCallback() {
-            @Override
-            public void onResult(Bundle data,
-                                 String sessionId, MediaSessionStatus sessionStatus,
-                                 String itemId, MediaItemStatus itemStatus) {
-                updateSessionStatus(sessionId, sessionStatus);
-                updateItemStatus(itemId, itemStatus);
-            }
-        });
-    }
-
-    @SuppressWarnings("WeakerAccess") /* synthetic access */
-    void updateSessionStatus(String sessionId, MediaSessionStatus sessionStatus) {
-        mSessionId = sessionId;
-    }
-
-    @SuppressWarnings("WeakerAccess") /* synthetic access */
-    void updateItemStatus(String itemId, MediaItemStatus itemStatus) {
-        mItemId = itemId;
-        if (itemStatus == null || mCallback == null) return;
-        mCallback.onPlayerStateChanged(itemStatus);
-    }
-
-    /**
-     * A callback class to receive notifications for events on the route player.
-     */
-    public abstract static class PlayerEventCallback {
-        /**
-         * Override to handle changes in playback state.
-         *
-         * @param itemStatus The new MediaItemStatus of the RoutePlayer
-         */
-        public void onPlayerStateChanged(MediaItemStatus itemStatus) { }
-    }
-}
diff --git a/media-widget/src/main/java/androidx/media/widget/BaseLayout.java b/media-widget/src/main/java/androidx/media2/widget/BaseLayout.java
similarity index 99%
rename from media-widget/src/main/java/androidx/media/widget/BaseLayout.java
rename to media-widget/src/main/java/androidx/media2/widget/BaseLayout.java
index 231f259..e6c46dd 100644
--- a/media-widget/src/main/java/androidx/media/widget/BaseLayout.java
+++ b/media-widget/src/main/java/androidx/media2/widget/BaseLayout.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
diff --git a/media-widget/src/main/java/androidx/media/widget/MediaControlView2.java b/media-widget/src/main/java/androidx/media2/widget/MediaControlView.java
similarity index 89%
rename from media-widget/src/main/java/androidx/media/widget/MediaControlView2.java
rename to media-widget/src/main/java/androidx/media2/widget/MediaControlView.java
index f8db518..42dbdfd 100644
--- a/media-widget/src/main/java/androidx/media/widget/MediaControlView2.java
+++ b/media-widget/src/main/java/androidx/media2/widget/MediaControlView.java
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_NOT_SUPPORTED;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_NOT_SUPPORTED;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_SUCCESS;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
@@ -64,16 +64,16 @@
 import androidx.annotation.RequiresApi;
 import androidx.appcompat.app.AlertDialog;
 import androidx.core.content.ContextCompat;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
+import androidx.media2.MediaController;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
 import androidx.media2.MediaPlayer;
-import androidx.media2.MediaSession2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.SessionToken2;
-import androidx.media2.UriMediaItem2;
+import androidx.media2.MediaSession;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
+import androidx.media2.SessionToken;
+import androidx.media2.UriMediaItem;
 import androidx.mediarouter.app.MediaRouteButton;
 import androidx.mediarouter.media.MediaRouteSelector;
 
@@ -90,19 +90,19 @@
  * rewind/fast-forward, skip to next/previous, select subtitle track, enter/exit full screen mode,
  * adjust video quality, select audio track, and adjust playback speed.
  * <p>
- * The easiest way to use a MediaControlView2 is by creating a {@link VideoView2}, which will
- * internally create a MediaControlView2 instance and handle all the commands from buttons inside
- * MediaControlView2. For more information, refer to {@link VideoView2}.
+ * The easiest way to use a MediaControlView is by creating a {@link VideoView}, which will
+ * internally create a MediaControlView instance and handle all the commands from buttons inside
+ * MediaControlView. For more information, refer to {@link VideoView}.
  *
- * It is also possible to create a MediaControlView2 programmatically and add it to a custom video
- * view. In this case, the app will need to create a {@link MediaSession2} instance and set
- * {@link SessionToken2 its token} inside MediaControlView2 by calling
- * {@link #setMediaSessionToken2(SessionToken2)}. Then MediaControlView2 will create a
- * {@link MediaController2} and could send commands to the connected {@link MediaSession2 session}.
- * By default, the buttons inside MediaControlView2 will not visible unless the corresponding
- * {@link SessionCommand2} is marked as allowed. For more details, refer to {@link MediaSession2}.
+ * It is also possible to create a MediaControlView programmatically and add it to a custom video
+ * view. In this case, the app will need to create a {@link MediaSession} instance and set
+ * {@link SessionToken its token} inside MediaControlView by calling
+ * {@link #setSessionToken(SessionToken)}. Then MediaControlView will create a
+ * {@link MediaController} and could send commands to the connected {@link MediaSession session}.
+ * By default, the buttons inside MediaControlView will not visible unless the corresponding
+ * {@link SessionCommand} is marked as allowed. For more details, refer to {@link MediaSession}.
  * <p>
- * Currently, MediaControlView2 animates off-screen in two steps:
+ * Currently, MediaControlView animates off-screen in two steps:
  *   1) Title and bottom bars slide up and down respectively and the transport controls fade out,
  *      leaving only the progress bar at the bottom of the view.
  *   2) Progress bar slides down off-screen.
@@ -114,8 +114,8 @@
  */
 @TargetApi(Build.VERSION_CODES.P)
 @RequiresApi(21) // TODO correct minSdk API use incompatibilities and remove before release.
-public class MediaControlView2 extends BaseLayout {
-    private static final String TAG = "MediaControlView2";
+public class MediaControlView extends BaseLayout {
+    private static final String TAG = "MediaControlView";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     static final String KEY_VIDEO_TRACK_COUNT = "VideoTrackCount";
@@ -179,7 +179,7 @@
     private static final String RESOURCE_EMPTY = "";
 
     Resources mResources;
-    Controller2 mController;
+    Controller mController;
     OnFullScreenListener mOnFullScreenListener;
     private AccessibilityManager mAccessibilityManager;
     private WindowManager mWindowManager;
@@ -295,34 +295,34 @@
     ValueAnimator mOverflowShowAnimator;
     ValueAnimator mOverflowHideAnimator;
 
-    public MediaControlView2(@NonNull Context context) {
+    public MediaControlView(@NonNull Context context) {
         this(context, null);
     }
 
-    public MediaControlView2(@NonNull Context context, @Nullable AttributeSet attrs) {
+    public MediaControlView(@NonNull Context context, @Nullable AttributeSet attrs) {
         this(context, attrs, 0);
     }
 
-    public MediaControlView2(@NonNull Context context, @Nullable AttributeSet attrs,
+    public MediaControlView(@NonNull Context context, @Nullable AttributeSet attrs,
             int defStyleAttr) {
         super(context, attrs, defStyleAttr);
 
         mResources = context.getResources();
-        // Inflate MediaControlView2 from XML
+        mController = new Controller();
+        // Inflate MediaControlView from XML
         mRoot = makeControllerView();
         addView(mRoot);
         mShowControllerIntervalMs = DEFAULT_SHOW_CONTROLLER_INTERVAL_MS;
         mAccessibilityManager = (AccessibilityManager) context.getSystemService(
                 Context.ACCESSIBILITY_SERVICE);
-        mController = new Controller2();
     }
 
     /**
-     * Sets MediaSession2 token to control corresponding MediaSession2. It makes it possible to
-     * send and receive data between MediaControlView2 and VideoView2.
+     * Sets MediaSession token to control corresponding MediaSession. It makes it possible to
+     * send and receive data between MediaControlView and VideoView.
      */
-    public void setMediaSessionToken2(@NonNull SessionToken2 token) {
-        mController.setMediaSessionToken2(token);
+    public void setSessionToken(@NonNull SessionToken token) {
+        mController.setSessionToken(token);
         if (mController.hasMetadata()) {
             updateMetadata();
         }
@@ -360,7 +360,7 @@
 
     @Override
     public CharSequence getAccessibilityClassName() {
-        return MediaControlView2.class.getName();
+        return MediaControlView.class.getName();
     }
 
     @Override
@@ -975,7 +975,7 @@
                         mAdSkipView.setVisibility(View.VISIBLE);
                     }
                     String skipTimeText = mResources.getString(
-                            R.string.MediaControlView2_ad_skip_wait_time,
+                            R.string.MediaControlView_ad_skip_wait_time,
                             ((AD_SKIP_WAIT_TIME_MS - currentPosition) / 1000 + 1));
                     mAdSkipView.setText(skipTimeText);
                 } else {
@@ -991,7 +991,7 @@
                 long remainingTime =
                         (mDuration - currentPosition < 0) ? 0 : (mDuration - currentPosition);
                 String remainingTimeText = mResources.getString(
-                        R.string.MediaControlView2_ad_remaining_time,
+                        R.string.MediaControlView_ad_remaining_time,
                         stringForTime(remainingTime));
                 mAdRemainingView.setText(remainingTimeText);
             }
@@ -1283,7 +1283,7 @@
                         mResources.getDrawable(R.drawable.ic_fullscreen, null));
             }
             mIsFullScreen = isEnteringFullScreen;
-            mOnFullScreenListener.onFullScreen(MediaControlView2.this,
+            mOnFullScreenListener.onFullScreen(MediaControlView.this,
                     mIsFullScreen);
         }
     };
@@ -1404,21 +1404,21 @@
         }
 
         if (mMediaType != MEDIA_TYPE_MUSIC) {
-            String title = mController.getTitle();
+            CharSequence title = mController.getTitle();
             if (title != null) {
-                mTitleView.setText(title);
+                mTitleView.setText(title.toString());
             }
         } else {
-            String title = mController.getTitle();
+            CharSequence title = mController.getTitle();
             if (title == null) {
                 title = mResources.getString(R.string.mcv2_music_title_unknown_text);
             }
-            String artist = mController.getArtistText();
+            CharSequence artist = mController.getArtistText();
             if (artist == null) {
                 artist = mResources.getString(R.string.mcv2_music_artist_unknown_text);
             }
             // Update title for Embedded size type
-            mTitleView.setText(title + " - " + artist);
+            mTitleView.setText(title.toString() + " - " + artist.toString());
 
             // Remove unnecessary buttons
             mVideoQualityButton.setVisibility(View.GONE);
@@ -1644,25 +1644,35 @@
         }
         mFfwdButton = v.findViewById(R.id.ffwd);
         if (mFfwdButton != null) {
-            mFfwdButton.setOnClickListener(mFfwdListener);
             if (mMediaType == MEDIA_TYPE_MUSIC) {
                 mFfwdButton.setVisibility(View.GONE);
+            } else {
+                mFfwdButton.setOnClickListener(mFfwdListener);
             }
         }
         mRewButton = v.findViewById(R.id.rew);
         if (mRewButton != null) {
-            mRewButton.setOnClickListener(mRewListener);
             if (mMediaType == MEDIA_TYPE_MUSIC) {
                 mRewButton.setVisibility(View.GONE);
+            } else {
+                mRewButton.setOnClickListener(mRewListener);
             }
         }
         mNextButton = v.findViewById(R.id.next);
         if (mNextButton != null) {
-            mNextButton.setOnClickListener(mNextListener);
+            if (mController.canSkipToNext()) {
+                mNextButton.setOnClickListener(mNextListener);
+            } else {
+                mNextButton.setVisibility(View.GONE);
+            }
         }
         mPrevButton = v.findViewById(R.id.prev);
         if (mPrevButton != null) {
-            mPrevButton.setOnClickListener(mPrevListener);
+            if (mController.canSkipToPrevious()) {
+                mPrevButton.setOnClickListener(mPrevListener);
+            } else {
+                mPrevButton.setVisibility(View.GONE);
+            }
         }
         return v;
     }
@@ -1670,14 +1680,14 @@
     private void initializeSettingsLists() {
         mSettingsMainTextsList = new ArrayList<String>();
         mSettingsMainTextsList.add(
-                mResources.getString(R.string.MediaControlView2_audio_track_text));
+                mResources.getString(R.string.MediaControlView_audio_track_text));
         mSettingsMainTextsList.add(
-                mResources.getString(R.string.MediaControlView2_playback_speed_text));
+                mResources.getString(R.string.MediaControlView_playback_speed_text));
 
         mSettingsSubTextsList = new ArrayList<String>();
         mSettingsSubTextsList.add(
-                mResources.getString(R.string.MediaControlView2_audio_track_none_text));
-        String normalSpeed = mResources.getString(R.string.MediaControlView2_playback_speed_normal);
+                mResources.getString(R.string.MediaControlView_audio_track_none_text));
+        String normalSpeed = mResources.getString(R.string.MediaControlView_playback_speed_normal);
         mSettingsSubTextsList.add(normalSpeed);
         mSettingsSubTextsList.add(RESOURCE_EMPTY);
 
@@ -1687,14 +1697,14 @@
 
         mAudioTrackList = new ArrayList<String>();
         mAudioTrackList.add(
-                mResources.getString(R.string.MediaControlView2_audio_track_none_text));
+                mResources.getString(R.string.MediaControlView_audio_track_none_text));
 
         mVideoQualityList = new ArrayList<String>();
         mVideoQualityList.add(
-                mResources.getString(R.string.MediaControlView2_video_quality_auto_text));
+                mResources.getString(R.string.MediaControlView_video_quality_auto_text));
 
         mPlaybackSpeedTextList = new ArrayList<String>(Arrays.asList(
-                mResources.getStringArray(R.array.MediaControlView2_playback_speeds)));
+                mResources.getStringArray(R.array.MediaControlView_playback_speeds)));
         // Select the normal speed (1x) as the default value.
         mPlaybackSpeedTextList.add(PLAYBACK_SPEED_1x_INDEX, normalSpeed);
         mSelectedSpeedIndex = PLAYBACK_SPEED_1x_INDEX;
@@ -1707,13 +1717,13 @@
         mCustomPlaybackSpeedIndex = -1;
     }
 
-    boolean isHttpSchemeUrl(MediaItem2 currentMediaItem) {
+    boolean isHttpSchemeUrl(MediaItem currentMediaItem) {
         if (currentMediaItem == null) {
             return false;
         }
 
-        Uri uri = currentMediaItem instanceof UriMediaItem2
-                ? ((UriMediaItem2) currentMediaItem).getUri() : null;
+        Uri uri = currentMediaItem instanceof UriMediaItem
+                ? ((UriMediaItem) currentMediaItem).getUri() : null;
         if (uri == null) {
             // Something wrong.
             return false;
@@ -1790,7 +1800,7 @@
         postDelayed(mHideMainBars, mShowControllerIntervalMs);
     }
 
-    void updateAllowedCommands(SessionCommandGroup2 commands) {
+    void updateAllowedCommands(SessionCommandGroup commands) {
         if (DEBUG) {
             Log.d(TAG, "updateAllowedCommands(): commands: " + commands);
         }
@@ -1800,13 +1810,13 @@
         }
         mController.setAllowedCommands(commands);
 
-        if (commands.hasCommand(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE)) {
+        if (commands.hasCommand(SessionCommand.COMMAND_CODE_PLAYER_PAUSE)) {
             mPlayPauseButton.setVisibility(View.VISIBLE);
             mPlayPauseButton.setEnabled(true);
         } else {
             mPlayPauseButton.setVisibility(View.GONE);
         }
-        if (commands.hasCommand(SessionCommand2.COMMAND_CODE_SESSION_REWIND)
+        if (commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_REWIND)
                 && mMediaType != MEDIA_TYPE_MUSIC) {
             if (mRewButton != null) {
                 mRewButton.setVisibility(View.VISIBLE);
@@ -1817,7 +1827,7 @@
                 mRewButton.setVisibility(View.GONE);
             }
         }
-        if (commands.hasCommand(SessionCommand2.COMMAND_CODE_SESSION_FAST_FORWARD)
+        if (commands.hasCommand(SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD)
                 && mMediaType != MEDIA_TYPE_MUSIC) {
             if (mFfwdButton != null) {
                 mFfwdButton.setVisibility(View.VISIBLE);
@@ -1829,7 +1839,7 @@
             }
         }
         if (commands.hasCommand(
-                SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM)) {
+                SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM)) {
             if (mPrevButton != null) {
                 mPrevButton.setVisibility(VISIBLE);
                 mPrevButton.setEnabled(true);
@@ -1840,7 +1850,7 @@
             }
         }
         if (commands.hasCommand(
-                SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM)) {
+                SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM)) {
             if (mNextButton != null) {
                 mNextButton.setVisibility(VISIBLE);
                 mNextButton.setEnabled(true);
@@ -1850,12 +1860,12 @@
                 mNextButton.setVisibility(View.GONE);
             }
         }
-        if (commands.hasCommand(SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO)) {
+        if (commands.hasCommand(SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO)) {
             mSeekAvailable = true;
             mProgress.setEnabled(true);
         }
-        if (commands.hasCommand(new SessionCommand2(COMMAND_SHOW_SUBTITLE, null))
-                && commands.hasCommand(new SessionCommand2(COMMAND_HIDE_SUBTITLE, null))) {
+        if (commands.hasCommand(new SessionCommand(COMMAND_SHOW_SUBTITLE, null))
+                && commands.hasCommand(new SessionCommand(COMMAND_HIDE_SUBTITLE, null))) {
             mSubtitleButton.setVisibility(View.VISIBLE);
         } else {
             mSubtitleButton.setVisibility(View.GONE);
@@ -1875,8 +1885,8 @@
     boolean shouldNotHideBars() {
         return (mMediaType == MEDIA_TYPE_MUSIC && mSizeType == SIZE_TYPE_FULL)
                 || mAccessibilityManager.isTouchExplorationEnabled()
-                || mController.getPlaybackState() == SessionPlayer2.PLAYER_STATE_ERROR
-                || mController.getPlaybackState() == SessionPlayer2.PLAYER_STATE_IDLE;
+                || mController.getPlaybackState() == SessionPlayer.PLAYER_STATE_ERROR
+                || mController.getPlaybackState() == SessionPlayer.PLAYER_STATE_IDLE;
     }
 
     void seekTo(long newPosition, boolean shouldSeekNow) {
@@ -2118,164 +2128,197 @@
         }
     }
 
-    class Controller2 {
-        private MediaController2 mController2;
-        int mPlaybackState = SessionPlayer2.PLAYER_STATE_IDLE;
-        int mPrevState = SessionPlayer2.PLAYER_STATE_IDLE;
-        MediaMetadata2 mMediaMetadata2;
+    class Controller {
+        private MediaController mController;
+        int mPlaybackState = SessionPlayer.PLAYER_STATE_IDLE;
+        int mPrevState = SessionPlayer.PLAYER_STATE_IDLE;
+        MediaMetadata mMediaMetadata;
         private Executor mCallbackExecutor;
-        SessionCommandGroup2 mAllowedCommands;
+        SessionCommandGroup mAllowedCommands;
 
-        Controller2() {
+        Controller() {
             mCallbackExecutor = ContextCompat.getMainExecutor(getContext());
         }
 
-        void setMediaSessionToken2(SessionToken2 token) {
-            if (mController2 != null) {
-                mController2.close();
+        void setSessionToken(SessionToken token) {
+            if (mController != null) {
+                mController.close();
             }
-            mController2 = new MediaController2(getContext(), token, mCallbackExecutor,
+            mController = new MediaController(getContext(), token, mCallbackExecutor,
                     new MediaControllerCallback());
-            mPlaybackState = mController2.getPlayerState();
-            MediaItem2 currentItem = mController2.getCurrentMediaItem();
-            mMediaMetadata2 = currentItem != null ? currentItem.getMetadata() : null;
+            mPlaybackState = mController.getPlayerState();
+            MediaItem currentItem = mController.getCurrentMediaItem();
+            mMediaMetadata = currentItem != null ? currentItem.getMetadata() : null;
         }
+
         boolean hasMetadata() {
-            return mMediaMetadata2 != null;
+            return mMediaMetadata != null;
         }
+
         boolean isPlaying() {
-            return mPlaybackState == SessionPlayer2.PLAYER_STATE_PLAYING;
+            return mPlaybackState == SessionPlayer.PLAYER_STATE_PLAYING;
         }
+
         long getCurrentPosition() {
-            if (mController2 != null) {
-                long currentPosition = mController2.getCurrentPosition();
+            if (mController != null) {
+                long currentPosition = mController.getCurrentPosition();
                 return (currentPosition < 0) ? 0 : currentPosition;
             }
             return 0;
         }
+
         long getBufferPercentage() {
-            if (mController2 != null && mDuration != 0) {
-                long bufferedPos = mController2.getBufferedPosition();
+            if (mController != null && mDuration != 0) {
+                long bufferedPos = mController.getBufferedPosition();
                 return (bufferedPos < 0) ? -1 : (bufferedPos * 100 / mDuration);
             }
             return 0;
         }
+
         int getPlaybackState() {
-            if (mController2 != null) {
-                return mController2.getPlayerState();
+            if (mController != null) {
+                return mController.getPlayerState();
             }
-            return SessionPlayer2.PLAYER_STATE_IDLE;
+            return SessionPlayer.PLAYER_STATE_IDLE;
         }
+
         boolean canPause() {
             return mAllowedCommands != null && mAllowedCommands.hasCommand(
-                    SessionCommand2.COMMAND_CODE_PLAYER_PAUSE);
+                    SessionCommand.COMMAND_CODE_PLAYER_PAUSE);
         }
+
         boolean canSeekBackward() {
             return mAllowedCommands != null && mAllowedCommands.hasCommand(
-                    SessionCommand2.COMMAND_CODE_SESSION_REWIND);
+                    SessionCommand.COMMAND_CODE_SESSION_REWIND);
         }
+
         boolean canSeekForward() {
             return mAllowedCommands != null && mAllowedCommands.hasCommand(
-                    SessionCommand2.COMMAND_CODE_SESSION_FAST_FORWARD);
+                    SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD);
         }
+
+        boolean canSkipToNext() {
+            return mAllowedCommands != null && mAllowedCommands.hasCommand(
+                    SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM);
+        }
+
+        boolean canSkipToPrevious() {
+            return mAllowedCommands != null && mAllowedCommands.hasCommand(
+                    SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM);
+        }
+
         void pause() {
-            if (mController2 != null) {
-                mController2.pause();
+            if (mController != null) {
+                mController.pause();
             }
         }
+
         void play() {
-            if (mController2 != null) {
-                mController2.play();
+            if (mController != null) {
+                mController.play();
             }
         }
+
         void seekTo(long posMs) {
-            if (mController2 != null) {
-                mController2.seekTo(posMs);
+            if (mController != null) {
+                mController.seekTo(posMs);
             }
         }
+
         void skipToNextItem() {
-            if (mController2 != null) {
-                mController2.skipToNextPlaylistItem();
+            if (mController != null) {
+                mController.skipToNextPlaylistItem();
             }
         }
+
         void skipToPreviousItem() {
-            if (mController2 != null) {
-                mController2.skipToPreviousPlaylistItem();
+            if (mController != null) {
+                mController.skipToPreviousPlaylistItem();
             }
         }
+
         void setSpeed(float speed) {
-            if (mController2 != null) {
-                mController2.setPlaybackSpeed(speed);
+            if (mController != null) {
+                mController.setPlaybackSpeed(speed);
             }
         }
+
         void selectAudioTrack(int trackIndex) {
-            if (mController2 != null) {
+            if (mController != null) {
                 Bundle extra = new Bundle();
                 extra.putInt(KEY_SELECTED_AUDIO_INDEX, trackIndex);
-                mController2.sendCustomCommand(
-                        new SessionCommand2(COMMAND_SELECT_AUDIO_TRACK, null),
+                mController.sendCustomCommand(
+                        new SessionCommand(COMMAND_SELECT_AUDIO_TRACK, null),
                         extra);
             }
         }
+
         void showSubtitle(int trackIndex) {
-            if (mController2 != null) {
+            if (mController != null) {
                 Bundle extra = new Bundle();
                 extra.putInt(KEY_SELECTED_SUBTITLE_INDEX, trackIndex);
-                mController2.sendCustomCommand(
-                        new SessionCommand2(COMMAND_SHOW_SUBTITLE, null), extra);
+                mController.sendCustomCommand(
+                        new SessionCommand(COMMAND_SHOW_SUBTITLE, null), extra);
             }
         }
+
         void hideSubtitle() {
-            if (mController2 != null) {
-                mController2.sendCustomCommand(
-                        new SessionCommand2(COMMAND_HIDE_SUBTITLE, null), null);
+            if (mController != null) {
+                mController.sendCustomCommand(
+                        new SessionCommand(COMMAND_HIDE_SUBTITLE, null), null);
             }
         }
+
         long getDurationMs() {
             // TODO Remove this if-block after b/109639439 is fixed.
-            if (mMediaMetadata2 != null) {
-                if (mMediaMetadata2.containsKey(MediaMetadata2.METADATA_KEY_DURATION)) {
-                    return mMediaMetadata2.getLong(MediaMetadata2.METADATA_KEY_DURATION);
+            if (mMediaMetadata != null) {
+                if (mMediaMetadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
+                    return mMediaMetadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
                 }
             }
-            if (mController2 != null) {
-                return mController2.getDuration();
+            if (mController != null) {
+                return mController.getDuration();
             }
             return 0;
         }
-        String getTitle() {
-            if (mMediaMetadata2 != null) {
-                if (mMediaMetadata2.containsKey(MediaMetadata2.METADATA_KEY_TITLE)) {
-                    return mMediaMetadata2.getString(MediaMetadata2.METADATA_KEY_TITLE);
+
+        CharSequence getTitle() {
+            if (mMediaMetadata != null) {
+                if (mMediaMetadata.containsKey(MediaMetadata.METADATA_KEY_TITLE)) {
+                    return mMediaMetadata.getText(MediaMetadata.METADATA_KEY_TITLE);
                 }
             }
             return null;
         }
-        String getArtistText() {
-            if (mMediaMetadata2 != null) {
-                if (mMediaMetadata2.containsKey(MediaMetadata2.METADATA_KEY_ARTIST)) {
-                    return mMediaMetadata2.getString(MediaMetadata2.METADATA_KEY_ARTIST);
+
+        CharSequence getArtistText() {
+            if (mMediaMetadata != null) {
+                if (mMediaMetadata.containsKey(MediaMetadata.METADATA_KEY_ARTIST)) {
+                    return mMediaMetadata.getText(MediaMetadata.METADATA_KEY_ARTIST);
                 }
             }
             return null;
         }
-        MediaItem2 getCurrentMediaItem() {
-            if (mController2 != null) {
-                return mController2.getCurrentMediaItem();
+
+        MediaItem getCurrentMediaItem() {
+            if (mController != null) {
+                return mController.getCurrentMediaItem();
             }
             return null;
         }
-        void setAllowedCommands(SessionCommandGroup2 commands) {
+
+        void setAllowedCommands(SessionCommandGroup commands) {
             mAllowedCommands = commands;
         }
-        SessionCommandGroup2 getAllowedCommands() {
+
+        SessionCommandGroup getAllowedCommands() {
             return mAllowedCommands;
         }
 
-        class MediaControllerCallback extends MediaController2.ControllerCallback {
+        class MediaControllerCallback extends MediaController.ControllerCallback {
             @Override
-            public void onPlayerStateChanged(@NonNull MediaController2 controller,
-                    @SessionPlayer2.PlayerState int state) {
+            public void onPlayerStateChanged(@NonNull MediaController controller,
+                    @SessionPlayer.PlayerState int state) {
                 if (DEBUG) {
                     Log.d(TAG, "onPlayerStateChanged(state: " + state + ")");
                 }
@@ -2287,21 +2330,21 @@
                 //   2) Need to handle case where the media file reaches end of duration.
                 if (mPlaybackState != mPrevState) {
                     switch (mPlaybackState) {
-                        case SessionPlayer2.PLAYER_STATE_PLAYING:
+                        case SessionPlayer.PLAYER_STATE_PLAYING:
                             removeCallbacks(mUpdateProgress);
                             post(mUpdateProgress);
                             resetHideCallbacks();
                             updateForStoppedState(false);
                             break;
-                        case SessionPlayer2.PLAYER_STATE_PAUSED:
+                        case SessionPlayer.PLAYER_STATE_PAUSED:
                             mPlayPauseButton.setImageDrawable(
                                     mResources.getDrawable(R.drawable.ic_play_circle_filled, null));
                             mPlayPauseButton.setContentDescription(
                                     mResources.getString(R.string.mcv2_play_button_desc));
                             removeCallbacks(mUpdateProgress);
                             break;
-                        case SessionPlayer2.PLAYER_STATE_ERROR:
-                            MediaControlView2.this.setEnabled(false);
+                        case SessionPlayer.PLAYER_STATE_ERROR:
+                            MediaControlView.this.setEnabled(false);
                             mPlayPauseButton.setImageDrawable(
                                     mResources.getDrawable(R.drawable.ic_play_circle_filled, null));
                             mPlayPauseButton.setContentDescription(
@@ -2322,15 +2365,13 @@
                                         .setCancelable(true)
                                         .show();
                             }
-                        default:
-                            break;
                     }
                     mPrevState = mPlaybackState;
                 }
             }
 
             @Override
-            public void onSeekCompleted(MediaController2 controller, long position) {
+            public void onSeekCompleted(MediaController controller, long position) {
                 if (DEBUG) {
                     Log.d(TAG, "onSeekCompleted(): " + position);
                 }
@@ -2344,7 +2385,7 @@
                     mCurrentSeekPosition = mNextSeekPosition;
 
                     // If the next seek position is set, seek to that position.
-                    mController.seekTo(mNextSeekPosition);
+                    MediaControlView.this.mController.seekTo(mNextSeekPosition);
                     mNextSeekPosition = SEEK_POSITION_NOT_SET;
                 } else {
                     mCurrentSeekPosition = SEEK_POSITION_NOT_SET;
@@ -2358,17 +2399,17 @@
             }
 
             @Override
-            public void onCurrentMediaItemChanged(@NonNull MediaController2 controller,
-                    @NonNull MediaItem2 mediaItem) {
+            public void onCurrentMediaItemChanged(@NonNull MediaController controller,
+                    @NonNull MediaItem mediaItem) {
                 if (DEBUG) {
                     Log.d(TAG, "onCurrentMediaItemChanged(): " + mediaItem);
                 }
-                mMediaMetadata2 = mediaItem.getMetadata();
+                mMediaMetadata = mediaItem.getMetadata();
                 updateMetadata();
             }
 
             @Override
-            public void onPlaybackCompleted(MediaController2 controller) {
+            public void onPlaybackCompleted(MediaController controller) {
                 if (DEBUG) {
                     Log.d(TAG, "onPlaybackCompleted()");
                 }
@@ -2379,37 +2420,37 @@
             }
 
             @Override
-            public void onConnected(@NonNull MediaController2 controller,
-                    @NonNull SessionCommandGroup2 allowedCommands) {
+            public void onConnected(@NonNull MediaController controller,
+                    @NonNull SessionCommandGroup allowedCommands) {
                 if (DEBUG) {
                     Log.d(TAG, "onConnected(): " + allowedCommands);
                 }
                 updateAllowedCommands(allowedCommands);
 
-                MediaItem2 mediaItem = controller.getCurrentMediaItem();
+                MediaItem mediaItem = controller.getCurrentMediaItem();
                 if (mediaItem != null) {
-                    mMediaMetadata2 = mediaItem.getMetadata();
+                    mMediaMetadata = mediaItem.getMetadata();
                     updateMetadata();
                 }
             }
 
             @Override
-            public void onAllowedCommandsChanged(@NonNull MediaController2 controller,
-                    @NonNull SessionCommandGroup2 commands) {
+            public void onAllowedCommandsChanged(@NonNull MediaController controller,
+                    @NonNull SessionCommandGroup commands) {
                 updateAllowedCommands(commands);
             }
 
             @Override
-            public void onPlaylistChanged(@NonNull MediaController2 controller,
-                    @NonNull List<MediaItem2> list,
-                    @Nullable MediaMetadata2 metadata) {
+            public void onPlaylistChanged(@NonNull MediaController controller,
+                    @NonNull List<MediaItem> list,
+                    @Nullable MediaMetadata metadata) {
                 if (DEBUG) {
                     Log.d(TAG, "onPlaylistChanged(): list: " + list);
                 }
             }
 
             @Override
-            public void onPlaybackSpeedChanged(@NonNull MediaController2 controller, float speed) {
+            public void onPlaybackSpeedChanged(@NonNull MediaController controller, float speed) {
                 int customSpeedMultBy100 = Math.round(speed * 100);
                 // An application may set a custom playback speed that is not included in the
                 // default playback speed list. The code below handles adding/removing the custom
@@ -2428,7 +2469,7 @@
                     }
                 } else {
                     String customSpeedText = mResources.getString(
-                            R.string.MediaControlView2_custom_playback_speed_text,
+                            R.string.MediaControlView_custom_playback_speed_text,
                             customSpeedMultBy100 / 100.0f);
 
                     for (int i = 0; i < mPlaybackSpeedMultBy100List.size(); i++) {
@@ -2452,8 +2493,8 @@
             }
 
             @Override
-            public MediaController2.ControllerResult onCustomCommand(
-                    @NonNull MediaController2 controller, @NonNull SessionCommand2 command,
+            public MediaController.ControllerResult onCustomCommand(
+                    @NonNull MediaController controller, @NonNull SessionCommand command,
                     @Nullable Bundle args) {
                 if (DEBUG) {
                     Log.d(TAG, "onCustomCommand(): command: " + command);
@@ -2470,7 +2511,7 @@
                         if (mAudioTrackCount > 0) {
                             for (int i = 0; i < mAudioTrackCount; i++) {
                                 String track = mResources.getString(
-                                        R.string.MediaControlView2_audio_track_number_text, i + 1);
+                                        R.string.MediaControlView_audio_track_number_text, i + 1);
                                 mAudioTrackList.add(track);
                             }
                             // Change sub text inside the Settings window.
@@ -2478,7 +2519,7 @@
                                     mAudioTrackList.get(0));
                         } else {
                             mAudioTrackList.add(mResources.getString(
-                                    R.string.MediaControlView2_audio_track_none_text));
+                                    R.string.MediaControlView_audio_track_none_text));
                         }
                         if (mVideoTrackCount == 0 && mAudioTrackCount > 0) {
                             mMediaType = MEDIA_TYPE_MUSIC;
@@ -2492,18 +2533,18 @@
                             mSubtitleButton.setAlpha(1.0f);
                             mSubtitleButton.setEnabled(true);
                             mSubtitleDescriptionsList.add(mResources.getString(
-                                    R.string.MediaControlView2_subtitle_off_text));
+                                    R.string.MediaControlView_subtitle_off_text));
                             for (int i = 0; i < mSubtitleTrackCount; i++) {
                                 String lang = subtitleTracksLanguageList.get(i);
                                 String track;
                                 if (lang.equals("")) {
                                     track = mResources.getString(
-                                            R.string.MediaControlView2_subtitle_track_number_text,
+                                            R.string.MediaControlView_subtitle_track_number_text,
                                             i + 1);
                                 } else {
                                     track = mResources.getString(
                                             R.string
-                                            .MediaControlView2_subtitle_track_number_and_lang_text,
+                                            .MediaControlView_subtitle_track_number_and_lang_text,
                                             i + 1, lang);
                                 }
                                 mSubtitleDescriptionsList.add(track);
@@ -2546,10 +2587,10 @@
                         }
                         break;
                     default:
-                        return new MediaController2.ControllerResult(
+                        return new MediaController.ControllerResult(
                                 RESULT_CODE_NOT_SUPPORTED, null);
                 }
-                return new MediaController2.ControllerResult(RESULT_CODE_SUCCESS, null);
+                return new MediaController.ControllerResult(RESULT_CODE_SUCCESS, null);
             }
         }
     }
diff --git a/media-widget/src/main/java/androidx/media/widget/RoutePlayer2.java b/media-widget/src/main/java/androidx/media2/widget/RoutePlayer.java
similarity index 90%
rename from media-widget/src/main/java/androidx/media/widget/RoutePlayer2.java
rename to media-widget/src/main/java/androidx/media2/widget/RoutePlayer.java
index 55943fb..3c0210c 100644
--- a/media-widget/src/main/java/androidx/media/widget/RoutePlayer2.java
+++ b/media-widget/src/main/java/androidx/media2/widget/RoutePlayer.java
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_UNKNOWN_ERROR;
 
 import android.content.Context;
 import android.os.Build;
@@ -34,11 +34,11 @@
 import androidx.concurrent.futures.ResolvableFuture;
 import androidx.core.util.Pair;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.RemoteSessionPlayer2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.UriMediaItem2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.RemoteSessionPlayer;
+import androidx.media2.SessionPlayer;
+import androidx.media2.UriMediaItem;
 import androidx.mediarouter.media.MediaItemStatus;
 import androidx.mediarouter.media.MediaRouteSelector;
 import androidx.mediarouter.media.MediaRouter;
@@ -60,8 +60,8 @@
  */
 @RestrictTo(LIBRARY_GROUP)
 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public class RoutePlayer2 extends RemoteSessionPlayer2 {
-    private static final String TAG = "RoutePlayer2";
+public class RoutePlayer extends RemoteSessionPlayer {
+    private static final String TAG = "RoutePlayer";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     String mItemId;
@@ -75,7 +75,7 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final List<ResolvableFuture<PlayerResult>> mPendingVolumeResult = new ArrayList<>();
 
-    private MediaItem2 mItem;
+    private MediaItem mItem;
     private MediaRouter mMediaRouter;
     private RemotePlaybackClient mClient;
 
@@ -91,13 +91,13 @@
                 mPendingVolumeResult.clear();
                 List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
                 for (Pair<PlayerCallback, Executor> pair : callbacks) {
-                    if (pair.first instanceof RemoteSessionPlayer2.Callback) {
-                        final RemoteSessionPlayer2.PlayerCallback callback = pair.first;
+                    if (pair.first instanceof RemoteSessionPlayer.Callback) {
+                        final RemoteSessionPlayer.PlayerCallback callback = pair.first;
                         pair.second.execute(new Runnable() {
                             @Override
                             public void run() {
-                                ((RemoteSessionPlayer2.Callback) callback)
-                                        .onVolumeChanged(RoutePlayer2.this, volume);
+                                ((RemoteSessionPlayer.Callback) callback)
+                                        .onVolumeChanged(RoutePlayer.this, volume);
                             }
                         });
                     }
@@ -124,14 +124,14 @@
                 pair.second.execute(new Runnable() {
                     @Override
                     public void run() {
-                        callback.onPlayerStateChanged(RoutePlayer2.this, mCurrentPlayerState);
+                        callback.onPlayerStateChanged(RoutePlayer.this, mCurrentPlayerState);
                     }
                 });
             }
         }
     };
 
-    public RoutePlayer2(Context context, MediaRouteSelector selector,
+    public RoutePlayer(Context context, MediaRouteSelector selector,
             MediaRouter.RouteInfo route) {
         mMediaRouter = MediaRouter.getInstance(context);
         mMediaRouter.addCallback(selector, mRouterCallback);
@@ -145,7 +145,7 @@
                 public void onResult(Bundle data,
                         String sessionId, MediaSessionStatus sessionStatus) {
                     if (DEBUG && !isSessionActive(sessionStatus)) {
-                        Log.v(TAG, "RoutePlayer2 has been initialized, but session is not"
+                        Log.v(TAG, "RoutePlayer has been initialized, but session is not"
                                 + "active.");
                     }
                 }
@@ -229,7 +229,7 @@
                             pair.second.execute(new Runnable() {
                                 @Override
                                 public void run() {
-                                    callback.onSeekCompleted(RoutePlayer2.this,
+                                    callback.onSeekCompleted(RoutePlayer.this,
                                             itemStatus.getContentPosition());
                                 }
                             });
@@ -270,7 +270,7 @@
 
     @Override
     public int getBufferingState() {
-        return SessionPlayer2.BUFFERING_STATE_UNKNOWN;
+        return SessionPlayer.BUFFERING_STATE_UNKNOWN;
     }
 
     @Override
@@ -285,13 +285,13 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setMediaItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(MediaItem item) {
         mItem = item;
         return createResult();
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return mItem;
     }
 
@@ -340,26 +340,26 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setPlaylist(List<MediaItem2> list,
-            MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> setPlaylist(List<MediaItem> list,
+            MediaMetadata metadata) {
         // TODO: implement
         return createResult(RESULT_CODE_INVALID_STATE);
     }
 
     @Override
-    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem item) {
         // TODO: implement
         return createResult(RESULT_CODE_INVALID_STATE);
     }
 
     @Override
-    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem item) {
         // TODO: implement
         return createResult(RESULT_CODE_INVALID_STATE);
     }
 
     @Override
-    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem item) {
         // TODO: implement
         return createResult(RESULT_CODE_INVALID_STATE);
     }
@@ -377,13 +377,13 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem item) {
         // TODO: implement
         return createResult(RESULT_CODE_INVALID_STATE);
     }
 
     @Override
-    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata metadata) {
         // TODO: implement
         return createResult(RESULT_CODE_INVALID_STATE);
     }
@@ -401,25 +401,25 @@
     }
 
     @Override
-    public List<MediaItem2> getPlaylist() {
-        List<MediaItem2> list = new ArrayList<>();
+    public List<MediaItem> getPlaylist() {
+        List<MediaItem> list = new ArrayList<>();
         list.add(mItem);
         return list;
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         return null;
     }
 
     @Override
     public int getRepeatMode() {
-        return SessionPlayer2.REPEAT_MODE_NONE;
+        return SessionPlayer.REPEAT_MODE_NONE;
     }
 
     @Override
     public int getShuffleMode() {
-        return SessionPlayer2.SHUFFLE_MODE_NONE;
+        return SessionPlayer.SHUFFLE_MODE_NONE;
     }
 
     @Override
@@ -471,12 +471,12 @@
     }
 
     private ListenableFuture<PlayerResult> playInternal() {
-        if (!(mItem instanceof UriMediaItem2)) {
+        if (!(mItem instanceof UriMediaItem)) {
             Log.w(TAG, "Data source type is not Uri." + mItem);
             return createResult(RESULT_CODE_BAD_VALUE);
         }
         final ResolvableFuture<PlayerResult> result = ResolvableFuture.create();
-        mClient.play(((UriMediaItem2) mItem).getUri(), "video/mp4", null, mPosition, null,
+        mClient.play(((UriMediaItem) mItem).getUri(), "video/mp4", null, mPosition, null,
                 new ItemActionCallback() {
                     @Override
                     public void onResult(Bundle data, String sessionId,
diff --git a/media-widget/src/main/java/androidx/media/widget/SubtitleAnchorView.java b/media-widget/src/main/java/androidx/media2/widget/SubtitleAnchorView.java
similarity index 99%
rename from media-widget/src/main/java/androidx/media/widget/SubtitleAnchorView.java
rename to media-widget/src/main/java/androidx/media2/widget/SubtitleAnchorView.java
index dd5b410..049b989 100644
--- a/media-widget/src/main/java/androidx/media/widget/SubtitleAnchorView.java
+++ b/media-widget/src/main/java/androidx/media2/widget/SubtitleAnchorView.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.content.Context;
 import android.graphics.Canvas;
diff --git a/media-widget/src/main/java/androidx/media/widget/VideoSurfaceView.java b/media-widget/src/main/java/androidx/media2/widget/VideoSurfaceView.java
similarity index 94%
rename from media-widget/src/main/java/androidx/media/widget/VideoSurfaceView.java
rename to media-widget/src/main/java/androidx/media2/widget/VideoSurfaceView.java
index 559d6a8..9f0af3b 100644
--- a/media-widget/src/main/java/androidx/media/widget/VideoSurfaceView.java
+++ b/media-widget/src/main/java/androidx/media2/widget/VideoSurfaceView.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
-import static androidx.media.widget.VideoView2.VIEW_TYPE_SURFACEVIEW;
+import static androidx.media2.widget.VideoView.VIEW_TYPE_SURFACEVIEW;
 
 import android.content.Context;
 import android.graphics.Rect;
@@ -30,6 +30,7 @@
 import androidx.annotation.RequiresApi;
 import androidx.core.content.ContextCompat;
 import androidx.media2.MediaPlayer;
+import androidx.media2.VideoSize;
 
 @RequiresApi(21)
 class VideoSurfaceView extends SurfaceView
@@ -146,8 +147,13 @@
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        int videoWidth = (mMediaPlayer == null) ? 0 : mMediaPlayer.getVideoWidth();
-        int videoHeight = (mMediaPlayer == null) ? 0 : mMediaPlayer.getVideoHeight();
+        int videoWidth = 0;
+        int videoHeight = 0;
+        if (mMediaPlayer != null) {
+            VideoSize size = mMediaPlayer.getVideoSize();
+            videoWidth = size.getWidth();
+            videoHeight = size.getHeight();
+        }
         if (DEBUG) {
             Log.d(TAG, "onMeasure(" + MeasureSpec.toString(widthMeasureSpec) + ", "
                     + MeasureSpec.toString(heightMeasureSpec) + ")");
diff --git a/media-widget/src/main/java/androidx/media/widget/VideoTextureView.java b/media-widget/src/main/java/androidx/media2/widget/VideoTextureView.java
similarity index 94%
rename from media-widget/src/main/java/androidx/media/widget/VideoTextureView.java
rename to media-widget/src/main/java/androidx/media2/widget/VideoTextureView.java
index f45081c..7e97682 100644
--- a/media-widget/src/main/java/androidx/media/widget/VideoTextureView.java
+++ b/media-widget/src/main/java/androidx/media2/widget/VideoTextureView.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
-import static androidx.media.widget.VideoView2.VIEW_TYPE_TEXTUREVIEW;
+import static androidx.media2.widget.VideoView.VIEW_TYPE_TEXTUREVIEW;
 
 import android.content.Context;
 import android.graphics.SurfaceTexture;
@@ -29,6 +29,7 @@
 import androidx.annotation.RequiresApi;
 import androidx.core.content.ContextCompat;
 import androidx.media2.MediaPlayer;
+import androidx.media2.VideoSize;
 
 @RequiresApi(21)
 class VideoTextureView extends TextureView
@@ -149,8 +150,13 @@
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        int videoWidth = (mMediaPlayer == null) ? 0 : mMediaPlayer.getVideoWidth();
-        int videoHeight = (mMediaPlayer == null) ? 0 : mMediaPlayer.getVideoHeight();
+        int videoWidth = 0;
+        int videoHeight = 0;
+        if (mMediaPlayer != null) {
+            VideoSize size = mMediaPlayer.getVideoSize();
+            videoWidth = size.getWidth();
+            videoHeight = size.getHeight();
+        }
         if (DEBUG) {
             Log.d(TAG, "onMeasure(" + MeasureSpec.toString(widthMeasureSpec) + ", "
                     + MeasureSpec.toString(heightMeasureSpec) + ")");
diff --git a/media-widget/src/main/java/androidx/media/widget/VideoView2.java b/media-widget/src/main/java/androidx/media2/widget/VideoView.java
similarity index 71%
rename from media-widget/src/main/java/androidx/media/widget/VideoView2.java
rename to media-widget/src/main/java/androidx/media2/widget/VideoView.java
index 732e7ef..d6d7baf 100644
--- a/media-widget/src/main/java/androidx/media/widget/VideoView2.java
+++ b/media-widget/src/main/java/androidx/media2/widget/VideoView.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
@@ -27,7 +27,6 @@
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
-import android.widget.VideoView;
 
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
@@ -35,25 +34,25 @@
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.MediaItem2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaItem;
+import androidx.media2.SessionToken;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
 /**
- * Displays a video file.  VideoView2 class is a ViewGroup class which is wrapping
+ * Displays a video file.  VideoView class is a ViewGroup class which is wrapping
  * {@link MediaPlayer} so that developers can easily implement a video rendering application.
  *
  * <p>
- * <em> Data sources that VideoView2 supports : </em>
- * VideoView2 can play video files and audio-only files as
+ * <em> Data sources that VideoView supports : </em>
+ * VideoView can play video files and audio-only files as
  * well. It can load from various sources such as resources or content providers. The supported
  * media file formats are the same as {@link MediaPlayer}.
  *
  * <p>
  * <em> View type can be selected : </em>
- * VideoView2 can render videos on top of TextureView as well as
+ * VideoView can render videos on top of TextureView as well as
  * SurfaceView selectively. The default is SurfaceView and it can be changed using
  * {@link #setViewType(int)} method. Using SurfaceView is recommended in most cases for saving
  * battery. TextureView might be preferred for supporting various UIs such as animation and
@@ -61,24 +60,24 @@
  *
  * <p>
  * <em> Differences between {@link VideoView} class : </em>
- * VideoView2 covers and inherits the most of
+ * VideoView covers and inherits the most of
  * VideoView's functionality. The main differences are
  * <ul>
- * <li> VideoView2 inherits ViewGroup and renders videos using SurfaceView and TextureView
+ * <li> VideoView inherits ViewGroup and renders videos using SurfaceView and TextureView
  * selectively while VideoView inherits SurfaceView class.
- * <li> VideoView2 is integrated with MediaControlView2 and a default MediaControlView2 instance is
- * attached to VideoView2 by default.
- * <li> If a developer wants to attach a custom MediaControlView2,
- * assign the custom media control widget using {@link #setMediaControlView2}.
- * <li> VideoView2 is integrated with MediaSession and so it responses with media key events.
- * A VideoView2 keeps a MediaSession instance internally and connects it to a corresponding
- * MediaControlView2 instance.
+ * <li> VideoView is integrated with MediaControlView and a default MediaControlView instance is
+ * attached to VideoView by default.
+ * <li> If a developer wants to attach a custom MediaControlView,
+ * assign the custom media control widget using {@link #setMediaControlView}.
+ * <li> VideoView is integrated with MediaSession and so it responses with media key events.
+ * A VideoView keeps a MediaSession instance internally and connects it to a corresponding
+ * MediaControlView instance.
  * </p>
  * </ul>
  *
  * <p>
  * <em> Audio focus and audio attributes : </em>
- * VideoView2 requests audio focus with {@link AudioManager#AUDIOFOCUS_GAIN} internally,
+ * VideoView requests audio focus with {@link AudioManager#AUDIOFOCUS_GAIN} internally,
  * when playing a media content.
  * The default {@link AudioAttributesCompat} used during playback have a usage of
  * {@link AudioAttributesCompat#USAGE_MEDIA} and a content type of
@@ -86,15 +85,15 @@
  * use {@link #setAudioAttributes(AudioAttributesCompat)} to modify them.
  *
  * <p>
- * Note: VideoView2 does not retain its full state when going into the background. In particular, it
+ * Note: VideoView does not retain its full state when going into the background. In particular, it
  * does not restore the current play state, play position, selected tracks. Applications should save
  * and restore these on their own in {@link android.app.Activity#onSaveInstanceState} and
  * {@link android.app.Activity#onRestoreInstanceState}.
- * @attr ref androidx.media.widget.R.styleable#VideoView2_enableControlView
- * @attr ref androidx.media.widget.R.styleable#VideoView2_viewType
+ * @attr ref androidx.media2.widget.R.styleable#VideoView_enableControlView
+ * @attr ref androidx.media2.widget.R.styleable#VideoView_viewType
  */
 @TargetApi(Build.VERSION_CODES.P)
-public class VideoView2 extends BaseLayout {
+public class VideoView extends BaseLayout {
     /** @hide */
     @RestrictTo(LIBRARY_GROUP)
     @IntDef({
@@ -118,58 +117,58 @@
      */
     public static final int VIEW_TYPE_TEXTUREVIEW = 1;
 
-    private static final String TAG = "VideoView2";
+    private static final String TAG = "VideoView";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
-    private VideoView2Impl mImpl;
+    private VideoViewImpl mImpl;
 
-    public VideoView2(@NonNull Context context) {
+    public VideoView(@NonNull Context context) {
         this(context, null);
     }
 
-    public VideoView2(@NonNull Context context, @Nullable AttributeSet attrs) {
+    public VideoView(@NonNull Context context, @Nullable AttributeSet attrs) {
         this(context, attrs, 0);
     }
 
-    public VideoView2(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+    public VideoView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
         if (DEBUG) {
-            Log.d(TAG, "Create VideoView2ImplBase");
+            Log.d(TAG, "Create VideoViewImplBase");
         }
-        mImpl = new VideoView2ImplBase();
+        mImpl = new VideoViewImplBase();
         mImpl.initialize(this, context, attrs, defStyleAttr);
     }
 
     /**
-     * Sets MediaControlView2 instance. It will replace the previously assigned MediaControlView2
+     * Sets MediaControlView instance. It will replace the previously assigned MediaControlView
      * instance if any.
      *
      * @param mediaControlView a media control view2 instance.
-     * @param intervalMs a time interval in milliseconds until VideoView2 hides MediaControlView2.
+     * @param intervalMs a time interval in milliseconds until VideoView hides MediaControlView.
      */
-    public void setMediaControlView2(@NonNull MediaControlView2 mediaControlView, long intervalMs) {
-        mImpl.setMediaControlView2(mediaControlView, intervalMs);
+    public void setMediaControlView(@NonNull MediaControlView mediaControlView, long intervalMs) {
+        mImpl.setMediaControlView(mediaControlView, intervalMs);
     }
 
     /**
-     * Returns MediaControlView2 instance which is currently attached to VideoView2 by default or by
-     * {@link #setMediaControlView2} method.
+     * Returns MediaControlView instance which is currently attached to VideoView by default or by
+     * {@link #setMediaControlView} method.
      */
     @Nullable
-    public MediaControlView2 getMediaControlView2() {
-        return mImpl.getMediaControlView2();
+    public MediaControlView getMediaControlView() {
+        return mImpl.getMediaControlView();
     }
 
     /**
-     * Returns {@link SessionToken2} so that developers create their own
-     * {@link androidx.media2.MediaController2} instance. This method should be called when
-     * VideoView2 is attached to window, or it throws IllegalStateException.
+     * Returns {@link SessionToken} so that developers create their own
+     * {@link androidx.media2.MediaController} instance. This method should be called when
+     * VideoView is attached to window, or it throws IllegalStateException.
      *
      * @throws IllegalStateException if internal MediaSession is not created yet.
      */
     @NonNull
-    public SessionToken2 getMediaSessionToken2() {
-        return mImpl.getMediaSessionToken2();
+    public SessionToken getSessionToken() {
+        return mImpl.getSessionToken();
     }
 
     /**
@@ -182,11 +181,11 @@
     }
 
     /**
-     * Sets {@link MediaItem2} object to render using VideoView2.
+     * Sets {@link MediaItem} object to render using VideoView.
      * @param mediaItem the MediaItem2 to play
      */
-    public void setMediaItem2(@NonNull MediaItem2 mediaItem) {
-        mImpl.setMediaItem2(mediaItem);
+    public void setMediaItem(@NonNull MediaItem mediaItem) {
+        mImpl.setMediaItem(mediaItem);
     }
 
     /**
@@ -244,7 +243,7 @@
 
     @Override
     public CharSequence getAccessibilityClassName() {
-        return VideoView2.class.getName();
+        return VideoView.class.getName();
     }
 
     @Override
diff --git a/media-widget/src/main/java/androidx/media/widget/VideoView2Impl.java b/media-widget/src/main/java/androidx/media2/widget/VideoViewImpl.java
similarity index 63%
rename from media-widget/src/main/java/androidx/media/widget/VideoView2Impl.java
rename to media-widget/src/main/java/androidx/media2/widget/VideoViewImpl.java
index 10db526..844ae51 100644
--- a/media-widget/src/main/java/androidx/media/widget/VideoView2Impl.java
+++ b/media-widget/src/main/java/androidx/media2/widget/VideoViewImpl.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.content.Context;
 import android.util.AttributeSet;
@@ -23,41 +23,41 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.MediaItem2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaItem;
+import androidx.media2.SessionToken;
 
 /**
  * Interface for impl classes.
  */
-interface VideoView2Impl {
+interface VideoViewImpl {
     void initialize(
-            VideoView2 instance, Context context,
+            VideoView instance, Context context,
             @Nullable AttributeSet attrs, int defStyleAttr);
 
     /**
-     * Sets MediaControlView2 instance. It will replace the previously assigned MediaControlView2
+     * Sets MediaControlView instance. It will replace the previously assigned MediaControlView
      * instance if any.
      *
      * @param mediaControlView a media control view2 instance.
-     * @param intervalMs a time interval in milliseconds until VideoView2 hides MediaControlView2.
+     * @param intervalMs a time interval in milliseconds until VideoView hides MediaControlView.
      */
-    void setMediaControlView2(@NonNull MediaControlView2 mediaControlView, long intervalMs);
+    void setMediaControlView(@NonNull MediaControlView mediaControlView, long intervalMs);
 
     /**
-     * Returns MediaControlView2 instance which is currently attached to VideoView2 by default or by
-     * {@link #setMediaControlView2} method.
+     * Returns MediaControlView instance which is currently attached to VideoView by default or by
+     * {@link #setMediaControlView} method.
      */
-    MediaControlView2 getMediaControlView2();
+    MediaControlView getMediaControlView();
 
     /**
-     * Returns {@link SessionToken2} so that developers create their own
-     * {@link androidx.media2.MediaController2} instance. This method should be called when
-     * VideoView2 is attached to window, or it throws IllegalStateException.
+     * Returns {@link SessionToken} so that developers create their own
+     * {@link androidx.media2.MediaController} instance. This method should be called when
+     * VideoView is attached to window, or it throws IllegalStateException.
      *
      * @throws IllegalStateException if internal MediaSession is not created yet.
      */
     @NonNull
-    SessionToken2 getMediaSessionToken2();
+    SessionToken getSessionToken();
 
     /**
      * Sets the {@link AudioAttributesCompat} to be used during the playback of the video.
@@ -67,29 +67,29 @@
     void setAudioAttributes(@NonNull AudioAttributesCompat attributes);
 
     /**
-     * Sets {@link MediaItem2} object to render using VideoView2.
+     * Sets {@link MediaItem} object to render using VideoView.
      *
-     * @param mediaItem the MediaItem2 to play
+     * @param mediaItem the MediaItem to play
      */
-    void setMediaItem2(@NonNull MediaItem2 mediaItem);
+    void setMediaItem(@NonNull MediaItem mediaItem);
 
     /**
      * Selects which view will be used to render video between SurfaceView and TextureView.
      *
      * @param viewType the view type to render video
      * <ul>
-     * <li>{@link VideoView2#VIEW_TYPE_SURFACEVIEW}
-     * <li>{@link VideoView2#VIEW_TYPE_TEXTUREVIEW}
+     * <li>{@link VideoView#VIEW_TYPE_SURFACEVIEW}
+     * <li>{@link VideoView#VIEW_TYPE_TEXTUREVIEW}
      * </ul>
      */
-    void setViewType(@VideoView2.ViewType int viewType);
+    void setViewType(@VideoView.ViewType int viewType);
 
     /**
      * Returns view type.
      *
      * @return view type. See {@see setViewType}.
      */
-    @VideoView2.ViewType
+    @VideoView.ViewType
     int getViewType();
 
     /**
@@ -97,7 +97,7 @@
      * {@see #setViewType(int)}
      * @param l The callback that will be run
      */
-    void setOnViewTypeChangedListener(VideoView2.OnViewTypeChangedListener l);
+    void setOnViewTypeChangedListener(VideoView.OnViewTypeChangedListener l);
 
     void onAttachedToWindowImpl();
 
diff --git a/media-widget/src/main/java/androidx/media/widget/VideoView2ImplBase.java b/media-widget/src/main/java/androidx/media2/widget/VideoViewImplBase.java
similarity index 77%
rename from media-widget/src/main/java/androidx/media/widget/VideoView2ImplBase.java
rename to media-widget/src/main/java/androidx/media2/widget/VideoViewImplBase.java
index a0dedb3..d7cf8d9 100644
--- a/media-widget/src/main/java/androidx/media/widget/VideoView2ImplBase.java
+++ b/media-widget/src/main/java/androidx/media2/widget/VideoViewImplBase.java
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
 
 import android.content.Context;
 import android.content.pm.ActivityInfo;
@@ -47,19 +47,20 @@
 import androidx.annotation.RequiresApi;
 import androidx.core.content.ContextCompat;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
 import androidx.media2.MediaPlayer;
 import androidx.media2.MediaPlayer2;
-import androidx.media2.MediaSession2;
-import androidx.media2.RemoteSessionPlayer2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.SessionToken2;
-import androidx.media2.SubtitleData2;
-import androidx.media2.UriMediaItem2;
+import androidx.media2.MediaSession;
+import androidx.media2.RemoteSessionPlayer;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
+import androidx.media2.SessionToken;
+import androidx.media2.SubtitleData;
+import androidx.media2.UriMediaItem;
+import androidx.media2.VideoSize;
 import androidx.media2.subtitle.Cea708CaptionRenderer;
 import androidx.media2.subtitle.ClosedCaptionRenderer;
 import androidx.media2.subtitle.SubtitleController;
@@ -74,11 +75,11 @@
 import java.util.concurrent.Executor;
 
 /**
- * Base implementation of VideoView2.
+ * Base implementation of VideoView.
  */
 @RequiresApi(28)
-class VideoView2ImplBase implements VideoView2Impl, VideoViewInterface.SurfaceListener {
-    private static final String TAG = "VideoView2ImplBase";
+class VideoViewImplBase implements VideoViewImpl, VideoViewInterface.SurfaceListener {
+    private static final String TAG = "VideoViewImplBase";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     private static final int STATE_ERROR = -1;
@@ -97,17 +98,17 @@
 
     private AudioAttributesCompat mAudioAttributes;
 
-    private VideoView2.OnViewTypeChangedListener mViewTypeChangedListener;
+    private VideoView.OnViewTypeChangedListener mViewTypeChangedListener;
 
     VideoViewInterface mCurrentView;
     VideoViewInterface mTargetView;
     private VideoTextureView mTextureView;
     private VideoSurfaceView mSurfaceView;
 
-    VideoView2Player mMediaPlayer;
-    MediaItem2 mMediaItem;
-    MediaControlView2 mMediaControlView;
-    MediaSession2 mMediaSession;
+    VideoViewPlayer mMediaPlayer;
+    MediaItem mMediaItem;
+    MediaControlView mMediaControlView;
+    MediaSession mMediaSession;
     private String mTitle;
     Executor mCallbackExecutor;
 
@@ -141,13 +142,13 @@
 
     private SubtitleAnchorView mSubtitleAnchorView;
 
-    VideoView2 mInstance;
+    VideoView mInstance;
 
     private MediaRouter mMediaRouter;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     MediaRouteSelector mRouteSelector;
     MediaRouter.RouteInfo mRoute;
-    RoutePlayer2 mRoutePlayer;
+    RoutePlayer mRoutePlayer;
 
     private final MediaRouter.Callback mRouterCallback = new MediaRouter.Callback() {
         @Override
@@ -161,8 +162,8 @@
                 // Update player
                 resetPlayer();
                 mRoute = route;
-                mRoutePlayer = new RoutePlayer2(mInstance.getContext(), mRouteSelector, route);
-                // TODO: Replace with MediaSession2#setPlaylist once b/110811730 is fixed.
+                mRoutePlayer = new RoutePlayer(mInstance.getContext(), mRouteSelector, route);
+                // TODO: Replace with MediaSession#setPlaylist once b/110811730 is fixed.
                 mRoutePlayer.setMediaItem(mMediaItem);
                 mRoutePlayer.setCurrentPosition(localPlaybackPosition);
                 ensureSessionWithPlayer(mRoutePlayer);
@@ -188,7 +189,7 @@
             if (reason != MediaRouter.UNSELECT_REASON_ROUTE_CHANGED) {
                 openVideo();
                 mMediaSession.getPlayer().seekTo(currentPosition);
-                if (currentState == SessionPlayer2.PLAYER_STATE_PLAYING) {
+                if (currentState == SessionPlayer.PLAYER_STATE_PLAYING) {
                     mMediaSession.getPlayer().play();
                 }
             }
@@ -197,7 +198,7 @@
 
     @Override
     public void initialize(
-            VideoView2 instance, Context context,
+            VideoView instance, Context context,
             @Nullable AttributeSet attrs, int defStyleAttr) {
         mInstance = instance;
 
@@ -242,22 +243,22 @@
                 "http://schemas.android.com/apk/res-auto",
                 "enableControlView", true);
         if (enableControlView) {
-            mMediaControlView = new MediaControlView2(context);
+            mMediaControlView = new MediaControlView(context);
         }
 
         // Choose surface view by default
-        int viewType = (attrs == null) ? VideoView2.VIEW_TYPE_SURFACEVIEW
+        int viewType = (attrs == null) ? VideoView.VIEW_TYPE_SURFACEVIEW
                 : attrs.getAttributeIntValue(
                 "http://schemas.android.com/apk/res-auto",
-                "viewType", VideoView2.VIEW_TYPE_SURFACEVIEW);
-        if (viewType == VideoView2.VIEW_TYPE_SURFACEVIEW) {
+                "viewType", VideoView.VIEW_TYPE_SURFACEVIEW);
+        if (viewType == VideoView.VIEW_TYPE_SURFACEVIEW) {
             if (DEBUG) {
                 Log.d(TAG, "viewType attribute is surfaceView.");
             }
             mTextureView.setVisibility(View.GONE);
             mSurfaceView.setVisibility(View.VISIBLE);
             mCurrentView = mSurfaceView;
-        } else if (viewType == VideoView2.VIEW_TYPE_TEXTUREVIEW) {
+        } else if (viewType == VideoView.VIEW_TYPE_TEXTUREVIEW) {
             if (DEBUG) {
                 Log.d(TAG, "viewType attribute is textureView.");
             }
@@ -275,14 +276,14 @@
     }
 
     /**
-     * Sets MediaControlView2 instance. It will replace the previously assigned MediaControlView2
+     * Sets MediaControlView instance. It will replace the previously assigned MediaControlView
      * instance if any.
      *
      * @param mediaControlView a media control view2 instance.
-     * @param intervalMs a time interval in milliseconds until VideoView2 hides MediaControlView2.
+     * @param intervalMs a time interval in milliseconds until VideoView hides MediaControlView.
      */
     @Override
-    public void setMediaControlView2(@NonNull MediaControlView2 mediaControlView, long intervalMs) {
+    public void setMediaControlView(@NonNull MediaControlView mediaControlView, long intervalMs) {
         mMediaControlView = mediaControlView;
         mMediaControlView.setShowControllerInterval(intervalMs);
 
@@ -292,26 +293,26 @@
     }
 
     /**
-     * Returns MediaControlView2 instance which is currently attached to VideoView2 by default or by
-     * {@link #setMediaControlView2} method.
+     * Returns MediaControlView instance which is currently attached to VideoView by default or by
+     * {@link #setMediaControlView} method.
      */
     @Override
-    public MediaControlView2 getMediaControlView2() {
+    public MediaControlView getMediaControlView() {
         return mMediaControlView;
     }
 
     /**
-     * Returns {@link SessionToken2} so that developers create their own
-     * {@link androidx.media2.MediaController2} instance. This method should be called when
-     * VideoView2 is attached to window or after {@link #setMediaItem2} is called.
+     * Returns {@link SessionToken} so that developers create their own
+     * {@link androidx.media2.MediaController} instance. This method should be called when
+     * VideoView is attached to window or after {@link #setMediaItem} is called.
      *
      * @throws IllegalStateException if internal MediaSession is not created yet.
      */
     @Override
     @NonNull
-    public SessionToken2 getMediaSessionToken2() {
+    public SessionToken getSessionToken() {
         if (mMediaSession == null) {
-            throw new IllegalStateException("MediaSession2 instance is not available.");
+            throw new IllegalStateException("MediaSession instance is not available.");
         }
         return mMediaSession.getToken();
     }
@@ -330,11 +331,11 @@
     }
 
     /**
-     * Sets {@link MediaItem2} object to render using VideoView2.
-     * @param mediaItem the MediaItem2 to play
+     * Sets {@link MediaItem} object to render using VideoView.
+     * @param mediaItem the MediaItem to play
      */
     @Override
-    public void setMediaItem2(@NonNull MediaItem2 mediaItem) {
+    public void setMediaItem(@NonNull MediaItem mediaItem) {
         mSeekWhenPrepared = 0;
         mMediaItem = mediaItem;
         openVideo();
@@ -345,21 +346,21 @@
      *
      * @param viewType the view type to render video
      * <ul>
-     * <li>{@link VideoView2#VIEW_TYPE_SURFACEVIEW}
-     * <li>{@link VideoView2#VIEW_TYPE_TEXTUREVIEW}
+     * <li>{@link VideoView#VIEW_TYPE_SURFACEVIEW}
+     * <li>{@link VideoView#VIEW_TYPE_TEXTUREVIEW}
      * </ul>
      */
     @Override
-    public void setViewType(@VideoView2.ViewType int viewType) {
+    public void setViewType(@VideoView.ViewType int viewType) {
         if (viewType == mTargetView.getViewType()) {
             Log.d(TAG, "setViewType with the same type (" + viewType + ") is ignored.");
             return;
         }
         VideoViewInterface targetView;
-        if (viewType == VideoView2.VIEW_TYPE_TEXTUREVIEW) {
+        if (viewType == VideoView.VIEW_TYPE_TEXTUREVIEW) {
             Log.d(TAG, "switching to TextureView");
             targetView = mTextureView;
-        } else if (viewType == VideoView2.VIEW_TYPE_SURFACEVIEW) {
+        } else if (viewType == VideoView.VIEW_TYPE_SURFACEVIEW) {
             Log.d(TAG, "switching to SurfaceView");
             targetView = mSurfaceView;
         } else {
@@ -377,7 +378,7 @@
      *
      * @return view type. See {@see setViewType}.
      */
-    @VideoView2.ViewType
+    @VideoView.ViewType
     @Override
     public int getViewType() {
         return mCurrentView.getViewType();
@@ -389,16 +390,16 @@
      * @param l The callback that will be run
      */
     @Override
-    public void setOnViewTypeChangedListener(VideoView2.OnViewTypeChangedListener l) {
+    public void setOnViewTypeChangedListener(VideoView.OnViewTypeChangedListener l) {
         mViewTypeChangedListener = l;
     }
 
     @Override
     public void onAttachedToWindowImpl() {
-        // Note: MediaPlayer2 and MediaSession2 instances are created in onAttachedToWindow()
+        // Note: MediaPlayer2 and MediaSession instances are created in onAttachedToWindow()
         // and closed in onDetachedFromWindow().
         if (mMediaPlayer == null) {
-            mMediaPlayer = new VideoView2Player(mInstance.getContext());
+            mMediaPlayer = new VideoViewPlayer(mInstance.getContext());
 
             mSurfaceView.setMediaPlayer(mMediaPlayer);
             mTextureView.setMediaPlayer(mMediaPlayer);
@@ -555,16 +556,16 @@
     ///////////////////////////////////////////////////
     private void attachMediaControlView() {
         // Get MediaController from MediaSession and set it inside MediaControlView
-        mMediaControlView.setMediaSessionToken2(mMediaSession.getToken());
+        mMediaControlView.setSessionToken(mMediaSession.getToken());
 
         LayoutParams params =
                 new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
         mInstance.addView(mMediaControlView, params);
     }
 
-    void ensureSessionWithPlayer(SessionPlayer2 player) {
+    void ensureSessionWithPlayer(SessionPlayer player) {
         if (mMediaSession != null) {
-            SessionPlayer2 oldPlayer = mMediaSession.getPlayer();
+            SessionPlayer oldPlayer = mMediaSession.getPlayer();
             if (oldPlayer == player) {
                 return;
             }
@@ -572,8 +573,8 @@
             mMediaSession.updatePlayer(player);
         } else {
             final Context context = mInstance.getContext();
-            mMediaSession = new MediaSession2.Builder(context, player)
-                    .setId("VideoView2_" + mInstance.toString())
+            mMediaSession = new MediaSession.Builder(context, player)
+                    .setId("VideoView_" + mInstance.toString())
                     .setSessionCallback(mCallbackExecutor, new MediaSessionCallback())
                     .build();
         }
@@ -582,8 +583,8 @@
 
     private boolean isMediaPrepared() {
         return mMediaSession != null
-                && mMediaSession.getPlayer().getPlayerState() != SessionPlayer2.PLAYER_STATE_ERROR
-                && mMediaSession.getPlayer().getPlayerState() != SessionPlayer2.PLAYER_STATE_IDLE;
+                && mMediaSession.getPlayer().getPlayerState() != SessionPlayer.PLAYER_STATE_ERROR
+                && mMediaSession.getPlayer().getPlayerState() != SessionPlayer.PLAYER_STATE_IDLE;
     }
 
     boolean needToStart() {
@@ -609,7 +610,7 @@
 
         try {
             if (mMediaPlayer == null) {
-                mMediaPlayer = new VideoView2Player(mInstance.getContext());
+                mMediaPlayer = new VideoViewPlayer(mInstance.getContext());
             }
             mSurfaceView.setMediaPlayer(mMediaPlayer);
             mTextureView.setMediaPlayer(mMediaPlayer);
@@ -658,7 +659,7 @@
     boolean isRemotePlayback() {
         return mRoutePlayer != null
                 && mMediaSession != null
-                && (mMediaSession.getPlayer() instanceof RemoteSessionPlayer2);
+                && (mMediaSession.getPlayer() instanceof RemoteSessionPlayer);
     }
 
     void selectSubtitleTrack(int trackIndex) {
@@ -673,10 +674,10 @@
             mSubtitleAnchorView.setVisibility(View.VISIBLE);
 
             Bundle data = new Bundle();
-            data.putInt(MediaControlView2.KEY_SELECTED_SUBTITLE_INDEX,
+            data.putInt(MediaControlView.KEY_SELECTED_SUBTITLE_INDEX,
                     mSubtitleTracks.indexOfKey(trackIndex));
             mMediaSession.broadcastCustomCommand(
-                    new SessionCommand2(MediaControlView2.EVENT_UPDATE_SUBTITLE_SELECTED, null),
+                    new SessionCommand(MediaControlView.EVENT_UPDATE_SUBTITLE_SELECTED, null),
                     data);
         }
     }
@@ -690,7 +691,7 @@
         mSubtitleAnchorView.setVisibility(View.GONE);
 
         mMediaSession.broadcastCustomCommand(
-                new SessionCommand2(MediaControlView2.EVENT_UPDATE_SUBTITLE_DESELECTED, null),
+                new SessionCommand(MediaControlView.EVENT_UPDATE_SUBTITLE_DESELECTED, null),
                 null);
     }
 
@@ -728,23 +729,23 @@
         }
 
         Bundle data = new Bundle();
-        data.putInt(MediaControlView2.KEY_VIDEO_TRACK_COUNT, mVideoTrackIndices.size());
-        data.putInt(MediaControlView2.KEY_AUDIO_TRACK_COUNT, mAudioTrackIndices.size());
-        data.putInt(MediaControlView2.KEY_SUBTITLE_TRACK_COUNT, mSubtitleTracks.size());
-        data.putStringArrayList(MediaControlView2.KEY_SUBTITLE_TRACK_LANGUAGE_LIST,
+        data.putInt(MediaControlView.KEY_VIDEO_TRACK_COUNT, mVideoTrackIndices.size());
+        data.putInt(MediaControlView.KEY_AUDIO_TRACK_COUNT, mAudioTrackIndices.size());
+        data.putInt(MediaControlView.KEY_SUBTITLE_TRACK_COUNT, mSubtitleTracks.size());
+        data.putStringArrayList(MediaControlView.KEY_SUBTITLE_TRACK_LANGUAGE_LIST,
                 subtitleTracksLanguageList);
         return data;
     }
 
     // TODO: move this method inside callback to make sure it runs inside the callback thread.
-    MediaMetadata2 extractMetadata() {
+    MediaMetadata extractMetadata() {
         MediaMetadataRetriever retriever = null;
         String path = "";
         try {
             if (mMediaItem == null) {
                 return null;
-            } else if (mMediaItem instanceof UriMediaItem2) {
-                Uri uri = ((UriMediaItem2) mMediaItem).getUri();
+            } else if (mMediaItem instanceof UriMediaItem) {
+                Uri uri = ((UriMediaItem) mMediaItem).getUri();
 
                 // Save file name as title since the file may not have a title Metadata.
                 String scheme = uri.getScheme();
@@ -757,31 +758,31 @@
                 }
                 retriever = new MediaMetadataRetriever();
                 retriever.setDataSource(mInstance.getContext(), uri);
-            } else if (mMediaItem instanceof FileMediaItem2) {
+            } else if (mMediaItem instanceof FileMediaItem) {
                 retriever = new MediaMetadataRetriever();
                 retriever.setDataSource(
-                        ((FileMediaItem2) mMediaItem).getFileDescriptor(),
-                        ((FileMediaItem2) mMediaItem).getFileDescriptorOffset(),
-                        ((FileMediaItem2) mMediaItem).getFileDescriptorLength());
+                        ((FileMediaItem) mMediaItem).getFileDescriptor(),
+                        ((FileMediaItem) mMediaItem).getFileDescriptorOffset(),
+                        ((FileMediaItem) mMediaItem).getFileDescriptorLength());
             }
         } catch (IllegalArgumentException e) {
             Log.v(TAG, "Cannot retrieve metadata for this media file.");
             retriever = null;
         }
 
-        MediaMetadata2 metadata = mMediaItem.getMetadata();
+        MediaMetadata metadata = mMediaItem.getMetadata();
         if (!mIsMusicMediaType) {
-            mTitle = extractString(metadata, MediaMetadata2.METADATA_KEY_TITLE, retriever,
+            mTitle = extractString(metadata, MediaMetadata.METADATA_KEY_TITLE, retriever,
                     MediaMetadataRetriever.METADATA_KEY_TITLE, path);
         } else {
             Resources resources = mInstance.getResources();
             mManager = (WindowManager) mInstance.getContext().getApplicationContext()
                     .getSystemService(Context.WINDOW_SERVICE);
 
-            mTitle = extractString(metadata, MediaMetadata2.METADATA_KEY_TITLE, retriever,
+            mTitle = extractString(metadata, MediaMetadata.METADATA_KEY_TITLE, retriever,
                     MediaMetadataRetriever.METADATA_KEY_TITLE,
                     resources.getString(R.string.mcv2_music_title_unknown_text));
-            mMusicArtistText = extractString(metadata, MediaMetadata2.METADATA_KEY_ARTIST,
+            mMusicArtistText = extractString(metadata, MediaMetadata.METADATA_KEY_ARTIST,
                     retriever, MediaMetadataRetriever.METADATA_KEY_ARTIST,
                     resources.getString(R.string.mcv2_music_artist_unknown_text));
             mMusicAlbumDrawable = extractAlbumArt(metadata, retriever,
@@ -799,24 +800,24 @@
             updateCurrentMusicView(mMusicEmbeddedView);
         }
 
-        // Set duration and title values as MediaMetadata2 for MediaControlView2
-        MediaMetadata2.Builder builder = new MediaMetadata2.Builder();
+        // Set duration and title values as MediaMetadata for MediaControlView
+        MediaMetadata.Builder builder = new MediaMetadata.Builder();
 
         if (mIsMusicMediaType) {
-            builder.putString(MediaMetadata2.METADATA_KEY_ARTIST, mMusicArtistText);
+            builder.putString(MediaMetadata.METADATA_KEY_ARTIST, mMusicArtistText);
         }
-        builder.putString(MediaMetadata2.METADATA_KEY_TITLE, mTitle);
+        builder.putString(MediaMetadata.METADATA_KEY_TITLE, mTitle);
         builder.putLong(
-                MediaMetadata2.METADATA_KEY_DURATION, mMediaSession.getPlayer().getDuration());
+                MediaMetadata.METADATA_KEY_DURATION, mMediaSession.getPlayer().getDuration());
         builder.putString(
-                MediaMetadata2.METADATA_KEY_MEDIA_ID, mMediaItem.getMediaId());
-        builder.putLong(MediaMetadata2.METADATA_KEY_BROWSABLE, MediaMetadata2.BROWSABLE_TYPE_NONE);
-        builder.putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1);
+                MediaMetadata.METADATA_KEY_MEDIA_ID, mMediaItem.getMediaId());
+        builder.putLong(MediaMetadata.METADATA_KEY_BROWSABLE, MediaMetadata.BROWSABLE_TYPE_NONE);
+        builder.putLong(MediaMetadata.METADATA_KEY_PLAYABLE, 1);
         return builder.build();
     }
 
     // TODO: move this method inside callback to make sure it runs inside the callback thread.
-    private String extractString(MediaMetadata2 metadata, String stringKey,
+    private String extractString(MediaMetadata metadata, String stringKey,
             MediaMetadataRetriever retriever, int intKey, String defaultValue) {
         String value = null;
 
@@ -833,12 +834,12 @@
     }
 
     // TODO: move this method inside callback to make sure it runs inside the callback thread.
-    private Drawable extractAlbumArt(MediaMetadata2 metadata, MediaMetadataRetriever retriever,
+    private Drawable extractAlbumArt(MediaMetadata metadata, MediaMetadataRetriever retriever,
             Drawable defaultDrawable) {
         Bitmap bitmap = null;
 
-        if (metadata != null && metadata.containsKey(MediaMetadata2.METADATA_KEY_ALBUM_ART)) {
-            bitmap = metadata.getBitmap(MediaMetadata2.METADATA_KEY_ALBUM_ART);
+        if (metadata != null && metadata.containsKey(MediaMetadata.METADATA_KEY_ALBUM_ART)) {
+            bitmap = metadata.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART);
         } else if (retriever != null) {
             byte[] album = retriever.getEmbeddedPicture();
             if (album != null) {
@@ -898,9 +899,10 @@
             new MediaPlayer.PlayerCallback() {
                 @Override
                 public void onVideoSizeChanged(
-                        MediaPlayer mp, MediaItem2 dsd, int width, int height) {
+                        MediaPlayer mp, MediaItem dsd, VideoSize size) {
                     if (DEBUG) {
-                        Log.d(TAG, "onVideoSizeChanged(): size: " + width + "/" + height);
+                        Log.d(TAG, "onVideoSizeChanged(): size: " + size.getWidth() + "/"
+                                + size.getHeight());
                     }
                     if (mp != mMediaPlayer) {
                         if (DEBUG) {
@@ -908,8 +910,8 @@
                         }
                         return;
                     }
-                    mVideoWidth = width;
-                    mVideoHeight = height;
+                    mVideoWidth = size.getWidth();
+                    mVideoHeight = size.getHeight();
                     if (DEBUG) {
                         Log.d(TAG, "onVideoSizeChanged(): mVideoSize:" + mVideoWidth + "/"
                                 + mVideoHeight);
@@ -921,7 +923,7 @@
 
                 @Override
                 public void onInfo(
-                        MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+                        MediaPlayer mp, MediaItem dsd, int what, int extra) {
                     if (DEBUG) {
                         Log.d(TAG, "onInfo()");
                     }
@@ -935,7 +937,7 @@
                         Bundle data = extractTrackInfoData();
                         if (data != null) {
                             mMediaSession.broadcastCustomCommand(
-                                    new SessionCommand2(MediaControlView2.EVENT_UPDATE_TRACK_STATUS,
+                                    new SessionCommand(MediaControlView.EVENT_UPDATE_TRACK_STATUS,
                                             null), data);
                         }
                     }
@@ -943,7 +945,7 @@
 
                 @Override
                 public void onError(
-                        MediaPlayer mp, MediaItem2 dsd, int frameworkErr, int implErr) {
+                        MediaPlayer mp, MediaItem dsd, int frameworkErr, int implErr) {
                     if (DEBUG) {
                         Log.d(TAG, "Error: " + frameworkErr + "," + implErr);
                     }
@@ -961,7 +963,7 @@
 
                 @Override
                 public void onSubtitleData(
-                        MediaPlayer mp, MediaItem2 dsd, SubtitleData2 data) {
+                        MediaPlayer mp, MediaItem dsd, SubtitleData data) {
                     if (DEBUG) {
                         Log.d(TAG, "onSubtitleData(): getTrackIndex: " + data.getTrackIndex()
                                 + ", getCurrentPosition: " + mp.getCurrentPosition()
@@ -987,28 +989,28 @@
                 }
 
                 @Override
-                public void onPlayerStateChanged(@NonNull SessionPlayer2 player,
-                        @SessionPlayer2.PlayerState int state) {
+                public void onPlayerStateChanged(@NonNull SessionPlayer player,
+                        @SessionPlayer.PlayerState int state) {
                     switch (state) {
-                        case SessionPlayer2.PLAYER_STATE_IDLE:
+                        case SessionPlayer.PLAYER_STATE_IDLE:
                             mCurrentState = STATE_IDLE;
                             break;
-                        case SessionPlayer2.PLAYER_STATE_PLAYING:
+                        case SessionPlayer.PLAYER_STATE_PLAYING:
                             mCurrentState = STATE_PLAYING;
                             break;
-                        case SessionPlayer2.PLAYER_STATE_PAUSED:
+                        case SessionPlayer.PLAYER_STATE_PAUSED:
                             if (mCurrentState == STATE_PREPARING) {
                                 onPrepared(player);
                             }
                             mCurrentState = STATE_PAUSED;
                             break;
-                        case SessionPlayer2.PLAYER_STATE_ERROR:
+                        case SessionPlayer.PLAYER_STATE_ERROR:
                             mCurrentState = STATE_ERROR;
                             break;
                     }
                 }
 
-                private void onPrepared(SessionPlayer2 player) {
+                private void onPrepared(SessionPlayer player) {
                     if (DEBUG) {
                         Log.d(TAG, "OnPreparedListener(): "
                                 + ", mCurrentState=" + mCurrentState
@@ -1020,11 +1022,11 @@
                         Bundle data = extractTrackInfoData();
                         if (data != null) {
                             mMediaSession.broadcastCustomCommand(
-                                    new SessionCommand2(MediaControlView2.EVENT_UPDATE_TRACK_STATUS,
+                                    new SessionCommand(MediaControlView.EVENT_UPDATE_TRACK_STATUS,
                                             null), data);
                         }
 
-                        MediaMetadata2 metadata = extractMetadata();
+                        MediaMetadata metadata = extractMetadata();
                         if (metadata != null) {
                             mMediaItem.setMetadata(metadata);
                         }
@@ -1033,8 +1035,8 @@
                     if (mMediaControlView != null) {
                         mMediaControlView.setEnabled(true);
 
-                        Uri uri = (mMediaItem instanceof UriMediaItem2)
-                                ? ((UriMediaItem2) mMediaItem).getUri() : null;
+                        Uri uri = (mMediaItem instanceof UriMediaItem)
+                                ? ((UriMediaItem) mMediaItem).getUri() : null;
                         if (uri != null) {
                             String scheme = uri.getScheme();
                             if (scheme != null) {
@@ -1053,9 +1055,10 @@
                         mMediaSession.getPlayer().seekTo(seekToPosition);
                     }
 
-                    if (player instanceof VideoView2Player) {
-                        int videoWidth = ((VideoView2Player) player).getVideoWidth();
-                        int videoHeight = ((VideoView2Player) player).getVideoHeight();
+                    if (player instanceof VideoViewPlayer) {
+                        VideoSize size = ((VideoViewPlayer) player).getVideoSize();
+                        int videoWidth = size.getWidth();
+                        int videoHeight = size.getHeight();
 
                         if (videoWidth != 0 && videoHeight != 0) {
                             if (videoWidth != mVideoWidth || videoHeight != mVideoHeight) {
@@ -1070,52 +1073,49 @@
                     }
                 }
 
-                private void onCompletion(MediaPlayer mp, MediaItem2 dsd) {
+                private void onCompletion(MediaPlayer mp, MediaItem dsd) {
                     mCurrentState = STATE_PLAYBACK_COMPLETED;
                     mTargetState = STATE_PLAYBACK_COMPLETED;
                 }
             };
 
-    class MediaSessionCallback extends MediaSession2.SessionCallback {
+    class MediaSessionCallback extends MediaSession.SessionCallback {
         @Override
-        public SessionCommandGroup2 onConnect(
-                @NonNull MediaSession2 session,
-                @NonNull MediaSession2.ControllerInfo controller) {
+        public SessionCommandGroup onConnect(
+                @NonNull MediaSession session,
+                @NonNull MediaSession.ControllerInfo controller) {
             if (session != mMediaSession) {
                 if (DEBUG) {
                     Log.w(TAG, "onConnect() is ignored. session is already gone.");
                 }
             }
-            SessionCommandGroup2.Builder commandsBuilder = new SessionCommandGroup2.Builder()
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_PLAY)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_PREPARE)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_SET_SPEED)
-                    .addCommand(SessionCommand2.COMMAND_CODE_SESSION_FAST_FORWARD)
-                    .addCommand(SessionCommand2.COMMAND_CODE_SESSION_REWIND)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO)
-                    .addCommand(SessionCommand2.COMMAND_CODE_VOLUME_SET_VOLUME)
-                    .addCommand(SessionCommand2.COMMAND_CODE_VOLUME_ADJUST_VOLUME)
-                    .addCommand(SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_URI)
-                    .addCommand(SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_URI)
-                    .addCommand(SessionCommand2.COMMAND_CODE_SESSION_SELECT_ROUTE)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_GET_PLAYLIST)
-                    .addCommand(SessionCommand2.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA)
-                    .addCommand(new SessionCommand2(
-                            MediaControlView2.COMMAND_SELECT_AUDIO_TRACK, null))
-                    .addCommand(new SessionCommand2(
-                            MediaControlView2.COMMAND_SHOW_SUBTITLE, null))
-                    .addCommand(new SessionCommand2(
-                            MediaControlView2.COMMAND_HIDE_SUBTITLE, null));
+            SessionCommandGroup.Builder commandsBuilder = new SessionCommandGroup.Builder()
+                    .addCommand(SessionCommand.COMMAND_CODE_PLAYER_PAUSE)
+                    .addCommand(SessionCommand.COMMAND_CODE_PLAYER_PLAY)
+                    .addCommand(SessionCommand.COMMAND_CODE_PLAYER_PREPARE)
+                    .addCommand(SessionCommand.COMMAND_CODE_PLAYER_SET_SPEED)
+                    .addCommand(SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD)
+                    .addCommand(SessionCommand.COMMAND_CODE_SESSION_REWIND)
+                    .addCommand(SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO)
+                    .addCommand(SessionCommand.COMMAND_CODE_VOLUME_SET_VOLUME)
+                    .addCommand(SessionCommand.COMMAND_CODE_VOLUME_ADJUST_VOLUME)
+                    .addCommand(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI)
+                    .addCommand(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI)
+                    .addCommand(SessionCommand.COMMAND_CODE_PLAYER_GET_PLAYLIST)
+                    .addCommand(SessionCommand.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA)
+                    .addCommand(new SessionCommand(
+                            MediaControlView.COMMAND_SELECT_AUDIO_TRACK, null))
+                    .addCommand(new SessionCommand(
+                            MediaControlView.COMMAND_SHOW_SUBTITLE, null))
+                    .addCommand(new SessionCommand(
+                            MediaControlView.COMMAND_HIDE_SUBTITLE, null));
             return commandsBuilder.build();
         }
 
         @Override
-        public MediaSession2.SessionResult onCustomCommand(@NonNull MediaSession2 session,
-                @NonNull MediaSession2.ControllerInfo controller,
-                @NonNull SessionCommand2 customCommand, @Nullable Bundle args) {
+        public MediaSession.SessionResult onCustomCommand(@NonNull MediaSession session,
+                @NonNull MediaSession.ControllerInfo controller,
+                @NonNull SessionCommand customCommand, @Nullable Bundle args) {
             if (session != mMediaSession) {
                 if (DEBUG) {
                     Log.w(TAG, "onCustomCommand() is ignored. session is already gone.");
@@ -1123,12 +1123,12 @@
             }
             if (isRemotePlayback()) {
                 // TODO: call mRoutePlayer.onCommand()
-                return new MediaSession2.SessionResult(RESULT_CODE_SUCCESS, null);
+                return new MediaSession.SessionResult(RESULT_CODE_SUCCESS, null);
             }
             switch (customCommand.getCustomCommand()) {
-                case MediaControlView2.COMMAND_SHOW_SUBTITLE:
+                case MediaControlView.COMMAND_SHOW_SUBTITLE:
                     int subtitleIndex = args != null ? args.getInt(
-                            MediaControlView2.KEY_SELECTED_SUBTITLE_INDEX,
+                            MediaControlView.KEY_SELECTED_SUBTITLE_INDEX,
                             INVALID_TRACK_INDEX) : INVALID_TRACK_INDEX;
                     if (subtitleIndex != INVALID_TRACK_INDEX) {
                         int subtitleTrackIndex = mSubtitleTracks.keyAt(subtitleIndex);
@@ -1137,12 +1137,12 @@
                         }
                     }
                     break;
-                case MediaControlView2.COMMAND_HIDE_SUBTITLE:
+                case MediaControlView.COMMAND_HIDE_SUBTITLE:
                     deselectSubtitleTrack();
                     break;
-                case MediaControlView2.COMMAND_SELECT_AUDIO_TRACK:
+                case MediaControlView.COMMAND_SELECT_AUDIO_TRACK:
                     int audioIndex = (args != null)
-                            ? args.getInt(MediaControlView2.KEY_SELECTED_AUDIO_INDEX,
+                            ? args.getInt(MediaControlView.KEY_SELECTED_AUDIO_INDEX,
                             INVALID_TRACK_INDEX) : INVALID_TRACK_INDEX;
                     if (audioIndex != INVALID_TRACK_INDEX) {
                         int audioTrackIndex = mAudioTrackIndices.get(audioIndex);
@@ -1153,30 +1153,30 @@
                     }
                     break;
             }
-            return new MediaSession2.SessionResult(RESULT_CODE_SUCCESS, null);
+            return new MediaSession.SessionResult(RESULT_CODE_SUCCESS, null);
         }
 
         @Override
-        public int onCommandRequest(@NonNull MediaSession2 session,
-                @NonNull MediaSession2.ControllerInfo controller,
-                @NonNull SessionCommand2 command) {
+        public int onCommandRequest(@NonNull MediaSession session,
+                @NonNull MediaSession.ControllerInfo controller,
+                @NonNull SessionCommand command) {
             if (session != mMediaSession) {
                 if (DEBUG) {
                     Log.w(TAG, "onCommandRequest() is ignored. session is already gone.");
                 }
             }
             switch (command.getCommandCode()) {
-                case SessionCommand2.COMMAND_CODE_PLAYER_PLAY:
+                case SessionCommand.COMMAND_CODE_PLAYER_PLAY:
                     mTargetState = STATE_PLAYING;
                     if (!mCurrentView.hasAvailableSurface() && !mIsMusicMediaType) {
                         Log.d(TAG, "surface is not available");
                         return RESULT_CODE_INVALID_STATE;
                     }
                     break;
-                case SessionCommand2.COMMAND_CODE_PLAYER_PAUSE:
+                case SessionCommand.COMMAND_CODE_PLAYER_PAUSE:
                     mTargetState = STATE_PAUSED;
                     break;
-                case SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO:
+                case SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO:
                     mSeekWhenPrepared = 0;
                     break;
             }
diff --git a/media-widget/src/main/java/androidx/media/widget/VideoViewInterface.java b/media-widget/src/main/java/androidx/media2/widget/VideoViewInterface.java
similarity index 98%
rename from media-widget/src/main/java/androidx/media/widget/VideoViewInterface.java
rename to media-widget/src/main/java/androidx/media2/widget/VideoViewInterface.java
index d7eb7c2..be6df5a 100644
--- a/media-widget/src/main/java/androidx/media/widget/VideoViewInterface.java
+++ b/media-widget/src/main/java/androidx/media2/widget/VideoViewInterface.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.view.View;
 
diff --git a/media-widget/src/main/java/androidx/media/widget/VideoView2Player.java b/media-widget/src/main/java/androidx/media2/widget/VideoViewPlayer.java
similarity index 78%
rename from media-widget/src/main/java/androidx/media/widget/VideoView2Player.java
rename to media-widget/src/main/java/androidx/media2/widget/VideoViewPlayer.java
index aaa5458..5ba6ef6 100644
--- a/media-widget/src/main/java/androidx/media/widget/VideoView2Player.java
+++ b/media-widget/src/main/java/androidx/media2/widget/VideoViewPlayer.java
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.media.widget;
+package androidx.media2.widget;
 
 import android.content.Context;
 
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
 import androidx.media2.MediaPlayer;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -27,12 +27,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
-class VideoView2Player extends MediaPlayer {
-    VideoView2Player(Context context) {
+class VideoViewPlayer extends MediaPlayer {
+    VideoViewPlayer(Context context) {
         super(context);
     }
 
-    private MediaItem2 mMediaItem;
+    private MediaItem mMediaItem;
 
     @Override
     public ListenableFuture<PlayerResult> seekTo(long position) {
@@ -44,21 +44,21 @@
     // TODO: Remove overrides below.
     ///////////////////////////////////////////////////////////////////////////////////////
     @Override
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         try {
             return super.getPlaylist();
-        } finally {
-            ArrayList<MediaItem2> list = new ArrayList<>();
+        } catch (Exception e) {
+            ArrayList<MediaItem> list = new ArrayList<>();
             list.add(getCurrentMediaItem());
             return list;
         }
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         try {
             return super.getPlaylistMetadata();
-        } finally {
+        } catch (Exception e) {
             return null;
         }
     }
@@ -67,7 +67,7 @@
     public int getRepeatMode() {
         try {
             return super.getRepeatMode();
-        } finally {
+        } catch (Exception e) {
             return REPEAT_MODE_NONE;
         }
     }
@@ -76,22 +76,22 @@
     public int getShuffleMode() {
         try {
             return super.getShuffleMode();
-        } finally {
+        } catch (Exception e) {
             return SHUFFLE_MODE_NONE;
         }
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setMediaItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(MediaItem item) {
         mMediaItem = item;
         return super.setMediaItem(item);
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         try {
             return super.getCurrentMediaItem();
-        } finally {
+        } catch (Exception e) {
             return mMediaItem;
         }
     }
diff --git a/media-widget/src/main/res/layout/media_controller.xml b/media-widget/src/main/res/layout/media_controller.xml
index 3ffe3b8..6be36f0 100644
--- a/media-widget/src/main/res/layout/media_controller.xml
+++ b/media-widget/src/main/res/layout/media_controller.xml
@@ -75,7 +75,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:paddingEnd="5dip"
-                    android:text="@string/MediaControlView2_ad_text"
+                    android:text="@string/MediaControlView_ad_text"
                     android:textSize="10sp"
                     android:textColor="#FFFFFFFF" />
 
diff --git a/media-widget/src/main/res/values-af/strings.xml b/media-widget/src/main/res/values-af/strings.xml
index 7b33934..b3ede50 100644
--- a/media-widget/src/main/res/values-af/strings.xml
+++ b/media-widget/src/main/res/values-af/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Jy kan die advertensie oorslaan oor <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Advertensie · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> oor"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Besoek adverteerder"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Af"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Oudiosnit"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Geen"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Outomaties"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Terugspeelspoed"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normaal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Snit <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Snit <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Snit <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Jy kan die advertensie oorslaan oor <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Advertensie · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> oor"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Besoek adverteerder"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Af"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Oudiosnit"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Geen"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Outomaties"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Terugspeelspoed"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normaal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Snit <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Snit <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Snit <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Liedjie onbekend"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Kunstenaar onbekend"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Kon nie die item speel wat jy versoek het nie"</string>
diff --git a/media-widget/src/main/res/values-am/strings.xml b/media-widget/src/main/res/values-am/strings.xml
index 0124468..9ff4611 100644
--- a/media-widget/src/main/res/values-am/strings.xml
+++ b/media-widget/src/main/res/values-am/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"ማስታወቂያን በ<xliff:g id="WAIT_TIME">%1$d</xliff:g> ሴ ውስጥ መዝለል ይችላሉ"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"ማስታወቂያ · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ይቀራል"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"አስተዋዋቂውን ይጎብኙ"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"አጥፋ"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"የኦዲዮ ትራክ"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ምንም"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ራስ-ሰር"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"የመልሶ ማጫወቻ ፍጥነት"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ደንበኛ"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ትራክ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ትራክ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ትራክ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"ማስታወቂያን በ<xliff:g id="WAIT_TIME">%1$d</xliff:g> ሴ ውስጥ መዝለል ይችላሉ"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"ማስታወቂያ · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ይቀራል"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"አስተዋዋቂውን ይጎብኙ"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"አጥፋ"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"የኦዲዮ ትራክ"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ምንም"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ራስ-ሰር"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"የመልሶ ማጫወቻ ፍጥነት"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ደንበኛ"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ትራክ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ትራክ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ትራክ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ያልታወቀ የዘፈን ርዕስ"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"ያልታወቀ አርቲስት"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"የጠየቁትን ንጥል ማጫወት አልተቻለም"</string>
diff --git a/media-widget/src/main/res/values-ar/strings.xml b/media-widget/src/main/res/values-ar/strings.xml
index f86baaa..9564065 100644
--- a/media-widget/src/main/res/values-ar/strings.xml
+++ b/media-widget/src/main/res/values-ar/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"يمكنك تخطي الإعلان خلال <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"يتبقى من الإعلان <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"زيارة صفحة المعلن"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"إيقاف"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"مقطع صوتي"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"بلا"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"تلقائي"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"سرعة التشغيل"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"عادي"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"المقطع الصوتي <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"تتبُّع <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"تتبُّع <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"يمكنك تخطي الإعلان خلال <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"يتبقى من الإعلان <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"زيارة صفحة المعلن"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"إيقاف"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"مقطع صوتي"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"بلا"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"تلقائي"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"سرعة التشغيل"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"عادي"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"المقطع الصوتي <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"تتبُّع <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"تتبُّع <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"عنوان الأغنية غير معروف"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"فنان غير معروف"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"تعذّر تشغيل المقطع الصوتي الذي طلبته."</string>
diff --git a/media-widget/src/main/res/values-az/strings.xml b/media-widget/src/main/res/values-az/strings.xml
index 2badc4c..6f6090c 100644
--- a/media-widget/src/main/res/values-az/strings.xml
+++ b/media-widget/src/main/res/values-az/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g>saniyə ərzində Reklamı keçə bilərsiniz"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklam · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> qalıb"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Reklamçının səhifəsinə daxil olun"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Deaktiv"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio trek"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Yoxdur"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Avtomatik"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Oxutma sürəti"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Trek <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g>saniyə ərzində Reklamı keçə bilərsiniz"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklam · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> qalıb"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Reklamçının səhifəsinə daxil olun"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Deaktiv"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio trek"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Yoxdur"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Avtomatik"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Oxutma sürəti"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Trek <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Mahnının adı bilinmir"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"İfaçı bilinmir"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Təklif etdiyiniz elementləri oxutmaq alınmadı"</string>
diff --git a/media-widget/src/main/res/values-b+sr+Latn/strings.xml b/media-widget/src/main/res/values-b+sr+Latn/strings.xml
index 0e35f57..9acf93b 100644
--- a/media-widget/src/main/res/values-b+sr+Latn/strings.xml
+++ b/media-widget/src/main/res/values-b+sr+Latn/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Možete da preskočite oglas za <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Oglas · Preostalo je još <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Posetite oglašavača"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Isključeno"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio snimak"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Ništa"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatski"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Brzina reprodukcije"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normalno"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pesma"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pesma – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. pesma"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Možete da preskočite oglas za <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Oglas · Preostalo je još <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Posetite oglašavača"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Isključeno"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio snimak"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Ništa"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatski"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Brzina reprodukcije"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normalno"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pesma"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pesma – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. pesma"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Nepoznat naziv pesme"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Nepoznat izvođač"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Nismo uspeli da pustimo stavku koju ste zahtevali"</string>
diff --git a/media-widget/src/main/res/values-be/strings.xml b/media-widget/src/main/res/values-be/strings.xml
index c89acbf..4b803b1 100644
--- a/media-widget/src/main/res/values-be/strings.xml
+++ b/media-widget/src/main/res/values-be/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Вы зможаце прапусціць рэкламу праз <xliff:g id="WAIT_TIME">%1$d</xliff:g>с"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Рэклама · Засталося <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"На сайт рэкламадаўцы"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Выкл."</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Гукавая дарожка"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Няма"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Аўтаматычна"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Хуткасць прайгравання"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Звычайная"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Трэк <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Трэк <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Трэк <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Вы зможаце прапусціць рэкламу праз <xliff:g id="WAIT_TIME">%1$d</xliff:g>с"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Рэклама · Засталося <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"На сайт рэкламадаўцы"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Выкл."</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Гукавая дарожка"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Няма"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Аўтаматычна"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Хуткасць прайгравання"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Звычайная"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Трэк <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Трэк <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Трэк <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Назва кампазіцыі невядомая"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Невядомы выканаўца"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Не ўдалося прайграць гэта відэа"</string>
diff --git a/media-widget/src/main/res/values-bg/strings.xml b/media-widget/src/main/res/values-bg/strings.xml
index a79cb71..71a176f 100644
--- a/media-widget/src/main/res/values-bg/strings.xml
+++ b/media-widget/src/main/res/values-bg/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Можете да пропуснете рекламата след <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Реклама · Оставащо време: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Посетете рекламодателя"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Изкл."</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Аудиозапис"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Няма"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Автоматично"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Скорост на възпроизвеждане"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Нормална"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Запис <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Запис <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Запис <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Можете да пропуснете рекламата след <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Реклама · Оставащо време: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Посетете рекламодателя"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Изкл."</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Аудиозапис"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Няма"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Автоматично"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Скорост на възпроизвеждане"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Нормална"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Запис <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Запис <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Запис <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Неизвестно заглавие на песента"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Неизвестен изпълнител"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Заявеният от вас елемент не можа да се възпроизведе"</string>
diff --git a/media-widget/src/main/res/values-bn/strings.xml b/media-widget/src/main/res/values-bn/strings.xml
index 198b3eb..f630382 100644
--- a/media-widget/src/main/res/values-bn/strings.xml
+++ b/media-widget/src/main/res/values-bn/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> সেকেন্ড পরে আপনি বিজ্ঞাপনটি এড়িয়ে যেতে পারবেন"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"বিজ্ঞাপন · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> বাকি আছে"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"বিজ্ঞাপনদাতার ওয়েবসাইট দেখুন"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"বন্ধ করুন"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"অডিও ট্র্যাক"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"কোনওটিই নয়"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"অটো"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"প্লেব্যাকের গতি"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"সাধারণ"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"০০:০০:০০"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ট্র্যাক <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ট্র্যাক <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ট্র্যাক <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> সেকেন্ড পরে আপনি বিজ্ঞাপনটি এড়িয়ে যেতে পারবেন"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"বিজ্ঞাপন · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> বাকি আছে"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"বিজ্ঞাপনদাতার ওয়েবসাইট দেখুন"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"বন্ধ করুন"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"অডিও ট্র্যাক"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"কোনওটিই নয়"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"অটো"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"প্লেব্যাকের গতি"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"সাধারণ"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"০০:০০:০০"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ট্র্যাক <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ট্র্যাক <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ট্র্যাক <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"গানের শীর্ষক অজানা"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"অপরিচিত শিল্পী"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"আপনার অনুরোধ করা আইটেমটি চালানো যায়নি"</string>
diff --git a/media-widget/src/main/res/values-bs/strings.xml b/media-widget/src/main/res/values-bs/strings.xml
index ffd4b38..f47e586 100644
--- a/media-widget/src/main/res/values-bs/strings.xml
+++ b/media-widget/src/main/res/values-bs/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Možete preskočiti oglas za <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Oglas · Preostalo vrijeme: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Posjeti stranicu oglašivača"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Isključi"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Zvučni zapis"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Ništa"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatski"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Brzina reprodukcije"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normalno"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Numera <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Možete preskočiti oglas za <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Oglas · Preostalo vrijeme: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Posjeti stranicu oglašivača"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Isključi"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Zvučni zapis"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Ništa"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatski"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Brzina reprodukcije"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normalno"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Numera <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Nepoznat naziv pjesme"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Nepoznat izvođač"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Nije moguće reproducirati stavku koju ste zatražili"</string>
diff --git a/media-widget/src/main/res/values-ca/strings.xml b/media-widget/src/main/res/values-ca/strings.xml
index a3121de..37e4358 100644
--- a/media-widget/src/main/res/values-ca/strings.xml
+++ b/media-widget/src/main/res/values-ca/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Pots ometre l\'anunci d\'aquí a <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Anunci · Temps restant: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Ves al lloc web de l\'anunciant"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Desactivats"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Pista d\'àudio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Cap"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automàtica"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocitat de reproducció"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>: <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Pots ometre l\'anunci d\'aquí a <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Anunci · Temps restant: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Ves al lloc web de l\'anunciant"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Desactivats"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Pista d\'àudio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Cap"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automàtica"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocitat de reproducció"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>: <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Títol de cançó desconegut"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista desconegut"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"No s\'ha pogut reproduir l\'element que has sol·licitat"</string>
diff --git a/media-widget/src/main/res/values-cs/strings.xml b/media-widget/src/main/res/values-cs/strings.xml
index 7e457ef..9b5fbd8 100644
--- a/media-widget/src/main/res/values-cs/strings.xml
+++ b/media-widget/src/main/res/values-cs/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Reklamu můžete přeskočit za <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklama · zbývá <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Navštívit stránky inzerenta"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Vypnuto"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Zvuková stopa"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Žádné"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automaticky"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Rychlost přehrávání"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normální"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Stopa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Stopa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Stopa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Reklamu můžete přeskočit za <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklama · zbývá <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Navštívit stránky inzerenta"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Vypnuto"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Zvuková stopa"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Žádné"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automaticky"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Rychlost přehrávání"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normální"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Stopa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Stopa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Stopa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Neznámý název skladby"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Neznámý interpret"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Požadovanou položku se nepodařilo přehrát"</string>
diff --git a/media-widget/src/main/res/values-da/strings.xml b/media-widget/src/main/res/values-da/strings.xml
index 76c1d52..dd50823 100644
--- a/media-widget/src/main/res/values-da/strings.xml
+++ b/media-widget/src/main/res/values-da/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Du kan spring annoncen over om <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Der er <xliff:g id="REMAINING_TIME">%1$s</xliff:g> tilbage af annoncen"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Besøg annoncør"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Fra"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Lydspor"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Ingen"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatisk"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Afspilningshastighed"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Nummer <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Nummer <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Nummer <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Du kan spring annoncen over om <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Der er <xliff:g id="REMAINING_TIME">%1$s</xliff:g> tilbage af annoncen"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Besøg annoncør"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Fra"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Lydspor"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Ingen"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatisk"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Afspilningshastighed"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Nummer <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Nummer <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Nummer <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Ukendt sangtitel"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Ukendt musiker"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Den ønskede video kunne ikke afspilles"</string>
diff --git a/media-widget/src/main/res/values-de/strings.xml b/media-widget/src/main/res/values-de/strings.xml
index 1f041b1..29f0074 100644
--- a/media-widget/src/main/res/values-de/strings.xml
+++ b/media-widget/src/main/res/values-de/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Du kannst die Anzeige in <xliff:g id="WAIT_TIME">%1$d</xliff:g> Sekunden überspringen"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Anzeige · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> verbleibend"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Zum Werbetreibenden"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Aus"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audiotrack"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"–"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Wiedergabegeschwindigkeit"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Titel <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Titel <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Titel <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Du kannst die Anzeige in <xliff:g id="WAIT_TIME">%1$d</xliff:g> Sekunden überspringen"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Anzeige · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> verbleibend"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Zum Werbetreibenden"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Aus"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audiotrack"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"–"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Wiedergabegeschwindigkeit"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Titel <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Titel <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Titel <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Unbekannter Musiktitel"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Unbekannter Interpret"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Das angeforderte Video konnte nicht wiedergegeben werden"</string>
diff --git a/media-widget/src/main/res/values-el/strings.xml b/media-widget/src/main/res/values-el/strings.xml
index e7268b6..cbfb178 100644
--- a/media-widget/src/main/res/values-el/strings.xml
+++ b/media-widget/src/main/res/values-el/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Μπορείτε να παραβλέψετε τη διαφήμιση σε <xliff:g id="WAIT_TIME">%1$d</xliff:g> δ."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Απομένουν · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> στη διαφήμιση"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Μετάβαση στον διαφημιζόμενο"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Ανενεργός"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Κομμάτι ήχου"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Κανένα"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Αυτόματη"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Ταχύτητα αναπαραγωγής"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Κανονική"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Κομμάτι <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Κομμάτι <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Κομμάτι <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Μπορείτε να παραβλέψετε τη διαφήμιση σε <xliff:g id="WAIT_TIME">%1$d</xliff:g> δ."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Απομένουν · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> στη διαφήμιση"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Μετάβαση στον διαφημιζόμενο"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Ανενεργός"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Κομμάτι ήχου"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Κανένα"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Αυτόματη"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Ταχύτητα αναπαραγωγής"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Κανονική"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Κομμάτι <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Κομμάτι <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Κομμάτι <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Άγνωστος τίτλος τραγουδιού"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Άγνωστος καλλιτέχνης"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Δεν ήταν δυνατή η αναπαραγωγή του στοιχείου που ζητήσατε"</string>
diff --git a/media-widget/src/main/res/values-en-rAU/strings.xml b/media-widget/src/main/res/values-en-rAU/strings.xml
index b72d1b3..542be2f5 100644
--- a/media-widget/src/main/res/values-en-rAU/strings.xml
+++ b/media-widget/src/main/res/values-en-rAU/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"You can skip ad in <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> remaining"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Visit advertiser"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio track"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"None"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Playback speed"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"You can skip ad in <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> remaining"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Visit advertiser"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio track"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"None"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Playback speed"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Song title unknown"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artist unknown"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Couldn\'t play the item that you requested"</string>
diff --git a/media-widget/src/main/res/values-en-rGB/strings.xml b/media-widget/src/main/res/values-en-rGB/strings.xml
index b72d1b3..542be2f5 100644
--- a/media-widget/src/main/res/values-en-rGB/strings.xml
+++ b/media-widget/src/main/res/values-en-rGB/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"You can skip ad in <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> remaining"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Visit advertiser"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio track"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"None"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Playback speed"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"You can skip ad in <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> remaining"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Visit advertiser"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio track"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"None"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Playback speed"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Song title unknown"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artist unknown"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Couldn\'t play the item that you requested"</string>
diff --git a/media-widget/src/main/res/values-en-rIN/strings.xml b/media-widget/src/main/res/values-en-rIN/strings.xml
index b72d1b3..542be2f5 100644
--- a/media-widget/src/main/res/values-en-rIN/strings.xml
+++ b/media-widget/src/main/res/values-en-rIN/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"You can skip ad in <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> remaining"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Visit advertiser"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio track"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"None"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Playback speed"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"You can skip ad in <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> remaining"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Visit advertiser"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio track"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"None"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Playback speed"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Song title unknown"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artist unknown"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Couldn\'t play the item that you requested"</string>
diff --git a/media-widget/src/main/res/values-es-rUS/strings.xml b/media-widget/src/main/res/values-es-rUS/strings.xml
index ace6f35..ec6f2be 100644
--- a/media-widget/src/main/res/values-es-rUS/strings.xml
+++ b/media-widget/src/main/res/values-es-rUS/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Podrás omitir el anuncio en <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Tiempo restante del anuncio: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Visitar el sitio del anunciante"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Desactivados"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Pista de audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nada"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automática"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocidad de reproducción"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Podrás omitir el anuncio en <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Tiempo restante del anuncio: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Visitar el sitio del anunciante"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Desactivados"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Pista de audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nada"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automática"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocidad de reproducción"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Título de canción desconocido"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista desconocido"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"No se pudo reproducir el elemento que solicitaste"</string>
diff --git a/media-widget/src/main/res/values-es/strings.xml b/media-widget/src/main/res/values-es/strings.xml
index c3d17d9..e9e6656 100644
--- a/media-widget/src/main/res/values-es/strings.xml
+++ b/media-widget/src/main/res/values-es/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Podrás saltar el anuncio en <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Anuncio · Tiempo restante: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Ir al sitio web del anunciante"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"No"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Pista de audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nada"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocidad de reproducción"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Podrás saltar el anuncio en <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Anuncio · Tiempo restante: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Ir al sitio web del anunciante"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"No"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Pista de audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nada"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocidad de reproducción"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Título de canción desconocido"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista desconocido"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"No se ha podido reproducir el elemento que has solicitado"</string>
diff --git a/media-widget/src/main/res/values-et/strings.xml b/media-widget/src/main/res/values-et/strings.xml
index bf85ab4..756bebd 100644
--- a/media-widget/src/main/res/values-et/strings.xml
+++ b/media-widget/src/main/res/values-et/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Saate reklaami vahele jätta <xliff:g id="WAIT_TIME">%1$d</xliff:g> sekundi pärast"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklaam · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> jäänud"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Külastage reklaamijat"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Väljas"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Helirada"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Pole"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automaatne"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Esituskiirus"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Tavaline"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00.00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. lugu"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. lugu – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. lugu"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Saate reklaami vahele jätta <xliff:g id="WAIT_TIME">%1$d</xliff:g> sekundi pärast"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklaam · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> jäänud"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Külastage reklaamijat"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Väljas"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Helirada"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Pole"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automaatne"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Esituskiirus"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Tavaline"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00.00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. lugu"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. lugu – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. lugu"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Tundmatu loo pealkiri"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Tundmatu esitaja"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Teie soovitud üksust ei saanud esitada"</string>
diff --git a/media-widget/src/main/res/values-eu/strings.xml b/media-widget/src/main/res/values-eu/strings.xml
index d0e5d55..a26759f 100644
--- a/media-widget/src/main/res/values-eu/strings.xml
+++ b/media-widget/src/main/res/values-eu/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> s barru saltatu ahalko duzu iragarkia"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Iragarkia · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> gelditzen dira"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Joan iragarlearen webgunera"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Desaktibatu"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio-pista"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Bat ere ez"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatikoa"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Erreprodukzioaren abiadura"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normala"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pista"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pista (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. pista"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> s barru saltatu ahalko duzu iragarkia"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Iragarkia · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> gelditzen dira"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Joan iragarlearen webgunera"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Desaktibatu"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio-pista"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Bat ere ez"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatikoa"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Erreprodukzioaren abiadura"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normala"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pista"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. pista (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. pista"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Abestiaren izen ezezaguna"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista ezezaguna"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Ezin izan da erreproduzitu eskatu duzun elementua"</string>
diff --git a/media-widget/src/main/res/values-fa/strings.xml b/media-widget/src/main/res/values-fa/strings.xml
index 2f8a83f..94d20ce 100644
--- a/media-widget/src/main/res/values-fa/strings.xml
+++ b/media-widget/src/main/res/values-fa/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> ثانیه دیگر می‌توانید آگهی را رد کنید"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"آگهی · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> باقی‌مانده"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"بازدید از سایت آگهی‌دهنده"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"خاموش"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"آهنگ صوتی"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"هیچ‌کدام"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"خودکار"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"سرعت بازپخش"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"عادی"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"۰۰:۰۰:۰۰"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"آهنگ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"آهنگ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"آهنگ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> ثانیه دیگر می‌توانید آگهی را رد کنید"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"آگهی · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> باقی‌مانده"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"بازدید از سایت آگهی‌دهنده"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"خاموش"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"آهنگ صوتی"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"هیچ‌کدام"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"خودکار"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"سرعت بازپخش"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"عادی"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"۰۰:۰۰:۰۰"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"آهنگ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"آهنگ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"آهنگ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"عنوان آهنگ نامشخص"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"هنرمند ناشناس"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"مورد درخواستی پخش نشد"</string>
diff --git a/media-widget/src/main/res/values-fi/strings.xml b/media-widget/src/main/res/values-fi/strings.xml
index 683676f..9a6de38 100644
--- a/media-widget/src/main/res/values-fi/strings.xml
+++ b/media-widget/src/main/res/values-fi/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Voit ohittaa mainoksen <xliff:g id="WAIT_TIME">%1$d</xliff:g> s:n kuluttua"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Mainos · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> jäljellä"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Vieraile mainostajan sivulla"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Pois päältä"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Ääniraita"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"–"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automaattinen"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Toistonopeus"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normaali"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Raita <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Raita <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Raita <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Voit ohittaa mainoksen <xliff:g id="WAIT_TIME">%1$d</xliff:g> s:n kuluttua"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Mainos · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> jäljellä"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Vieraile mainostajan sivulla"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Pois päältä"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Ääniraita"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"–"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automaattinen"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Toistonopeus"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normaali"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Raita <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Raita <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Raita <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Kappaleen nimi tuntematon"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artisti tuntematon"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Valitsemaasi kohdetta ei voitu toistaa."</string>
diff --git a/media-widget/src/main/res/values-fr-rCA/strings.xml b/media-widget/src/main/res/values-fr-rCA/strings.xml
index cf14254..aee300b 100644
--- a/media-widget/src/main/res/values-fr-rCA/strings.xml
+++ b/media-widget/src/main/res/values-fr-rCA/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Vous pourrez ignorer l\'annonce dans <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Annonce : il reste <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Visiter le site de l\'annonceur"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Désactivés"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Piste audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Aucune"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Vitesse de lecture"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normale"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Piste <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Piste <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Piste <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Vous pourrez ignorer l\'annonce dans <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Annonce : il reste <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Visiter le site de l\'annonceur"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Désactivés"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Piste audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Aucune"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Vitesse de lecture"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normale"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Piste <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Piste <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Piste <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Titre de chanson inconnu"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artiste inconnu"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Impossible de lire l\'élément demandé"</string>
diff --git a/media-widget/src/main/res/values-fr/strings.xml b/media-widget/src/main/res/values-fr/strings.xml
index 2990cc6..6394592 100644
--- a/media-widget/src/main/res/values-fr/strings.xml
+++ b/media-widget/src/main/res/values-fr/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Ignorez l\'annonce dans <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Annonce dans <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Accéder au site de l\'annonceur"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Désactivé"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Titre audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Aucun"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Vitesse de lecture"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Titre <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Titre <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Titre <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Ignorez l\'annonce dans <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Annonce dans <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Accéder au site de l\'annonceur"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Désactivé"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Titre audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Aucun"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Vitesse de lecture"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Titre <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Titre <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Titre <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Titre du morceau inconnu"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artiste inconnu"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Impossible de lire la vidéo demandée"</string>
diff --git a/media-widget/src/main/res/values-gl/strings.xml b/media-widget/src/main/res/values-gl/strings.xml
index c0f37c9..c6e2b62 100644
--- a/media-widget/src/main/res/values-gl/strings.xml
+++ b/media-widget/src/main/res/values-gl/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Podes omitir o anuncio en <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Anuncio · Tempo restante: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Ir ao sitio do anunciante"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Desactivados"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Pista de audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nada"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automática"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocidade de reprodución"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Podes omitir o anuncio en <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Anuncio · Tempo restante: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Ir ao sitio do anunciante"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Desactivados"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Pista de audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nada"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automática"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocidade de reprodución"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pista <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Pista <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Título da canción descoñecido"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista descoñecido"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Non se puido reproducir o elemento que solicitaches"</string>
diff --git a/media-widget/src/main/res/values-gu/strings.xml b/media-widget/src/main/res/values-gu/strings.xml
index a3cf7f7..e162217 100644
--- a/media-widget/src/main/res/values-gu/strings.xml
+++ b/media-widget/src/main/res/values-gu/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"તમે <xliff:g id="WAIT_TIME">%1$d</xliff:g> સેકન્ડમાં જાહેરાત છોડી શકો છો"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"જાહેરાત · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> બાકી છે"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"જાહેરાતકર્તાની મુલાકાત લો"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"બંધ"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ઑડિઓ ટ્રૅક"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"કોઈ નહીં"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ઑટો"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"પ્લેબૅકની ઝડપ"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"સામાન્ય"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ટ્રૅક <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ટ્રૅક <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ટ્રૅક <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"તમે <xliff:g id="WAIT_TIME">%1$d</xliff:g> સેકન્ડમાં જાહેરાત છોડી શકો છો"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"જાહેરાત · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> બાકી છે"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"જાહેરાતકર્તાની મુલાકાત લો"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"બંધ"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ઑડિઓ ટ્રૅક"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"કોઈ નહીં"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ઑટો"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"પ્લેબૅકની ઝડપ"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"સામાન્ય"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ટ્રૅક <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ટ્રૅક <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ટ્રૅક <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ગીતનું શીર્ષક અજાણ્યું"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"કલાકારનું નામ અજાણ્યું"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"તમે વિનંતી કરેલી આઇટમ ચલાવી શક્યાં નહીં"</string>
diff --git a/media-widget/src/main/res/values-hi/strings.xml b/media-widget/src/main/res/values-hi/strings.xml
index 06be357..52cd9bf 100644
--- a/media-widget/src/main/res/values-hi/strings.xml
+++ b/media-widget/src/main/res/values-hi/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"आप <xliff:g id="WAIT_TIME">%1$d</xliff:g> में विज्ञापन छोड़ सकते हैं"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"विज्ञापन · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> बचा है"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"विज्ञापनदाता की वेबसाइट देखें"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"बंद है"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ऑडियो ट्रैक"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"कोई नहीं"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"अपने आप"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"प्लेबैक गति"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"सामान्य"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ट्रैक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ट्रैक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ट्रैक <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"आप <xliff:g id="WAIT_TIME">%1$d</xliff:g> में विज्ञापन छोड़ सकते हैं"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"विज्ञापन · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> बचा है"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"विज्ञापनदाता की वेबसाइट देखें"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"बंद है"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ऑडियो ट्रैक"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"कोई नहीं"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"अपने आप"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"प्लेबैक गति"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"सामान्य"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ट्रैक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ट्रैक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ट्रैक <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"गाने का शीर्षक पता नहीं है"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"कलाकार का नाम नहीं पता"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"आपका अनुरोध किया गया आइटम नहीं चलाया जा सका"</string>
diff --git a/media-widget/src/main/res/values-hr/strings.xml b/media-widget/src/main/res/values-hr/strings.xml
index 8c8e088..43680ab 100644
--- a/media-widget/src/main/res/values-hr/strings.xml
+++ b/media-widget/src/main/res/values-hr/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Oglas možete preskočiti za <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Oglas · Preostalo vremena <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Posjetite oglašivača"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Isključeno"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Zvučni zapis"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Ništa"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatski"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Brzina reprodukcije"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Obično"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Zvučni zapis <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Oglas možete preskočiti za <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Oglas · Preostalo vremena <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Posjetite oglašivača"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Isključeno"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Zvučni zapis"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Ništa"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatski"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Brzina reprodukcije"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Obično"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Zapis <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Zvučni zapis <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Nepoznat naziv pjesme"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Nepoznati izvođač"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Zatražena stavka ne može se reproducirati"</string>
diff --git a/media-widget/src/main/res/values-hu/strings.xml b/media-widget/src/main/res/values-hu/strings.xml
index 2642a36..ad8aaea 100644
--- a/media-widget/src/main/res/values-hu/strings.xml
+++ b/media-widget/src/main/res/values-hu/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> másodperc múlva kihagyhatja a hirdetést"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Hirdetés – <xliff:g id="REMAINING_TIME">%1$s</xliff:g> van hátra"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Ugrás a hirdető weboldalára"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Ki"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Hangsáv"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nincs"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatikus"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Lejátszási sebesség"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normál"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. szám"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. szám – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. szám"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> másodperc múlva kihagyhatja a hirdetést"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Hirdetés – <xliff:g id="REMAINING_TIME">%1$s</xliff:g> van hátra"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Ugrás a hirdető weboldalára"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Ki"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Hangsáv"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nincs"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatikus"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Lejátszási sebesség"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normál"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. szám"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. szám – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. szám"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Ismeretlen dalcím"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Ismeretlen előadó"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Nem sikerült lejátszani a kért médiaelemet"</string>
diff --git a/media-widget/src/main/res/values-hy/strings.xml b/media-widget/src/main/res/values-hy/strings.xml
index dc51964..620f030 100644
--- a/media-widget/src/main/res/values-hy/strings.xml
+++ b/media-widget/src/main/res/values-hy/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Գովազդը կարող եք բաց թողնել <xliff:g id="WAIT_TIME">%1$d</xliff:g> վայրկյանից"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Գովազդ – Մնաց <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Անցնել գովազդատուի կայք"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Անջատել"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Ձայնային կատարում"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Ոչ մեկը"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Ավտոմատ"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Նվագարկման արագությունը"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Սովորական"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Կատարում <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Կատարում <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Կատարում <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Գովազդը կարող եք բաց թողնել <xliff:g id="WAIT_TIME">%1$d</xliff:g> վայրկյանից"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Գովազդ – Մնաց <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Անցնել գովազդատուի կայք"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Անջատել"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Ձայնային կատարում"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Ոչ մեկը"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Ավտոմատ"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Նվագարկման արագությունը"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Սովորական"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Կատարում <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Կատարում <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Կատարում <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Երգի անվանումն անհայտ է"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Կատարողն անհայտ է"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Չհաջողվեց նվագարկել տեսանյութը"</string>
diff --git a/media-widget/src/main/res/values-in/strings.xml b/media-widget/src/main/res/values-in/strings.xml
index 57c308e..182f7d4 100644
--- a/media-widget/src/main/res/values-in/strings.xml
+++ b/media-widget/src/main/res/values-in/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Anda dapat melewati Iklan dalam <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Sisa waktu iklan · <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Kunjungi Pengiklan"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Nonaktif"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Trek audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Tidak Ada"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Otomatis"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Kecepatan pemutaran"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Trek <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Anda dapat melewati Iklan dalam <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Sisa waktu iklan · <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Kunjungi Pengiklan"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Nonaktif"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Trek audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Tidak Ada"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Otomatis"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Kecepatan pemutaran"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Trek <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Judul lagu tidak dikenal"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artis tidak dikenal"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Tidak dapat memutar item yang diminta"</string>
diff --git a/media-widget/src/main/res/values-is/strings.xml b/media-widget/src/main/res/values-is/strings.xml
index e4c5d7e..bba63a3 100644
--- a/media-widget/src/main/res/values-is/strings.xml
+++ b/media-widget/src/main/res/values-is/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Þú getur sleppt auglýsingunni eftir <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Auglýsing · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> eftir"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Heimsækja auglýsanda"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Slökkt"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Hljóðrás"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Engin"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Sjálfvirkt"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Spilunarhraði"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Venjuleg"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Lag <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Lag <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Lag <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Þú getur sleppt auglýsingunni eftir <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Auglýsing · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> eftir"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Heimsækja auglýsanda"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Slökkt"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Hljóðrás"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Engin"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Sjálfvirkt"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Spilunarhraði"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Venjuleg"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Lag <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Lag <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Lag <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Óþekkt heiti lags"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Óþekktur flytjandi"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Ekki tókst að spila það sem þú baðst um"</string>
diff --git a/media-widget/src/main/res/values-it/strings.xml b/media-widget/src/main/res/values-it/strings.xml
index 874e42a..44591bf 100644
--- a/media-widget/src/main/res/values-it/strings.xml
+++ b/media-widget/src/main/res/values-it/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Puoi saltare l\'annuncio tra <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Annuncio · Tempo rimanente: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Visita inserzionista"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Traccia audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nessuno"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatica"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocità di riproduzione"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normale"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Traccia <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Traccia <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Traccia <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Puoi saltare l\'annuncio tra <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Annuncio · Tempo rimanente: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Visita inserzionista"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Off"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Traccia audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nessuno"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatica"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocità di riproduzione"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normale"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Traccia <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Traccia <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Traccia <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Titolo del brano sconosciuto"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista sconosciuto"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Impossibile riprodurre l\'elemento richiesto"</string>
diff --git a/media-widget/src/main/res/values-iw/strings.xml b/media-widget/src/main/res/values-iw/strings.xml
index cab38fb..61ec635 100644
--- a/media-widget/src/main/res/values-iw/strings.xml
+++ b/media-widget/src/main/res/values-iw/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"ניתן יהיה לדלג על המודעה בעוד <xliff:g id="WAIT_TIME">%1$d</xliff:g> שניות"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"הזמן שנותר למודעה: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"לאתר המפרסם"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"כבוי"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"רצועת אודיו"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ללא"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"אוטומטי"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"מהירות הפעלה"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"רגיל"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"רצועה <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"רצועה <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"רצועה <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"ניתן יהיה לדלג על המודעה בעוד <xliff:g id="WAIT_TIME">%1$d</xliff:g> שניות"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"הזמן שנותר למודעה: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"לאתר המפרסם"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"כבוי"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"רצועת אודיו"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ללא"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"אוטומטי"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"מהירות הפעלה"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"רגיל"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"רצועה <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"רצועה <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"רצועה <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"שם השיר לא ידוע"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"אמן לא ידוע"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"לא ניתן להפעיל את הפריט שביקשת"</string>
diff --git a/media-widget/src/main/res/values-ja/strings.xml b/media-widget/src/main/res/values-ja/strings.xml
index a8db105..1ae7442 100644
--- a/media-widget/src/main/res/values-ja/strings.xml
+++ b/media-widget/src/main/res/values-ja/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"広告は <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒後にスキップできます"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"広告 · 残り時間: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"広告主のウェブサイトにアクセス"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"OFF"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"音声トラック"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"なし"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"自動"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"再生速度"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"標準"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"トラック <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"トラック <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"トラック <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"広告は <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒後にスキップできます"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"広告 · 残り時間: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"広告主のウェブサイトにアクセス"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"OFF"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"音声トラック"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"なし"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"自動"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"再生速度"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"標準"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"トラック <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"トラック <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"トラック <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"曲名が不明です"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"アーティストが不明です"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"リクエストしたアイテムを再生できませんでした"</string>
diff --git a/media-widget/src/main/res/values-ka/strings.xml b/media-widget/src/main/res/values-ka/strings.xml
index 6d28746..69d9763 100644
--- a/media-widget/src/main/res/values-ka/strings.xml
+++ b/media-widget/src/main/res/values-ka/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"შეგიძლიათ გამოტოვოთ რეკლამა <xliff:g id="WAIT_TIME">%1$d</xliff:g> წამში"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"რეკლამა · დარჩენილია <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"რეკლამის განმთავსებლის ნახვა"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"გამორთვა"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"აუდიოჩანაწერი"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"არაფერი"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ავტომატური"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"დაკვრის სიჩქარე"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ჩვეულებრივი"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ჩანაწერი <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ჩანაწერი <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> — <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ჩანაწერი <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"შეგიძლიათ გამოტოვოთ რეკლამა <xliff:g id="WAIT_TIME">%1$d</xliff:g> წამში"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"რეკლამა · დარჩენილია <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"რეკლამის განმთავსებლის ნახვა"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"გამორთვა"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"აუდიოჩანაწერი"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"არაფერი"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ავტომატური"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"დაკვრის სიჩქარე"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ჩვეულებრივი"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ჩანაწერი <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ჩანაწერი <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> — <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ჩანაწერი <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"სიმღერის სახელი უცნობია"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"მუსიკოსი უცნობია"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"მოთხოვნილი ერთეულის დაკვრა ვერ მოხერხდა"</string>
diff --git a/media-widget/src/main/res/values-kk/strings.xml b/media-widget/src/main/res/values-kk/strings.xml
index b2b8485..8b5fefa 100644
--- a/media-widget/src/main/res/values-kk/strings.xml
+++ b/media-widget/src/main/res/values-kk/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Жарнаманы <xliff:g id="WAIT_TIME">%1$d</xliff:g> с кейін өткізіп жіберуіңізге болады"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Жарнама · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> қалды"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Жарнама берушінің веб-сайтына кіру"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Өшіру"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Аудиотрек"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Жоқ"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Авто"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Ойнату жылдамдығы"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Орташа"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-аудиотрек"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-аудиотрек (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>-аудиотрек"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Жарнаманы <xliff:g id="WAIT_TIME">%1$d</xliff:g> с кейін өткізіп жіберуіңізге болады"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Жарнама · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> қалды"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Жарнама берушінің веб-сайтына кіру"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Өшіру"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Аудиотрек"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Жоқ"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Авто"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Ойнату жылдамдығы"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Орташа"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-аудиотрек"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-аудиотрек (<xliff:g id="LANG">%2$s</xliff:g>)"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>-аудиотрек"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Белгісіз ән атауы"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Белгісіз орындаушы"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Сіз сұраған элемент ойнатылмады"</string>
diff --git a/media-widget/src/main/res/values-km/strings.xml b/media-widget/src/main/res/values-km/strings.xml
index 3d08536..f611830 100644
--- a/media-widget/src/main/res/values-km/strings.xml
+++ b/media-widget/src/main/res/values-km/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"អ្នក​អាច​រំលង​ការផ្សាយពាណិជ្ជកម្ម​នេះក្នុងរយៈពេល <xliff:g id="WAIT_TIME">%1$d</xliff:g>វិ ទៀត"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"ការ​ផ្សាយពាណិជ្ជកម្ម​ · នៅសល់ <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ទៀត"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"ចូលមើល​អ្នក​ផ្សាយ​ពាណិជ្ជកម្ម"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"បិទ"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ភ្លេង"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"គ្មាន"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ស្វ័យប្រវត្តិ"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ល្បឿន​ចាក់"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ធម្មតា"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"បទលេខ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"បទលេខ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"បទលេខ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"អ្នក​អាច​រំលង​ការផ្សាយពាណិជ្ជកម្ម​នេះក្នុងរយៈពេល <xliff:g id="WAIT_TIME">%1$d</xliff:g>វិ ទៀត"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"ការ​ផ្សាយពាណិជ្ជកម្ម​ · នៅសល់ <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ទៀត"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"ចូលមើល​អ្នក​ផ្សាយ​ពាណិជ្ជកម្ម"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"បិទ"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ភ្លេង"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"គ្មាន"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ស្វ័យប្រវត្តិ"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ល្បឿន​ចាក់"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ធម្មតា"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"បទលេខ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"បទលេខ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"បទលេខ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ចំណងជើងចម្រៀងមិនស្គាល់"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"សិល្បករមិនស្គាល់"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"មិន​អាច​ចាក់​វីដេអូ ដែលអ្នក​បាន​ស្នើទេ"</string>
diff --git a/media-widget/src/main/res/values-kn/strings.xml b/media-widget/src/main/res/values-kn/strings.xml
index ee34da2..bd037e0 100644
--- a/media-widget/src/main/res/values-kn/strings.xml
+++ b/media-widget/src/main/res/values-kn/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"ನೀವು <xliff:g id="WAIT_TIME">%1$d</xliff:g> ನಲ್ಲಿ ಜಾಹೀರಾತನ್ನು ಸ್ಕಿಪ್ ಮಾಡಬಹುದು"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"ಜಾಹೀರಾತು · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ಸಮಯ ಬಾಕಿ ಉಳಿದಿದೆ"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"ಜಾಹೀರಾತುದಾರರನ್ನು ಭೇಟಿ ಮಾಡಿ"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ಆಫ್"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ಆಡಿಯೋ ಟ್ರ್ಯಾಕ್"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ಯಾವುದೂ ಬೇಡ"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ಸ್ವಯಂಚಾಲಿತ"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ಪ್ಲೇಬ್ಯಾಕ್ ವೇಗ"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ಸಾಮಾನ್ಯ"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ಟ್ರ್ಯಾಕ್ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ಟ್ರ್ಯಾಕ್ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ಟ್ರ್ಯಾಕ್ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"ನೀವು <xliff:g id="WAIT_TIME">%1$d</xliff:g> ನಲ್ಲಿ ಜಾಹೀರಾತನ್ನು ಸ್ಕಿಪ್ ಮಾಡಬಹುದು"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"ಜಾಹೀರಾತು · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ಸಮಯ ಬಾಕಿ ಉಳಿದಿದೆ"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"ಜಾಹೀರಾತುದಾರರನ್ನು ಭೇಟಿ ಮಾಡಿ"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ಆಫ್"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ಆಡಿಯೋ ಟ್ರ್ಯಾಕ್"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ಯಾವುದೂ ಬೇಡ"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ಸ್ವಯಂಚಾಲಿತ"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ಪ್ಲೇಬ್ಯಾಕ್ ವೇಗ"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ಸಾಮಾನ್ಯ"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ಟ್ರ್ಯಾಕ್ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ಟ್ರ್ಯಾಕ್ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ಟ್ರ್ಯಾಕ್ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ಹಾಡಿನ ಶೀರ್ಷಿಕೆ ತಿಳಿದಿಲ್ಲ"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"ಕಲಾವಿದ ತಿಳಿದಿಲ್ಲ"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"ನೀವು ವಿನಂತಿಸಿದ ಐಟಂ ಅನ್ನು ಪ್ಲೇ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
diff --git a/media-widget/src/main/res/values-ko/strings.xml b/media-widget/src/main/res/values-ko/strings.xml
index 6302cb9..6097f1a 100644
--- a/media-widget/src/main/res/values-ko/strings.xml
+++ b/media-widget/src/main/res/values-ko/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g>초 후에 광고를 건너뛸 수 있음"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"광고 · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> 남음"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"광고주 사이트 방문"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"사용 중지"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"오디오 트랙"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"없음"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"자동"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"재생 속도"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"보통"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>번 트랙"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>번 트랙 - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>번 트랙"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g>초 후에 광고를 건너뛸 수 있음"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"광고 · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> 남음"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"광고주 사이트 방문"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"사용 중지"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"오디오 트랙"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"없음"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"자동"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"재생 속도"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"보통"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>번 트랙"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>번 트랙 - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>번 트랙"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"노래 제목 알 수 없음"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"알 수 없는 아티스트"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"요청한 항목을 재생할 수 없습니다."</string>
diff --git a/media-widget/src/main/res/values-ky/strings.xml b/media-widget/src/main/res/values-ky/strings.xml
index 01e0920..1006961 100644
--- a/media-widget/src/main/res/values-ky/strings.xml
+++ b/media-widget/src/main/res/values-ky/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Жарнаманы <xliff:g id="WAIT_TIME">%1$d</xliff:g>сек. кийин өткөрүп жиберсеңиз болот"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Жарнама · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> калды"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Жарнама берүүчүгө баш багыңыз"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Өчүк"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Аудиотрек"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Жок"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Авто"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Ойнотуу ылдамдыгы"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Орточо"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-трек"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-трек - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>-трек"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Жарнаманы <xliff:g id="WAIT_TIME">%1$d</xliff:g>сек. кийин өткөрүп жиберсеңиз болот"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Жарнама · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> калды"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Жарнама берүүчүгө баш багыңыз"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Өчүк"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Аудиотрек"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Жок"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Авто"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Ойнотуу ылдамдыгы"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Орточо"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-трек"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-трек - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>-трек"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Ырдын аталышы белгисиз"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Аткаруучу белгисиз"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Сиз сураган нерсе ойнотулбай койду"</string>
diff --git a/media-widget/src/main/res/values-lo/strings.xml b/media-widget/src/main/res/values-lo/strings.xml
index 9e090cc..9abc64b 100644
--- a/media-widget/src/main/res/values-lo/strings.xml
+++ b/media-widget/src/main/res/values-lo/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"ທ່ານສາມາດຂ້າມໂຄສະນາໄດ້ໃນອີກ <xliff:g id="WAIT_TIME">%1$d</xliff:g> ວິ"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"ໂຄສະນາ · ຍັງເຫຼືອ <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"​ເຂົ້າ​ເບິ່ງ​ຜູ້ລົງໂຄສະນາ"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ປິດ"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ແທຣັກສຽງ"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ບໍ່ມີ"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ອັດຕະໂນມັດ"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ຄວາມໄວການສາຍ"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ປົກກະຕິ"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ແທຣັກ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ແທຣັກ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ແທຣັກ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"ທ່ານສາມາດຂ້າມໂຄສະນາໄດ້ໃນອີກ <xliff:g id="WAIT_TIME">%1$d</xliff:g> ວິ"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"ໂຄສະນາ · ຍັງເຫຼືອ <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"​ເຂົ້າ​ເບິ່ງ​ຜູ້ລົງໂຄສະນາ"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ປິດ"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ແທຣັກສຽງ"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ບໍ່ມີ"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ອັດຕະໂນມັດ"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ຄວາມໄວການສາຍ"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ປົກກະຕິ"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ແທຣັກ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ແທຣັກ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ແທຣັກ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ບໍ່ຮູ້ຈັກຊື່ເພງ"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"ບໍ່ຮູ້ຈັກສິນລະປິນ"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"ບໍ່ສາມາດຫຼິ້ນລາຍການທີ່ທ່ານຮ້ອງຂໍໄວ້"</string>
diff --git a/media-widget/src/main/res/values-lt/strings.xml b/media-widget/src/main/res/values-lt/strings.xml
index a297b26..a482004 100644
--- a/media-widget/src/main/res/values-lt/strings.xml
+++ b/media-widget/src/main/res/values-lt/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Skelbimą galėsite praleisti po <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Skelbimas · Liko <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Apsilankyti reklamuotojo svetainėje"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Išjungta"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Garso takelis"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nėra"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatinė"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Atkūrimo sparta"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Įprasta"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> takelis"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> takelis – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g> takelis"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Skelbimą galėsite praleisti po <xliff:g id="WAIT_TIME">%1$d</xliff:g> sek."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Skelbimas · Liko <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Apsilankyti reklamuotojo svetainėje"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Išjungta"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Garso takelis"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nėra"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatinė"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Atkūrimo sparta"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Įprasta"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> takelis"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> takelis – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g> takelis"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Nežinomas dainos pavadinimas"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Nežinomas atlikėjas"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Nepavyko paleisti elemento, dėl kurio pateikėte užklausą"</string>
diff --git a/media-widget/src/main/res/values-lv/strings.xml b/media-widget/src/main/res/values-lv/strings.xml
index 17a19ca..96c8ddb 100644
--- a/media-widget/src/main/res/values-lv/strings.xml
+++ b/media-widget/src/main/res/values-lv/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Pēc <xliff:g id="WAIT_TIME">%1$d</xliff:g> s varēsiet izlaist reklāmu"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklāma. · Atlikušais laiks: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>."</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Apmeklēt reklāmdevēja lapu"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Izslēgti"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio ieraksts"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nav"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automātiski"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Atskaņošanas ātrums"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normāls"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. ieraksts"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. ieraksts – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. ieraksts"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Pēc <xliff:g id="WAIT_TIME">%1$d</xliff:g> s varēsiet izlaist reklāmu"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklāma. · Atlikušais laiks: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>."</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Apmeklēt reklāmdevēja lapu"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Izslēgti"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio ieraksts"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nav"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automātiski"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Atskaņošanas ātrums"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normāls"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. ieraksts"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. ieraksts – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. ieraksts"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Nezināms dziesmas nosaukums"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Nezināms izpildītājs"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Nevarēja atskaņot pieprasīto vienumu."</string>
diff --git a/media-widget/src/main/res/values-mk/strings.xml b/media-widget/src/main/res/values-mk/strings.xml
index c715c6d..b4a673e 100644
--- a/media-widget/src/main/res/values-mk/strings.xml
+++ b/media-widget/src/main/res/values-mk/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Може да ја прескокнете рекламата за <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Реклама · уште <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Посети го огласувачот"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Исклучено"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Звучен запис"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Нема"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Автоматски"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Брзина на репродукцијата"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Нормално"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Песна <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Песна <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Песна <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Може да ја прескокнете рекламата за <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Реклама · уште <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Посети го огласувачот"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Исклучено"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Звучен запис"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Нема"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Автоматски"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Брзина на репродукцијата"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Нормално"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Песна <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Песна <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Песна <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Непознат наслов на песна"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Непознат изведувач"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Не можеше да се пушти ставката што ја побаравте"</string>
diff --git a/media-widget/src/main/res/values-ml/strings.xml b/media-widget/src/main/res/values-ml/strings.xml
index 063c660..9f5726b 100644
--- a/media-widget/src/main/res/values-ml/strings.xml
+++ b/media-widget/src/main/res/values-ml/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g>-ൽ പരസ്യം ഒഴിവാക്കാം"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"പരസ്യം · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> സമയം ശേഷിക്കുന്നു"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"പരസ്യദാതാവിന്റെ വെബ്‌സൈറ്റ് സന്ദർശിക്കുക"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ഓഫ്"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ഓഡിയോ ട്രാക്ക്"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ഒന്നുമില്ല"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"സ്വമേധയാ"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"പ്ലേബാക്ക് വേഗത"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"സാധാരണം"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ട്രാക്ക് <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ട്രാക്ക് <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ട്രാക്ക് <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g>-ൽ പരസ്യം ഒഴിവാക്കാം"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"പരസ്യം · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> സമയം ശേഷിക്കുന്നു"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"പരസ്യദാതാവിന്റെ വെബ്‌സൈറ്റ് സന്ദർശിക്കുക"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ഓഫ്"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ഓഡിയോ ട്രാക്ക്"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ഒന്നുമില്ല"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"സ്വമേധയാ"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"പ്ലേബാക്ക് വേഗത"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"സാധാരണം"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ട്രാക്ക് <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ട്രാക്ക് <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ട്രാക്ക് <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"പാട്ടിന്റെ പേര് അജ്ഞാതം"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"അജ്ഞാത ആർട്ടിസ്‌റ്റ്"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"നിങ്ങൾ അഭ്യർത്ഥിച്ച ഇനം പ്ലേ ചെയ്യാനായില്ല"</string>
diff --git a/media-widget/src/main/res/values-mn/strings.xml b/media-widget/src/main/res/values-mn/strings.xml
index be28541..6da4cc2 100644
--- a/media-widget/src/main/res/values-mn/strings.xml
+++ b/media-widget/src/main/res/values-mn/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Та зарыг <xliff:g id="WAIT_TIME">%1$d</xliff:g>секундийн дараа алгасах боломжтой"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Зар · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> хугацаа үлдсэн"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Сурталчлагчид зочлох"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Идэвхгүй"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Аудио бичлэг"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Байхгүй"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Автомат"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Дахин тоглуулах хурд"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Хэвийн"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Бичлэг <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Бичлэг <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Бичлэг <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Та зарыг <xliff:g id="WAIT_TIME">%1$d</xliff:g>секундийн дараа алгасах боломжтой"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Зар · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> хугацаа үлдсэн"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Сурталчлагчид зочлох"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Идэвхгүй"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Аудио бичлэг"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Байхгүй"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Автомат"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Дахин тоглуулах хурд"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Хэвийн"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Бичлэг <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Бичлэг <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Бичлэг <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Дууны нэр тодорхойгүй"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Уран бүтээлч тодорхойгүй"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Таны хүсэлт тавьсан зүйлийг тоглуулж чадсангүй"</string>
diff --git a/media-widget/src/main/res/values-mr/strings.xml b/media-widget/src/main/res/values-mr/strings.xml
index 1197019..96c92d4 100644
--- a/media-widget/src/main/res/values-mr/strings.xml
+++ b/media-widget/src/main/res/values-mr/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"तुम्ही <xliff:g id="WAIT_TIME">%1$d</xliff:g>से मध्ये जाहिरात वगळू शकता"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"जाहिरात · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> शिल्लक"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"जाहिरातदाराला भेट द्या"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"बंद"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ऑडिओ ट्रॅक"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"काहीही नाही"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"अॉटो"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"प्लेबॅकचा वेग"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"सामान्य"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> ट्रॅक करा"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g> ट्रॅक करा"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g> ट्रॅक करा"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"तुम्ही <xliff:g id="WAIT_TIME">%1$d</xliff:g>से मध्ये जाहिरात वगळू शकता"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"जाहिरात · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> शिल्लक"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"जाहिरातदाराला भेट द्या"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"बंद"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ऑडिओ ट्रॅक"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"काहीही नाही"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"अॉटो"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"प्लेबॅकचा वेग"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"सामान्य"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> ट्रॅक करा"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g> ट्रॅक करा"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g> ट्रॅक करा"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"गाण्याचे शीर्षक अज्ञात"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"अज्ञात कलाकार"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"तुम्ही विनंती केलेला आयटम प्ले करणे शक्य झाले नाही"</string>
diff --git a/media-widget/src/main/res/values-ms/strings.xml b/media-widget/src/main/res/values-ms/strings.xml
index bb5c6f3..a804b57 100644
--- a/media-widget/src/main/res/values-ms/strings.xml
+++ b/media-widget/src/main/res/values-ms/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Anda boleh melangkau Iklan dalam <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Iklan · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> lagi"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Lawati Pengiklan"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Mati"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Runut audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Tiada"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatik"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Kelajuan main balik"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Biasa"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Runut <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Runut <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Runut <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Anda boleh melangkau Iklan dalam <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Iklan · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> lagi"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Lawati Pengiklan"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Mati"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Runut audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Tiada"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatik"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Kelajuan main balik"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Biasa"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Runut <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Runut <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Runut <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Tajuk lagu tidak diketahui"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artis tidak diketahui"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Tidak dapat memainkan item yang anda minta"</string>
diff --git a/media-widget/src/main/res/values-my/strings.xml b/media-widget/src/main/res/values-my/strings.xml
index b18a96d..944463b 100644
--- a/media-widget/src/main/res/values-my/strings.xml
+++ b/media-widget/src/main/res/values-my/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> စက္ကန့်တွင် \'ကြော်ငြာ\' ကို ကျော်နိုင်ပါမည်"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"ကြော်ငြာ · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ကျန်သည်"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"ကြော်ငြာရှင်၏ စာမျက်နှာသို့ ဝင်ကြည့်ရန်"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ပိတ်ထားသည်"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"သီချင်း"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"မရှိ"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"အလိုအလျောက်"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ဖွင့်ရန် အမြန်နှုန်း"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ပုံမှန်"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"၀၀:၀၀:၀၀"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"အပုဒ်ရေ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"အပုဒ်ရေ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"အပုဒ်ရေ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> စက္ကန့်တွင် \'ကြော်ငြာ\' ကို ကျော်နိုင်ပါမည်"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"ကြော်ငြာ · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ကျန်သည်"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"ကြော်ငြာရှင်၏ စာမျက်နှာသို့ ဝင်ကြည့်ရန်"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ပိတ်ထားသည်"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"သီချင်း"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"မရှိ"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"အလိုအလျောက်"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ဖွင့်ရန် အမြန်နှုန်း"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ပုံမှန်"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"၀၀:၀၀:၀၀"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"အပုဒ်ရေ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"အပုဒ်ရေ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"အပုဒ်ရေ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"အမည်မသိ သီချင်းခေါင်းစဉ်"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"အမည်မသိ အနုပညာရှင်"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"သင်တောင်းဆိုထားသည့်အရာကို ဖွင့်၍မရပါ"</string>
diff --git a/media-widget/src/main/res/values-nb/strings.xml b/media-widget/src/main/res/values-nb/strings.xml
index 143aea8..e43e18b 100644
--- a/media-widget/src/main/res/values-nb/strings.xml
+++ b/media-widget/src/main/res/values-nb/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Du kan hoppe over annonsen om <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Annonse · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> gjenstår"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Besøk annonsøren"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Av"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Lydspor"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Ingen"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatisk"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Avspillingshastighet"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Spor <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Spor <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Spor <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Du kan hoppe over annonsen om <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Annonse · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> gjenstår"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Besøk annonsøren"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Av"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Lydspor"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Ingen"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatisk"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Avspillingshastighet"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Spor <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Spor <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Spor <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Ukjent sangtittel"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Ukjent artist"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Kunne ikke spille av elementet du har bedt om"</string>
diff --git a/media-widget/src/main/res/values-ne/strings.xml b/media-widget/src/main/res/values-ne/strings.xml
index 44885569..6208bd0 100644
--- a/media-widget/src/main/res/values-ne/strings.xml
+++ b/media-widget/src/main/res/values-ne/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"तपाईं <xliff:g id="WAIT_TIME">%1$d</xliff:g> सेकेन्डमा विज्ञापन हटाउन सक्नुहुन्छ"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"विज्ञापन · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> बाँकी"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"विज्ञापनदाताको पृष्ठमा जानुहोस्"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"निष्क्रिय"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"अडियो ट्र्याक"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"कुनै पनि होइन"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"स्वतः"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"प्लेब्याकको गति"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"सामान्य"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ट्र्याक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ट्र्याक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ट्र्याक <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"तपाईं <xliff:g id="WAIT_TIME">%1$d</xliff:g> सेकेन्डमा विज्ञापन हटाउन सक्नुहुन्छ"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"विज्ञापन · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> बाँकी"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"विज्ञापनदाताको पृष्ठमा जानुहोस्"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"निष्क्रिय"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"अडियो ट्र्याक"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"कुनै पनि होइन"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"स्वतः"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"प्लेब्याकको गति"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"सामान्य"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ट्र्याक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ट्र्याक <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ट्र्याक <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"गीतको शीर्षक अज्ञात"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"कलाकारको नाम अज्ञात"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"तपाईंले अनुरोध गर्नुभएको वस्तु प्ले गर्न सकिएन"</string>
diff --git a/media-widget/src/main/res/values-nl/strings.xml b/media-widget/src/main/res/values-nl/strings.xml
index 68f0333..275e010 100644
--- a/media-widget/src/main/res/values-nl/strings.xml
+++ b/media-widget/src/main/res/values-nl/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Advertentie overslaan over <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Advertentie · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> resterend"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Naar website adverteerder"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Uit"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audiotrack"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Geen"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Afspeelsnelheid"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normaal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-<xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Advertentie overslaan over <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Advertentie · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> resterend"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Naar website adverteerder"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Uit"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audiotrack"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Geen"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Auto"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Afspeelsnelheid"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normaal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>-<xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Titel van nummer onbekend"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artiest onbekend"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Kan het gevraagde item niet afspelen"</string>
diff --git a/media-widget/src/main/res/values-or/strings.xml b/media-widget/src/main/res/values-or/strings.xml
index 2b8d2c5..a7a8829 100644
--- a/media-widget/src/main/res/values-or/strings.xml
+++ b/media-widget/src/main/res/values-or/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"ଆପଣ ଏହି ବିଜ୍ଞାପନକୁ <xliff:g id="WAIT_TIME">%1$d</xliff:g>ସେ.ରେ ଛାଡ଼ିଦେଇପାରିବେ"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"· <xliff:g id="REMAINING_TIME">%1$s</xliff:g>ଟି ବିଜ୍ଞାପନ ବଳକା ଅଛି"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"ବିଜ୍ଞାପକଙ୍କ ନିକଟକୁ ଯାଆନ୍ତୁ"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ଅଫ୍"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ଅଡିଓ ଟ୍ରାକ୍"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"କିଛିନାହିଁ"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ସ୍ୱଚାଳିତ"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ପ୍ଲେବ୍ୟାକ୍‌ର ବେଗ"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ସାଧାରଣ"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ଟ୍ରାକ୍ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ଟ୍ରାକ୍ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ଟ୍ରାକ୍ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"ଆପଣ ଏହି ବିଜ୍ଞାପନକୁ <xliff:g id="WAIT_TIME">%1$d</xliff:g>ସେ.ରେ ଛାଡ଼ିଦେଇପାରିବେ"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"· <xliff:g id="REMAINING_TIME">%1$s</xliff:g>ଟି ବିଜ୍ଞାପନ ବଳକା ଅଛି"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"ବିଜ୍ଞାପକଙ୍କ ନିକଟକୁ ଯାଆନ୍ତୁ"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ଅଫ୍"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ଅଡିଓ ଟ୍ରାକ୍"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"କିଛିନାହିଁ"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ସ୍ୱଚାଳିତ"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ପ୍ଲେବ୍ୟାକ୍‌ର ବେଗ"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ସାଧାରଣ"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ଟ୍ରାକ୍ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ଟ୍ରାକ୍ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ଟ୍ରାକ୍ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ଗୀତ ଶୀର୍ଷକ ଅଜଣା ଅଟେ"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"ଅଜଣା କଳାକାର"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"ଆପଣ ଅନୁରୋଧ କରିଥିବା ଆଇଟମ୍ ଚଲାଇହେବ ନାହିଁ"</string>
diff --git a/media-widget/src/main/res/values-pa/strings.xml b/media-widget/src/main/res/values-pa/strings.xml
index 5553afb..0a74b68 100644
--- a/media-widget/src/main/res/values-pa/strings.xml
+++ b/media-widget/src/main/res/values-pa/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"ਤੁਸੀਂ <xliff:g id="WAIT_TIME">%1$d</xliff:g>ਸਕਿੰ ਤੋਂ ਬਾਅਦ ਵਿਗਿਆਪਨ ਨੂੰ ਛੱਡ ਸਕਦੇ ਹੋ"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"ਵਿਗਿਆਪਨ · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"ਵਿਗਿਆਪਨਦਾਤਾ ਦੀ ਵੈੱਬਸਾਈਟ \'ਤੇ ਜਾਓ"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ਬੰਦ"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ਆਡੀਓ ਟਰੈਕ"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ਕੋਈ ਨਹੀਂ"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ਸਵੈਚਲਿਤ"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ਪਲੇਬੈਕ ਦੀ ਗਤੀ"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ਸਧਾਰਨ"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ਟਰੈਕ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ਟਰੈਕ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ਟਰੈਕ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"ਤੁਸੀਂ <xliff:g id="WAIT_TIME">%1$d</xliff:g>ਸਕਿੰ ਤੋਂ ਬਾਅਦ ਵਿਗਿਆਪਨ ਨੂੰ ਛੱਡ ਸਕਦੇ ਹੋ"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"ਵਿਗਿਆਪਨ · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"ਵਿਗਿਆਪਨਦਾਤਾ ਦੀ ਵੈੱਬਸਾਈਟ \'ਤੇ ਜਾਓ"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ਬੰਦ"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ਆਡੀਓ ਟਰੈਕ"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ਕੋਈ ਨਹੀਂ"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ਸਵੈਚਲਿਤ"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ਪਲੇਬੈਕ ਦੀ ਗਤੀ"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ਸਧਾਰਨ"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ਟਰੈਕ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ਟਰੈਕ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ਟਰੈਕ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ਗੀਤ ਦਾ ਸਿਰਲੇਖ ਅਗਿਆਤ ਹੈ"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"ਕਲਾਕਾਰ ਅਗਿਆਤ ਹੈ"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਬੇਨਤੀ ਕੀਤੀ ਗਈ ਆਈਟਮ ਨਹੀਂ ਚਲਾਈ ਜਾ ਸਕੀ"</string>
diff --git a/media-widget/src/main/res/values-pl/strings.xml b/media-widget/src/main/res/values-pl/strings.xml
index 2c6aeae..6a0fc80 100644
--- a/media-widget/src/main/res/values-pl/strings.xml
+++ b/media-widget/src/main/res/values-pl/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Możesz pominąć reklamę za <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklama · Pozostało: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Odwiedź stronę reklamodawcy"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Wył."</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Ścieżka audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Brak"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatyczna"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Prędkość odtwarzania"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normalna"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Ścieżka <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Ścieżka <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Ścieżka <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Możesz pominąć reklamę za <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklama · Pozostało: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Odwiedź stronę reklamodawcy"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Wył."</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Ścieżka audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Brak"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatyczna"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Prędkość odtwarzania"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normalna"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Ścieżka <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Ścieżka <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Ścieżka <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Nieznany tytuł utworu"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Nieznany wykonawca"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Nie można odtworzyć żądanego elementu"</string>
diff --git a/media-widget/src/main/res/values-pt-rBR/strings.xml b/media-widget/src/main/res/values-pt-rBR/strings.xml
index 3e286bc..0dc9a1b 100644
--- a/media-widget/src/main/res/values-pt-rBR/strings.xml
+++ b/media-widget/src/main/res/values-pt-rBR/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Você pode pular o anúncio em <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Anúncio · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> restante(s)"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Acesse a página do anunciante"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Desativado"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Faixa de áudio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nenhum"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automático"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocidade da reprodução"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Faixa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Você pode pular o anúncio em <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Anúncio · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> restante(s)"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Acesse a página do anunciante"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Desativado"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Faixa de áudio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nenhum"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automático"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocidade da reprodução"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Faixa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Título da música desconhecido"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista desconhecido"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Não foi possível reproduzir o item solicitado"</string>
diff --git a/media-widget/src/main/res/values-pt-rPT/strings.xml b/media-widget/src/main/res/values-pt-rPT/strings.xml
index 72618aa..809e79b 100644
--- a/media-widget/src/main/res/values-pt-rPT/strings.xml
+++ b/media-widget/src/main/res/values-pt-rPT/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Pode ignorar o anúncio em <xliff:g id="WAIT_TIME">%1$d</xliff:g> s."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Anúncio · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> restante(s)"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Visitar anunciante"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Desativadas"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Faixa de áudio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nenhum"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automático"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocidade de reprodução"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Faixa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Pode ignorar o anúncio em <xliff:g id="WAIT_TIME">%1$d</xliff:g> s."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Anúncio · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> restante(s)"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Visitar anunciante"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Desativadas"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Faixa de áudio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nenhum"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automático"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocidade de reprodução"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Faixa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Título da música desconhecido"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista desconhecido"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Não foi possível reproduzir o item solicitado."</string>
diff --git a/media-widget/src/main/res/values-pt/strings.xml b/media-widget/src/main/res/values-pt/strings.xml
index 3e286bc..0dc9a1b 100644
--- a/media-widget/src/main/res/values-pt/strings.xml
+++ b/media-widget/src/main/res/values-pt/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Você pode pular o anúncio em <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Anúncio · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> restante(s)"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Acesse a página do anunciante"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Desativado"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Faixa de áudio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Nenhum"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automático"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Velocidade da reprodução"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Faixa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Você pode pular o anúncio em <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Anúncio · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> restante(s)"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Acesse a página do anunciante"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Desativado"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Faixa de áudio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Nenhum"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automático"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Velocidade da reprodução"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Faixa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Faixa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Título da música desconhecido"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artista desconhecido"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Não foi possível reproduzir o item solicitado"</string>
diff --git a/media-widget/src/main/res/values-ro/strings.xml b/media-widget/src/main/res/values-ro/strings.xml
index 98c085a..316b734 100644
--- a/media-widget/src/main/res/values-ro/strings.xml
+++ b/media-widget/src/main/res/values-ro/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Puteți închide reclama peste <xliff:g id="WAIT_TIME">%1$d</xliff:g> sec."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reclamă · a mai rămas <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Vizitați site-ul advertiserului"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Dezactivat"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Înregistrare audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Niciuna"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automat"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Viteza de redare"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Înregistrare audio <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Înregistrare audio <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Înregistrare audio <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Puteți închide reclama peste <xliff:g id="WAIT_TIME">%1$d</xliff:g> sec."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reclamă · a mai rămas <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Vizitați site-ul advertiserului"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Dezactivat"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Înregistrare audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Niciuna"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automat"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Viteza de redare"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Înregistrare audio <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Înregistrare audio <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Înregistrare audio <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Titlul melodiei este necunoscut"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artist necunoscut"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Articolul solicitat nu a putut fi redat"</string>
diff --git a/media-widget/src/main/res/values-ru/strings.xml b/media-widget/src/main/res/values-ru/strings.xml
index fd2be11..cfbd113 100644
--- a/media-widget/src/main/res/values-ru/strings.xml
+++ b/media-widget/src/main/res/values-ru/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Можно пропустить через <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Реклама · Закончится через <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Перейти на сайт рекламодателя"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Без субтитров"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Трек"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Нет"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Авто"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Скорость воспроизведения"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Обычная"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Трек <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Трек <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. Язык: <xliff:g id="LANG">%2$s</xliff:g>."</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Трек <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Можно пропустить через <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Реклама · Закончится через <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Перейти на сайт рекламодателя"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Без субтитров"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Трек"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Нет"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Авто"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Скорость воспроизведения"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Обычная"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Трек <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Трек <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. Язык: <xliff:g id="LANG">%2$s</xliff:g>."</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Трек <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Без названия"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Неизвестный исполнитель"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Не удалось воспроизвести выбранное видео."</string>
diff --git a/media-widget/src/main/res/values-si/strings.xml b/media-widget/src/main/res/values-si/strings.xml
index 989d013..4438adc 100644
--- a/media-widget/src/main/res/values-si/strings.xml
+++ b/media-widget/src/main/res/values-si/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"ඔබට වෙළඳ දැන්වීම <xliff:g id="WAIT_TIME">%1$d</xliff:g>කින් මග හැරිය හැකිය"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"වෙළඳ දැන්වීම · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ඉතිරිව ඇත"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"ප්‍රචාරක වෙත පැමිණෙන්න"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"අක්‍රිය"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ශ්‍රව්‍ය ඛණ්ඩය"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"කිසිවක් නැත"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ස්වයං"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"පසුධාවන වේගය"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"සාමාන්‍ය"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ඛණ්ඩය <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ඛණ්ඩය <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ඛණ්ඩය <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"ඔබට වෙළඳ දැන්වීම <xliff:g id="WAIT_TIME">%1$d</xliff:g>කින් මග හැරිය හැකිය"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"වෙළඳ දැන්වීම · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> ඉතිරිව ඇත"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"ප්‍රචාරක වෙත පැමිණෙන්න"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"අක්‍රිය"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ශ්‍රව්‍ය ඛණ්ඩය"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"කිසිවක් නැත"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ස්වයං"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"පසුධාවන වේගය"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"සාමාන්‍ය"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ඛණ්ඩය <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ඛණ්ඩය <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ඛණ්ඩය <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"නොදන්නා ගීත මාතෘකාවකි"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"නොදන්නා කලාකරුවෙකි"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"ඔබ ඉල්ලා සිටි අයිතමය වාදනය කළ නොහැකි විය"</string>
diff --git a/media-widget/src/main/res/values-sk/strings.xml b/media-widget/src/main/res/values-sk/strings.xml
index 18e47792..19d37fd 100644
--- a/media-widget/src/main/res/values-sk/strings.xml
+++ b/media-widget/src/main/res/values-sk/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Reklamu môžete preskočiť o <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklama · zostávajúci čas: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Navštíviť web inzerenta"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Vypnúť"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Zvuková stopa"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Žiadne"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatická"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Rýchlosť prehrávania"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normálne"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. verzia titulkov"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. verzia titulkov – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. zvuková stopa"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Reklamu môžete preskočiť o <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklama · zostávajúci čas: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Navštíviť web inzerenta"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Vypnúť"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Zvuková stopa"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Žiadne"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatická"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Rýchlosť prehrávania"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normálne"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. verzia titulkov"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. verzia titulkov – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. zvuková stopa"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Neznámy názov skladby"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Neznámy interpret"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Požadovanú položku sa nepodarilo prehrať"</string>
diff --git a/media-widget/src/main/res/values-sl/strings.xml b/media-widget/src/main/res/values-sl/strings.xml
index 7ed4d12..b440dfe 100644
--- a/media-widget/src/main/res/values-sl/strings.xml
+++ b/media-widget/src/main/res/values-sl/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Oglas lahko preskočite čez <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Preostali čas oglasa: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Obiščite oglaševalca"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Izklopljeno"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Zvočni posnetek"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Brez"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Samodejno"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Hitrost predvajanja"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Običajno"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Skladba <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Skladba <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Skladba <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Oglas lahko preskočite čez <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Preostali čas oglasa: <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Obiščite oglaševalca"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Izklopljeno"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Zvočni posnetek"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Brez"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Samodejno"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Hitrost predvajanja"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Običajno"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Skladba <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Skladba <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Skladba <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Neznan naslov skladbe"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Neznan izvajalec"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Elementa, ki ste ga zahtevali, ni bilo mogoče predvajati"</string>
diff --git a/media-widget/src/main/res/values-sq/strings.xml b/media-widget/src/main/res/values-sq/strings.xml
index 6552b7e3..8c6ba14 100644
--- a/media-widget/src/main/res/values-sq/strings.xml
+++ b/media-widget/src/main/res/values-sq/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Mund të kapërcesh reklamën në <xliff:g id="WAIT_TIME">%1$d</xliff:g> s."</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklamë · Mbeten <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Vizito reklamuesin"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Fik"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Pjesë audio"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Asnjë"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatik"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Shpejtësia e luajtjes"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Pjesa muzikore <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pjesa muzikore <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Pjesa muzikore <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Mund të kapërcesh reklamën në <xliff:g id="WAIT_TIME">%1$d</xliff:g> s."</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklamë · Mbeten <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Vizito reklamuesin"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Fik"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Pjesë audio"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Asnjë"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatik"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Shpejtësia e luajtjes"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Pjesa muzikore <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Pjesa muzikore <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Pjesa muzikore <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Titulli i këngës i panjohur"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Artisti i panjohur"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Artikulli i kërkuar nuk mund të luhej"</string>
diff --git a/media-widget/src/main/res/values-sr/strings.xml b/media-widget/src/main/res/values-sr/strings.xml
index a5e4c16..d31c2a2 100644
--- a/media-widget/src/main/res/values-sr/strings.xml
+++ b/media-widget/src/main/res/values-sr/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Можете да прескочите оглас за <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Оглас · Преостало је још <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Посетите оглашавача"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Искључено"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Аудио снимак"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Ништа"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Аутоматски"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Брзина репродукције"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Нормално"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. песма"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. песма – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. песма"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Можете да прескочите оглас за <xliff:g id="WAIT_TIME">%1$d</xliff:g> сек"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Оглас · Преостало је још <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Посетите оглашавача"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Искључено"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Аудио снимак"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Ништа"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Аутоматски"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Брзина репродукције"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Нормално"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. песма"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. песма – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. песма"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Непознат назив песме"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Непознат извођач"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Нисмо успели да пустимо ставку коју сте захтевали"</string>
diff --git a/media-widget/src/main/res/values-sv/strings.xml b/media-widget/src/main/res/values-sv/strings.xml
index 1ebd72b7..c3dc671 100644
--- a/media-widget/src/main/res/values-sv/strings.xml
+++ b/media-widget/src/main/res/values-sv/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Du kan hoppa över annonsen om <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Annons · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> återstår"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Besök annonsör"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Av"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Ljudspår"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Inga"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Automatiskt"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Uppspelningshastighet"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Spår <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Spår <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Spår <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Du kan hoppa över annonsen om <xliff:g id="WAIT_TIME">%1$d</xliff:g> s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Annons · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> återstår"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Besök annonsör"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Av"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Ljudspår"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Inga"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Automatiskt"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Uppspelningshastighet"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Spår <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Spår <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Spår <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Okänd låttitel"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Okänd artist"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Det gick inte att spela upp det valda objektet"</string>
diff --git a/media-widget/src/main/res/values-sw/strings.xml b/media-widget/src/main/res/values-sw/strings.xml
index 5df3f5a..7fa47ec 100644
--- a/media-widget/src/main/res/values-sw/strings.xml
+++ b/media-widget/src/main/res/values-sw/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Unaweza kuruka tangazo baada ya sekunde <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Tangazo · Zimesalia <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Tembelea Mtangazaji"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Imezimwa"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Wimbo wa sauti"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Hamna"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Otomatiki"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Kasi ya kucheza"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Kawaida"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Wimbo wa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Wimbo wa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Wimbo wa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Unaweza kuruka tangazo baada ya sekunde <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Tangazo · Zimesalia <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Tembelea Mtangazaji"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Imezimwa"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Wimbo wa sauti"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Hamna"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Otomatiki"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Kasi ya kucheza"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Kawaida"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Wimbo wa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Wimbo wa <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Wimbo wa <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Jina la wimbo halijulikani"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Msanii hajulikani"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Imeshindwa kucheza wimbo ulioomba"</string>
diff --git a/media-widget/src/main/res/values-ta/strings.xml b/media-widget/src/main/res/values-ta/strings.xml
index 8affdf1..db743e7 100644
--- a/media-widget/src/main/res/values-ta/strings.xml
+++ b/media-widget/src/main/res/values-ta/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> விநாடிகளில் விளம்பரத்தைத் தவிர்க்கலாம்"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"விளம்பரம் · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> மீதமுள்ளது"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"விளம்பரதாரர் இணையதளம்"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ஆஃப்"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ஆடியோ டிராக்"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ஏதுமில்லை"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"தானியங்கு"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"வீடியோ இயக்க வேகம்"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"இயல்பு"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"டிராக் <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"டிராக் <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"டிராக் <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"<xliff:g id="WAIT_TIME">%1$d</xliff:g> விநாடிகளில் விளம்பரத்தைத் தவிர்க்கலாம்"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"விளம்பரம் · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> மீதமுள்ளது"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"விளம்பரதாரர் இணையதளம்"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ஆஃப்"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ஆடியோ டிராக்"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ஏதுமில்லை"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"தானியங்கு"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"வீடியோ இயக்க வேகம்"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"இயல்பு"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"டிராக் <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"டிராக் <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"டிராக் <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"பாடல் தலைப்பு தெரியவில்லை"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"கலைஞர் பெயர் தெரியவில்லை"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"நீங்கள் கோரிய வீடியோவை இயக்க இயலவில்லை"</string>
diff --git a/media-widget/src/main/res/values-te/strings.xml b/media-widget/src/main/res/values-te/strings.xml
index f56e160..ce9da03 100644
--- a/media-widget/src/main/res/values-te/strings.xml
+++ b/media-widget/src/main/res/values-te/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"మీరు <xliff:g id="WAIT_TIME">%1$d</xliff:g> సెకన్ల తర్వాత ప్రకటనను దాటవేయవచ్చు"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"ప్రకటన · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> సమయం మిగిలి ఉంది"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"ప్రకటనకర్తని సందర్శించండి"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ఆఫ్"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"ఆడియో ట్రాక్"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ఏదీ కాదు"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"స్వయం"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ప్లేబ్యాక్ వేగం"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"సాధారణం"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ట్రాక్ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ట్రాక్ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ట్రాక్ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"మీరు <xliff:g id="WAIT_TIME">%1$d</xliff:g> సెకన్ల తర్వాత ప్రకటనను దాటవేయవచ్చు"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"ప్రకటన · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> సమయం మిగిలి ఉంది"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"ప్రకటనకర్తని సందర్శించండి"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ఆఫ్"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"ఆడియో ట్రాక్"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ఏదీ కాదు"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"స్వయం"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ప్లేబ్యాక్ వేగం"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"సాధారణం"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ట్రాక్ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ట్రాక్ <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ట్రాక్ <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"పాట శీర్షిక తెలియదు"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"కళాకారులు తెలియదు"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"మీరు అభ్యర్థించిన అంశాన్ని ప్లే చేయడం సాధ్యపడలేదు"</string>
diff --git a/media-widget/src/main/res/values-th/strings.xml b/media-widget/src/main/res/values-th/strings.xml
index 4dfb77c..61f4f7e 100644
--- a/media-widget/src/main/res/values-th/strings.xml
+++ b/media-widget/src/main/res/values-th/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"คุณข้ามโฆษณานี้ได้ใน <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"โฆษณา· เหลืออีก <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"เยี่ยมชมผู้ลงโฆษณา"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"ปิด"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"แทร็กเสียง"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"ไม่มี"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"ยานยนต์"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"ความเร็วในการเล่น"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"ปกติ"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"แทร็ก <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"แทร็ก <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"แทร็ก <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"คุณข้ามโฆษณานี้ได้ใน <xliff:g id="WAIT_TIME">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"โฆษณา· เหลืออีก <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"เยี่ยมชมผู้ลงโฆษณา"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"ปิด"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"แทร็กเสียง"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"ไม่มี"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"ยานยนต์"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"ความเร็วในการเล่น"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"ปกติ"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"แทร็ก <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"แทร็ก <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"แทร็ก <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"ไม่ทราบชื่อเพลง"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"ไม่ทราบศิลปิน"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"เล่นวิดีโอที่คุณขอไม่ได้"</string>
diff --git a/media-widget/src/main/res/values-tl/strings.xml b/media-widget/src/main/res/values-tl/strings.xml
index 4eea1a9..383f0ba 100644
--- a/media-widget/src/main/res/values-tl/strings.xml
+++ b/media-widget/src/main/res/values-tl/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Malalaktawan mo ang Ad pagkalipas ng <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> na lang ang natitira"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Bisitahin ang Advertiser"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"I-off"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio track"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Wala"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Awtomatiko"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Bilis ng pag-playback"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Malalaktawan mo ang Ad pagkalipas ng <xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Ad · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> na lang ang natitira"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Bisitahin ang Advertiser"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"I-off"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio track"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Wala"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Awtomatiko"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Bilis ng pag-playback"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Track <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Track <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Hindi alam ang pamagat ng kanta"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Hindi kilalang artist"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Hindi ma-play ang item na hiniling mo"</string>
diff --git a/media-widget/src/main/res/values-tr/strings.xml b/media-widget/src/main/res/values-tr/strings.xml
index d550c7b..30e22b0 100644
--- a/media-widget/src/main/res/values-tr/strings.xml
+++ b/media-widget/src/main/res/values-tr/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Reklamı <xliff:g id="WAIT_TIME">%1$d</xliff:g> sonra atlayabilirsiniz"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklam · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> kaldı"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Reklamvereni Ziyaret Et"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Kapalı"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Ses parçası"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Yok"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Otomatik"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Çalma hızı"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. Parça"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. Parça - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. Parça"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Reklamı <xliff:g id="WAIT_TIME">%1$d</xliff:g> sonra atlayabilirsiniz"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklam · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> kaldı"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Reklamvereni Ziyaret Et"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Kapalı"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Ses parçası"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Yok"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Otomatik"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Çalma hızı"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. Parça"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>. Parça - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>. Parça"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Şarkı adı bilinmiyor"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Sanatçı bilinmiyor"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"İstekte bulunduğunuz öğe oynatılamadı"</string>
diff --git a/media-widget/src/main/res/values-uk/strings.xml b/media-widget/src/main/res/values-uk/strings.xml
index 0ea209b..caa1beb 100644
--- a/media-widget/src/main/res/values-uk/strings.xml
+++ b/media-widget/src/main/res/values-uk/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Оголошення можна пропустити через <xliff:g id="WAIT_TIME">%1$d</xliff:g> с"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Оголошення · Залишилося <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Перейти на сайт рекламодавця"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Вимкнено"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Аудіодоріжка"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Немає"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Автоматично"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Швидкість відтворення"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Звичайно"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Композиція <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Композиція <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Композиція <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Оголошення можна пропустити через <xliff:g id="WAIT_TIME">%1$d</xliff:g> с"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Оголошення · Залишилося <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Перейти на сайт рекламодавця"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Вимкнено"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Аудіодоріжка"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Немає"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Автоматично"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Швидкість відтворення"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Звичайно"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Композиція <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Композиція <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Композиція <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Назва пісні невідома"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Невід. виконавець"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Не вдалося відтворити потрібне відео"</string>
diff --git a/media-widget/src/main/res/values-ur/strings.xml b/media-widget/src/main/res/values-ur/strings.xml
index fbf8cdb..9625b93d 100644
--- a/media-widget/src/main/res/values-ur/strings.xml
+++ b/media-widget/src/main/res/values-ur/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"آپ <xliff:g id="WAIT_TIME">%1$d</xliff:g> سیکنڈ میں اشتہار کو نظر انداز کر سکتے ہیں"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"اشتہار · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> باقی ہے"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"مشتہر ملاحظہ کریں"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"آف"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"آڈیو ٹریک"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"کوئی نہیں"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"خودکار"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"پلے بیک کی رفتار"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"عام"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"ٹریک <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ٹریک <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"ٹریک <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"آپ <xliff:g id="WAIT_TIME">%1$d</xliff:g> سیکنڈ میں اشتہار کو نظر انداز کر سکتے ہیں"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"اشتہار · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> باقی ہے"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"مشتہر ملاحظہ کریں"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"آف"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"آڈیو ٹریک"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"کوئی نہیں"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"خودکار"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"پلے بیک کی رفتار"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"عام"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"ٹریک <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"ٹریک <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"ٹریک <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"گانے کا عنوان نامعلوم ہے"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"فنکار نامعلوم ہے"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"آپ کا مطلوبہ آئٹم نہیں چلایا جا سکا"</string>
diff --git a/media-widget/src/main/res/values-uz/strings.xml b/media-widget/src/main/res/values-uz/strings.xml
index 79d93c2a..f507f8e 100644
--- a/media-widget/src/main/res/values-uz/strings.xml
+++ b/media-widget/src/main/res/values-uz/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Reklamani <xliff:g id="WAIT_TIME">%1$d</xliff:g> soniyadan keyin yopish mumkin"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Reklama · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> qoldi"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Reklama beruvchining saytiga o‘tish"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Yoqilmagan"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Audio trek"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Hech qaysi"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Avtomatik"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Ijro tezligi"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Trek <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Reklamani <xliff:g id="WAIT_TIME">%1$d</xliff:g> soniyadan keyin yopish mumkin"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Reklama · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> qoldi"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Reklama beruvchining saytiga o‘tish"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Yoqilmagan"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Audio trek"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Hech qaysi"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Avtomatik"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Ijro tezligi"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Normal"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Trek <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> – <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Trek <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Nomsiz"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Notanish ijrochi"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Tanlangan video ijro qilinmadi"</string>
diff --git a/media-widget/src/main/res/values-vi/strings.xml b/media-widget/src/main/res/values-vi/strings.xml
index c26b6ed..4e19afb 100644
--- a/media-widget/src/main/res/values-vi/strings.xml
+++ b/media-widget/src/main/res/values-vi/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Bạn có thể bỏ qua quảng cáo sau <xliff:g id="WAIT_TIME">%1$d</xliff:g> giây"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Quảng cáo còn · <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Truy cập vào trang của Nhà quảng cáo"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Tắt"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Bản âm thanh"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Không"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Tự động"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Tốc độ phát lại"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Chuẩn"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Bản nhạc <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Bản nhạc <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Bản nhạc <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Bạn có thể bỏ qua quảng cáo sau <xliff:g id="WAIT_TIME">%1$d</xliff:g> giây"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Quảng cáo còn · <xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Truy cập vào trang của Nhà quảng cáo"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Tắt"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Bản âm thanh"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Không"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Tự động"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Tốc độ phát lại"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Chuẩn"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Bản nhạc <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Bản nhạc <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Bản nhạc <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Tên bài hát không xác định"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Nghệ sĩ không xác định"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Không thể phát mục bạn yêu cầu"</string>
diff --git a/media-widget/src/main/res/values-zh-rCN/strings.xml b/media-widget/src/main/res/values-zh-rCN/strings.xml
index e5e677b..3477080 100644
--- a/media-widget/src/main/res/values-zh-rCN/strings.xml
+++ b/media-widget/src/main/res/values-zh-rCN/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"您可以在 <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒后跳过广告"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"广告剩余时间:<xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"访问广告主网站"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"关闭"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"音轨"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"无"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"自动"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"播放速度"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"正常"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"字幕轨道 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"字幕轨道 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"音轨 <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"您可以在 <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒后跳过广告"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"广告剩余时间:<xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"访问广告主网站"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"关闭"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"音轨"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"无"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"自动"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"播放速度"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"正常"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"字幕轨道 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"字幕轨道 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"音轨 <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"未知歌曲名称"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"未知音乐人"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"无法播放您请求的内容"</string>
diff --git a/media-widget/src/main/res/values-zh-rHK/strings.xml b/media-widget/src/main/res/values-zh-rHK/strings.xml
index 9ab39e1..9589944 100644
--- a/media-widget/src/main/res/values-zh-rHK/strings.xml
+++ b/media-widget/src/main/res/values-zh-rHK/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"您可在 <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒後略過廣告"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"廣告剩餘時間:<xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"瀏覽廣告客戶網站"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"關閉"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"音軌"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"無"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"自動"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"播放速度"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"正常"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"曲目 <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"您可在 <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒後略過廣告"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"廣告剩餘時間:<xliff:g id="REMAINING_TIME">%1$s</xliff:g>"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"瀏覽廣告客戶網站"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"關閉"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"音軌"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"無"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"自動"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"播放速度"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"正常"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"曲目 <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"歌名不明"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"歌手不明"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"無法播放您要求的影片"</string>
diff --git a/media-widget/src/main/res/values-zh-rTW/strings.xml b/media-widget/src/main/res/values-zh-rTW/strings.xml
index 0b4531e3..87f92a4 100644
--- a/media-widget/src/main/res/values-zh-rTW/strings.xml
+++ b/media-widget/src/main/res/values-zh-rTW/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"您可以在 <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒後略過廣告"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"廣告將在 <xliff:g id="REMAINING_TIME">%1$s</xliff:g> 後結束"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"瀏覽廣告商網站"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"關閉"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"音軌"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"無"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"自動"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"播放速度"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"正常"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"曲目 <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"您可以在 <xliff:g id="WAIT_TIME">%1$d</xliff:g> 秒後略過廣告"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"廣告將在 <xliff:g id="REMAINING_TIME">%1$s</xliff:g> 後結束"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"瀏覽廣告商網站"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"關閉"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"音軌"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"無"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"自動"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"播放速度"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"正常"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"曲目 <xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"曲目 <xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"未知的曲名"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"未知的演出者"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"無法播放你要求的項目"</string>
diff --git a/media-widget/src/main/res/values-zu/strings.xml b/media-widget/src/main/res/values-zu/strings.xml
index 3f4703e..8bbaf26 100644
--- a/media-widget/src/main/res/values-zu/strings.xml
+++ b/media-widget/src/main/res/values-zu/strings.xml
@@ -17,19 +17,19 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="MediaControlView2_ad_skip_wait_time" msgid="5221553996045003012">"Ungeqa isikhangiso ngokungu-<xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
-    <string name="MediaControlView2_ad_remaining_time" msgid="569530979387418179">"Isikhangiso · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> esele"</string>
-    <string name="MediaControlView2_ad_text" msgid="649968140965666991">"Vakashela umkhangisi"</string>
-    <string name="MediaControlView2_subtitle_off_text" msgid="4713723682776722273">"Valiwe"</string>
-    <string name="MediaControlView2_audio_track_text" msgid="550490200661664153">"Ithrekhi yomsindo"</string>
-    <string name="MediaControlView2_audio_track_none_text" msgid="8920627943784676298">"Lutho"</string>
-    <string name="MediaControlView2_video_quality_auto_text" msgid="2361919440626099583">"Okuzenzakalelayo"</string>
-    <string name="MediaControlView2_playback_speed_text" msgid="7501705762236755130">"Isivinini sokudlala"</string>
-    <string name="MediaControlView2_playback_speed_normal" msgid="8621780673920663756">"Ivamile"</string>
-    <string name="MediaControlView2_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
-    <string name="MediaControlView2_subtitle_track_number_text" msgid="81813613582208443">"Ithrekhi engu-<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Ithrekhi engu-<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
-    <string name="MediaControlView2_audio_track_number_text" msgid="7535079749165525354">"Ithrekhi engu-<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_ad_skip_wait_time" msgid="5221553996045003012">"Ungeqa isikhangiso ngokungu-<xliff:g id="WAIT_TIME">%1$d</xliff:g>s"</string>
+    <string name="MediaControlView_ad_remaining_time" msgid="569530979387418179">"Isikhangiso · <xliff:g id="REMAINING_TIME">%1$s</xliff:g> esele"</string>
+    <string name="MediaControlView_ad_text" msgid="649968140965666991">"Vakashela umkhangisi"</string>
+    <string name="MediaControlView_subtitle_off_text" msgid="4713723682776722273">"Valiwe"</string>
+    <string name="MediaControlView_audio_track_text" msgid="550490200661664153">"Ithrekhi yomsindo"</string>
+    <string name="MediaControlView_audio_track_none_text" msgid="8920627943784676298">"Lutho"</string>
+    <string name="MediaControlView_video_quality_auto_text" msgid="2361919440626099583">"Okuzenzakalelayo"</string>
+    <string name="MediaControlView_playback_speed_text" msgid="7501705762236755130">"Isivinini sokudlala"</string>
+    <string name="MediaControlView_playback_speed_normal" msgid="8621780673920663756">"Ivamile"</string>
+    <string name="MediaControlView_time_placeholder" msgid="7559147215397038195">"00:00:00"</string>
+    <string name="MediaControlView_subtitle_track_number_text" msgid="81813613582208443">"Ithrekhi engu-<xliff:g id="TRACK_NUMBER">%1$d</xliff:g>"</string>
+    <string name="MediaControlView_subtitle_track_number_and_lang_text" msgid="6322489858351248841">"Ithrekhi engu-<xliff:g id="TRACK_NUMBER">%1$d</xliff:g> - <xliff:g id="LANG">%2$s</xliff:g>"</string>
+    <string name="MediaControlView_audio_track_number_text" msgid="7535079749165525354">"Ithrekhi engu-<xliff:g id="AUDIO_NUMBER">%1$d</xliff:g>"</string>
     <string name="mcv2_music_title_unknown_text" msgid="1872032310053783148">"Isihloko sengoma asaziwa"</string>
     <string name="mcv2_music_artist_unknown_text" msgid="7281381729593359490">"Umculi akaziwa"</string>
     <string name="mcv2_playback_error_text" msgid="8679540579604773521">"Ayikwazi ukudlala into oyicelile"</string>
diff --git a/media-widget/src/main/res/values/attrs.xml b/media-widget/src/main/res/values/attrs.xml
index ef253f8..51e8a0e4a 100644
--- a/media-widget/src/main/res/values/attrs.xml
+++ b/media-widget/src/main/res/values/attrs.xml
@@ -16,8 +16,8 @@
   -->
 
 <resources>
-    <!-- Attributes that are read when parsing a <VideoView2> tag. -->
-    <declare-styleable name="VideoView2">
+    <!-- Attributes that are read when parsing a <VideoView> tag. -->
+    <declare-styleable name="VideoView">
         <!-- Default : true -->
         <attr name="enableControlView" format="boolean" />
         <!-- To choose underlying view type to render a video. Default : surfaceView -->
diff --git a/media-widget/src/main/res/values/strings.xml b/media-widget/src/main/res/values/strings.xml
index c66b66c..5eef413 100644
--- a/media-widget/src/main/res/values/strings.xml
+++ b/media-widget/src/main/res/values/strings.xml
@@ -18,22 +18,22 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- Text for displaying ad skip wait time. -->
-    <string name="MediaControlView2_ad_skip_wait_time">
+    <string name="MediaControlView_ad_skip_wait_time">
         You can skip Ad in <xliff:g id="wait_time" example="5">%1$d</xliff:g>s
     </string>
     <!-- Text for displaying ad total remaining time. -->
-    <string name="MediaControlView2_ad_remaining_time">
+    <string name="MediaControlView_ad_remaining_time">
         Ad · <xliff:g id="remaining_time" example="1:15">%1$s</xliff:g> remaining
     </string>
     <!-- Placeholder text indicating that the user can press the button to go to an external website. -->
-    <string name="MediaControlView2_ad_text">Visit Advertiser</string>
-    <string name="MediaControlView2_subtitle_off_text">Off</string>
-    <string name="MediaControlView2_audio_track_text">Audio track</string>
-    <string name="MediaControlView2_audio_track_none_text">None</string>
-    <string name="MediaControlView2_video_quality_auto_text">Auto</string>
-    <string name="MediaControlView2_playback_speed_text">Playback speed</string>
-    <string name="MediaControlView2_playback_speed_normal">Normal</string>
-    <string-array translatable="false" name="MediaControlView2_playback_speeds">
+    <string name="MediaControlView_ad_text">Visit Advertiser</string>
+    <string name="MediaControlView_subtitle_off_text">Off</string>
+    <string name="MediaControlView_audio_track_text">Audio track</string>
+    <string name="MediaControlView_audio_track_none_text">None</string>
+    <string name="MediaControlView_video_quality_auto_text">Auto</string>
+    <string name="MediaControlView_playback_speed_text">Playback speed</string>
+    <string name="MediaControlView_playback_speed_normal">Normal</string>
+    <string-array translatable="false" name="MediaControlView_playback_speeds">
         <item>0.25x</item>
         <item>0.5x</item>
         <item>0.75x</item>
@@ -42,22 +42,22 @@
         <item>2x</item>
     </string-array>
     <!-- Text for displaying custom playback speed. -->
-    <string translatable="false" name="MediaControlView2_custom_playback_speed_text">
+    <string translatable="false" name="MediaControlView_custom_playback_speed_text">
         <xliff:g id="playback_speed" example="1.05">%1$.2f</xliff:g>x
     </string>
     <!-- Placeholder text for displaying time. Used to calculate which size layout to use. -->
-    <string name="MediaControlView2_time_placeholder">00:00:00</string>
+    <string name="MediaControlView_time_placeholder">00:00:00</string>
 
     <!-- Text for displaying subtitle track number without language info. -->
-    <string name="MediaControlView2_subtitle_track_number_text">
+    <string name="MediaControlView_subtitle_track_number_text">
         Track <xliff:g id="track_number" example="1">%1$d</xliff:g>
     </string>
     <!-- Text for displaying subtitle track number with language info. -->
-    <string name="MediaControlView2_subtitle_track_number_and_lang_text">
+    <string name="MediaControlView_subtitle_track_number_and_lang_text">
         Track <xliff:g id="track_number" example="1">%1$d</xliff:g> - <xliff:g id="lang" example="eng">%2$s</xliff:g>
     </string>
     <!-- Text for displaying audio track number. -->
-    <string name="MediaControlView2_audio_track_number_text">
+    <string name="MediaControlView_audio_track_number_text">
         Track <xliff:g id="audio_number" example="1">%1$d</xliff:g>
     </string>
     <!-- Text for displaying unknown song title. -->
diff --git a/media-widget/src/main/res/values/styles.xml b/media-widget/src/main/res/values/styles.xml
index a06e4c1..fac57fc 100644
--- a/media-widget/src/main/res/values/styles.xml
+++ b/media-widget/src/main/res/values/styles.xml
@@ -135,7 +135,7 @@
 
     <style name="TimeText.Current">
         <item name="android:textColor">@color/white</item>
-        <item name="android:text">@string/MediaControlView2_time_placeholder</item>
+        <item name="android:text">@string/MediaControlView_time_placeholder</item>
     </style>
 
     <style name="TimeText.Interpunct">
@@ -145,7 +145,7 @@
 
     <style name="TimeText.End">
         <item name="android:textColor">@color/white_opacity_70</item>
-        <item name="android:text">@string/MediaControlView2_time_placeholder</item>
+        <item name="android:text">@string/MediaControlView_time_placeholder</item>
     </style>
 
     <style name="BottomBarButton">
diff --git a/media/src/main/java/android/support/v4/media/session/MediaControllerCompat.java b/media/src/main/java/android/support/v4/media/session/MediaControllerCompat.java
index c4c95dd..5c50b89 100644
--- a/media/src/main/java/android/support/v4/media/session/MediaControllerCompat.java
+++ b/media/src/main/java/android/support/v4/media/session/MediaControllerCompat.java
@@ -535,15 +535,15 @@
     }
 
     /**
-     * Gets the SessionToken2 as VersionedParcelable for the session that this controller is
-     * connected to.
+     * Gets the SessionToken in media2 as VersionedParcelable for the session that this controller
+     * is connected to.
      *
      * @return The session's token as VersionedParcelable.
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
-    public @Nullable VersionedParcelable getSessionToken2() {
-        return mToken.getSessionToken2();
+    public @Nullable VersionedParcelable getSession2Token() {
+        return mToken.getSession2Token();
     }
 
     /**
@@ -2297,9 +2297,9 @@
                             IMediaSession.Stub.asInterface(
                                     BundleCompat.getBinder(
                                             resultData, MediaSessionCompat.KEY_EXTRA_BINDER)));
-                    mediaControllerImpl.mSessionToken.setSessionToken2(
+                    mediaControllerImpl.mSessionToken.setSession2Token(
                             ParcelUtils.getVersionedParcelable(resultData,
-                                    MediaSessionCompat.KEY_SESSION_TOKEN2));
+                                    MediaSessionCompat.KEY_SESSION2_TOKEN));
                     mediaControllerImpl.processPendingCallbacksLocked();
                 }
             }
diff --git a/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java b/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
index 1e063d6..100e64b 100644
--- a/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -418,7 +418,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
-    public static final String KEY_SESSION_TOKEN2 =
+    public static final String KEY_SESSION2_TOKEN =
             "android.support.v4.media.session.SESSION_TOKEN2";
 
     // Maximum size of the bitmap in dp.
@@ -478,15 +478,15 @@
 
     /**
      * @hide
-     * Creates session for MediaSession2.
+     * Creates session for MediaSession.
      */
     @RestrictTo(LIBRARY_GROUP)
-    public MediaSessionCompat(Context context, String tag, VersionedParcelable token2) {
-        this(context, tag, null, null, token2);
+    public MediaSessionCompat(Context context, String tag, VersionedParcelable session2Token) {
+        this(context, tag, null, null, session2Token);
     }
 
     private MediaSessionCompat(Context context, String tag, ComponentName mbrComponent,
-            PendingIntent mbrIntent, VersionedParcelable token2) {
+            PendingIntent mbrIntent, VersionedParcelable session2Token) {
         if (context == null) {
             throw new IllegalArgumentException("context must not be null");
         }
@@ -510,12 +510,12 @@
                     0/* requestCode, ignored */, mediaButtonIntent, 0/* flags */);
         }
         if (android.os.Build.VERSION.SDK_INT >= 28) {
-            mImpl = new MediaSessionImplApi28(context, tag, token2);
+            mImpl = new MediaSessionImplApi28(context, tag, session2Token);
             // Set default callback to respond to controllers' extra binder requests.
             setCallback(new Callback() {});
             mImpl.setMediaButtonReceiver(mbrIntent);
         } else if (android.os.Build.VERSION.SDK_INT >= 21) {
-            mImpl = new MediaSessionImplApi21(context, tag, token2);
+            mImpl = new MediaSessionImplApi21(context, tag, session2Token);
             // Set default callback to respond to controllers' extra binder requests.
             setCallback(new Callback() {});
             mImpl.setMediaButtonReceiver(mbrIntent);
@@ -1401,7 +1401,7 @@
                             BundleCompat.putBinder(result, KEY_EXTRA_BINDER,
                                     extraBinder == null ? null : extraBinder.asBinder());
                             ParcelUtils.putVersionedParcelable(result,
-                                    KEY_SESSION_TOKEN2, token.getSessionToken2());
+                                    KEY_SESSION2_TOKEN, token.getSession2Token());
                             cb.send(0, result);
                         }
                     } else if (command.equals(MediaControllerCompat.COMMAND_ADD_QUEUE_ITEM)) {
@@ -1657,7 +1657,7 @@
     public static final class Token implements Parcelable {
         private final Object mInner;
         private IMediaSession mExtraBinder;
-        private VersionedParcelable mSessionToken2;
+        private VersionedParcelable mSession2Token;
 
         Token(Object inner) {
             this(inner, null, null);
@@ -1667,10 +1667,10 @@
             this(inner, extraBinder, null);
         }
 
-        Token(Object inner, IMediaSession extraBinder, VersionedParcelable token2) {
+        Token(Object inner, IMediaSession extraBinder, VersionedParcelable session2Token) {
             mInner = inner;
             mExtraBinder = extraBinder;
-            mSessionToken2 = token2;
+            mSession2Token = session2Token;
         }
 
         /**
@@ -1787,16 +1787,16 @@
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public VersionedParcelable getSessionToken2() {
-            return mSessionToken2;
+        public VersionedParcelable getSession2Token() {
+            return mSession2Token;
         }
 
         /**
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public void setSessionToken2(VersionedParcelable token2) {
-            mSessionToken2 = token2;
+        public void setSession2Token(VersionedParcelable session2Token) {
+            mSession2Token = session2Token;
         }
 
         /**
@@ -1809,9 +1809,8 @@
             if (mExtraBinder != null) {
                 BundleCompat.putBinder(bundle, KEY_EXTRA_BINDER, mExtraBinder.asBinder());
             }
-            if (mSessionToken2 != null) {
-                ParcelUtils.putVersionedParcelable(bundle, KEY_SESSION_TOKEN2,
-                        mSessionToken2);
+            if (mSession2Token != null) {
+                ParcelUtils.putVersionedParcelable(bundle, KEY_SESSION2_TOKEN, mSession2Token);
             }
             return bundle;
         }
@@ -1830,10 +1829,10 @@
             }
             IMediaSession extraSession = IMediaSession.Stub.asInterface(
                     BundleCompat.getBinder(tokenBundle, KEY_EXTRA_BINDER));
-            VersionedParcelable token2 = ParcelUtils.getVersionedParcelable(tokenBundle,
-                    KEY_SESSION_TOKEN2);
+            VersionedParcelable session2Token = ParcelUtils.getVersionedParcelable(tokenBundle,
+                    KEY_SESSION2_TOKEN);
             Token token = tokenBundle.getParcelable(KEY_TOKEN);
-            return token == null ? null : new Token(token.mInner, extraSession, token2);
+            return token == null ? null : new Token(token.mInner, extraSession, session2Token);
         }
 
         public static final Parcelable.Creator<Token> CREATOR
@@ -3482,9 +3481,9 @@
         @GuardedBy("mLock")
         RemoteUserInfo mRemoteUserInfo;
 
-        MediaSessionImplApi21(Context context, String tag, VersionedParcelable token2) {
+        MediaSessionImplApi21(Context context, String tag, VersionedParcelable session2Token) {
             mSessionFwk = new MediaSession(context, tag);
-            mToken = new Token(mSessionFwk.getSessionToken(), new ExtraSession(), token2);
+            mToken = new Token(mSessionFwk.getSessionToken(), new ExtraSession(), session2Token);
             // For backward compatibility, these flags are always set.
             setFlags(FLAG_HANDLES_MEDIA_BUTTONS | FLAG_HANDLES_TRANSPORT_CONTROLS);
         }
@@ -4025,8 +4024,8 @@
 
     @RequiresApi(28)
     static class MediaSessionImplApi28 extends MediaSessionImplApi21 {
-        MediaSessionImplApi28(Context context, String tag, VersionedParcelable token2) {
-            super(context, tag, token2);
+        MediaSessionImplApi28(Context context, String tag, VersionedParcelable session2Token) {
+            super(context, tag, session2Token);
         }
 
         MediaSessionImplApi28(Object mediaSession) {
diff --git a/media/src/main/java/androidx/media/MediaSessionManagerImplApi28.java b/media/src/main/java/androidx/media/MediaSessionManagerImplApi28.java
index a276db3..f8ff41f 100644
--- a/media/src/main/java/androidx/media/MediaSessionManagerImplApi28.java
+++ b/media/src/main/java/androidx/media/MediaSessionManagerImplApi28.java
@@ -35,8 +35,8 @@
     public boolean isTrustedForMediaControl(MediaSessionManager.RemoteUserInfoImpl userInfo) {
         // Don't use framework's isTrustedForMediaControl().
         // In P, framework's isTrustedForMediaControl() does the sanity check whether the UID, PID,
-        // and package name match. In MediaSession2/MediaController2, Context#getPackageName() is
-        // used by MediaController2 to tell MediaSession2 the package name.
+        // and package name match. In MediaSession/MediaController, Context#getPackageName() is
+        // used by MediaController to tell MediaSession the package name.
         // However, UID, PID and Context#getPackageName() may not match if a activity/service runs
         // on the another app's process by specifying android:process in the AndroidManifest.xml.
         // In that case, sanity check will always fail.
diff --git a/media/version-compat-tests/current/client/src/androidTest/AndroidManifest.xml b/media/version-compat-tests/current/client/src/androidTest/AndroidManifest.xml
index 1b0340b..b7bb7c2 100644
--- a/media/version-compat-tests/current/client/src/androidTest/AndroidManifest.xml
+++ b/media/version-compat-tests/current/client/src/androidTest/AndroidManifest.xml
@@ -24,7 +24,7 @@
             </intent-filter>
         </receiver>
 
-        <service android:name="androidx.media.test.client.MediaController2ProviderService">
+        <service android:name="androidx.media.test.client.MediaControllerProviderService">
             <intent-filter>
                 <!-- Keep sync with CommonConstants.java -->
                 <action android:name="androidx.media.test.action.MEDIA_CONTROLLER2" />
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaController2ProviderService.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaController2ProviderService.java
deleted file mode 100644
index cdeab4b..0000000
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaController2ProviderService.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media.test.client;
-
-import static androidx.media.test.lib.CommonConstants.ACTION_MEDIA_CONTROLLER2;
-
-import android.app.Service;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.support.mediacompat.testlib.IRemoteMediaController2;
-import android.util.Log;
-
-import androidx.media.test.lib.TestUtils;
-import androidx.media.test.lib.TestUtils.SyncHandler;
-import androidx.media2.MediaBrowser2;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaUtils2;
-import androidx.media2.Rating2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionToken2;
-import androidx.versionedparcelable.ParcelImpl;
-import androidx.versionedparcelable.ParcelUtils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executor;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A Service that creates {@link MediaController2} and calls its methods
- * according to the service app's requests.
- */
-public class MediaController2ProviderService extends Service {
-    private static final String TAG = "MediaController2ProviderService";
-
-    Map<String, MediaController2> mMediaController2Map = new HashMap<>();
-    RemoteMediaController2Stub mBinder;
-
-    SyncHandler mHandler;
-    Executor mExecutor;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mBinder = new RemoteMediaController2Stub();
-
-        mHandler = new SyncHandler(getMainLooper());
-        mExecutor = new Executor() {
-            @Override
-            public void execute(Runnable command) {
-                mHandler.post(command);
-            }
-        };
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        if (ACTION_MEDIA_CONTROLLER2.equals(intent.getAction())) {
-            return mBinder;
-        }
-        return null;
-    }
-
-    @Override
-    public void onDestroy() {
-        for (MediaController2 controller2 : mMediaController2Map.values()) {
-            controller2.close();
-        }
-    }
-
-    private class RemoteMediaController2Stub extends IRemoteMediaController2.Stub {
-        @Override
-        public void create(final boolean isBrowser, final String controllerId,
-                ParcelImpl tokenParcelable, boolean waitForConnection) throws RemoteException {
-            final SessionToken2 token = MediaUtils2.fromParcelable(tokenParcelable);
-            final TestControllerCallback callback = new TestControllerCallback();
-
-            try {
-                mHandler.postAndSync(new Runnable() {
-                    @Override
-                    public void run() {
-                        MediaController2 controller2;
-                        if (isBrowser) {
-                            controller2 = new MediaBrowser2(MediaController2ProviderService.this,
-                                    token, mExecutor, callback);
-                        } else {
-                            controller2 = new MediaController2(MediaController2ProviderService.this,
-                                    token, mExecutor, callback);
-                        }
-                        mMediaController2Map.put(controllerId, controller2);
-                    }
-                });
-            } catch (Exception ex) {
-                Log.e(TAG, "Exception occurred while creating MediaController2.", ex);
-            }
-
-            if (!waitForConnection) {
-                return;
-            }
-
-            boolean connected = false;
-            try {
-                connected = callback.mConnectionLatch.await(3000, TimeUnit.MILLISECONDS);
-            } catch (InterruptedException ex) {
-                Log.e(TAG, "InterruptedException occurred while waiting for connection", ex);
-            }
-
-            if (!connected) {
-                Log.e(TAG, "Could not connect to the given session2.");
-            }
-        }
-
-        ////////////////////////////////////////////////////////////////////////////////
-        // MediaController2 methods
-        ////////////////////////////////////////////////////////////////////////////////
-
-        @Override
-        public ParcelImpl getConnectedSessionToken(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            return MediaUtils2.toParcelable(controller2.getConnectedSessionToken());
-        }
-
-        @Override
-        public void play(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.play();
-        }
-
-        @Override
-        public void pause(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.pause();
-        }
-
-        @Override
-        public void prepare(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.prepare();
-        }
-
-        @Override
-        public void seekTo(String controllerId, long pos) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.seekTo(pos);
-        }
-
-        @Override
-        public void setPlaybackSpeed(String controllerId, float speed) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.setPlaybackSpeed(speed);
-        }
-
-        @Override
-        public void setPlaylist(String controllerId, List<String> list, ParcelImpl metadata)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.setPlaylist(list, (MediaMetadata2) MediaUtils2.fromParcelable(metadata));
-        }
-
-        @Override
-        public void createAndSetDummyPlaylist(String controllerId, int size, ParcelImpl metadata)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            List<String> list = new ArrayList<>();
-            for (int i = 0; i < size; i++) {
-                // Make media ID of each item same with its index.
-                list.add(TestUtils.getMediaIdInDummyList(i));
-            }
-            controller2.setPlaylist(list, (MediaMetadata2) MediaUtils2.fromParcelable(metadata));
-        }
-
-        @Override
-        public void setMediaItem(String controllerId, String mediaId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.setMediaItem(mediaId);
-        }
-
-        @Override
-        public void updatePlaylistMetadata(String controllerId, ParcelImpl metadata)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.updatePlaylistMetadata(
-                    (MediaMetadata2) MediaUtils2.fromParcelable(metadata));
-        }
-
-        @Override
-        public void addPlaylistItem(String controllerId, int index, String mediaId)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.addPlaylistItem(index, mediaId);
-        }
-
-        @Override
-        public void removePlaylistItem(String controllerId, int index) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.removePlaylistItem(index);
-        }
-
-        @Override
-        public void replacePlaylistItem(String controllerId, int index, String mediaId)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.replacePlaylistItem(index, mediaId);
-        }
-
-        @Override
-        public void skipToPreviousItem(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.skipToPreviousPlaylistItem();
-        }
-
-        @Override
-        public void skipToNextItem(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.skipToNextPlaylistItem();
-        }
-
-        @Override
-        public void skipToPlaylistItem(String controllerId, int index) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.skipToPlaylistItem(index);
-        }
-
-        @Override
-        public void setShuffleMode(String controllerId, int shuffleMode) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.setShuffleMode(shuffleMode);
-        }
-
-        @Override
-        public void setRepeatMode(String controllerId, int repeatMode) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.setRepeatMode(repeatMode);
-        }
-
-        @Override
-        public void setVolumeTo(String controllerId, int value, int flags) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.setVolumeTo(value, flags);
-        }
-
-        @Override
-        public void adjustVolume(String controllerId, int direction, int flags)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.adjustVolume(direction, flags);
-        }
-
-        @Override
-        public void sendCustomCommand(String controllerId, Bundle command, Bundle args)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.sendCustomCommand(SessionCommand2.fromBundle(command), args);
-        }
-
-        @Override
-        public void fastForward(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.fastForward();
-        }
-
-        @Override
-        public void rewind(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.rewind();
-        }
-
-        @Override
-        public void skipForward(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.skipForward();
-        }
-
-        @Override
-        public void skipBackward(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.skipBackward();
-        }
-
-        @Override
-        public void playFromMediaId(String controllerId, String mediaId, Bundle extras)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.playFromMediaId(mediaId, extras);
-        }
-
-        @Override
-        public void playFromSearch(String controllerId, String query, Bundle extras)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.playFromSearch(query, extras);
-        }
-
-        @Override
-        public void playFromUri(String controllerId, Uri uri, Bundle extras)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.playFromUri(uri, extras);
-        }
-
-        @Override
-        public void prepareFromMediaId(String controllerId, String mediaId, Bundle extras)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.prepareFromMediaId(mediaId, extras);
-        }
-
-        @Override
-        public void prepareFromSearch(String controllerId, String query, Bundle extras)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.prepareFromSearch(query, extras);
-        }
-
-        @Override
-        public void prepareFromUri(String controllerId, Uri uri, Bundle extras)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.prepareFromUri(uri, extras);
-        }
-
-        @Override
-        public void setRating(String controllerId, String mediaId, ParcelImpl rating)
-                throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.setRating(mediaId, ParcelUtils.<Rating2>fromParcelable(rating));
-        }
-
-        @Override
-        public void subscribeRoutesInfo(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.subscribeRoutesInfo();
-        }
-
-        @Override
-        public void unsubscribeRoutesInfo(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.unsubscribeRoutesInfo();
-        }
-
-        @Override
-        public void selectRoute(String controllerId, Bundle route) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.selectRoute(route);
-        }
-
-        @Override
-        public void close(String controllerId) throws RemoteException {
-            MediaController2 controller2 = mMediaController2Map.get(controllerId);
-            controller2.close();
-        }
-
-        ////////////////////////////////////////////////////////////////////////////////
-        // MediaBrowser2 methods
-        ////////////////////////////////////////////////////////////////////////////////
-
-        @Override
-        public void getLibraryRoot(String controllerId, ParcelImpl libraryParams)
-                throws RemoteException {
-            MediaBrowser2 browser2 = (MediaBrowser2) mMediaController2Map.get(controllerId);
-            browser2.getLibraryRoot((LibraryParams) MediaUtils2.fromParcelable(libraryParams));
-        }
-
-        @Override
-        public void subscribe(String controllerId, String parentId, ParcelImpl libraryParams)
-                throws RemoteException {
-            MediaBrowser2 browser2 = (MediaBrowser2) mMediaController2Map.get(controllerId);
-            browser2.subscribe(parentId, (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
-        }
-
-        @Override
-        public void unsubscribe(String controllerId, String parentId) throws RemoteException {
-            MediaBrowser2 browser2 = (MediaBrowser2) mMediaController2Map.get(controllerId);
-            browser2.unsubscribe(parentId);
-        }
-
-        @Override
-        public void getChildren(String controllerId, String parentId, int page, int pageSize,
-                ParcelImpl libraryParams) throws RemoteException {
-            MediaBrowser2 browser2 = (MediaBrowser2) mMediaController2Map.get(controllerId);
-            browser2.getChildren(parentId, page, pageSize,
-                    (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
-        }
-
-        @Override
-        public void getItem(String controllerId, String mediaId) throws RemoteException {
-            MediaBrowser2 browser2 = (MediaBrowser2) mMediaController2Map.get(controllerId);
-            browser2.getItem(mediaId);
-        }
-
-        @Override
-        public void search(String controllerId, String query, ParcelImpl libraryParams)
-                throws RemoteException {
-            MediaBrowser2 browser2 = (MediaBrowser2) mMediaController2Map.get(controllerId);
-            browser2.search(query, (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
-        }
-
-        @Override
-        public void getSearchResult(String controllerId, String query, int page, int pageSize,
-                ParcelImpl libraryParams) throws RemoteException {
-            MediaBrowser2 browser2 = (MediaBrowser2) mMediaController2Map.get(controllerId);
-            browser2.getSearchResult(query, page, pageSize,
-                    (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
-        }
-
-        private class TestControllerCallback extends MediaBrowser2.BrowserCallback {
-            private CountDownLatch mConnectionLatch = new CountDownLatch(1);
-
-            @Override
-            public void onConnected(MediaController2 controller,
-                    SessionCommandGroup2 allowedCommands) {
-                super.onConnected(controller, allowedCommands);
-                mConnectionLatch.countDown();
-            }
-        }
-    }
-}
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaControllerProviderService.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaControllerProviderService.java
new file mode 100644
index 0000000..901a4cb
--- /dev/null
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaControllerProviderService.java
@@ -0,0 +1,423 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media.test.client;
+
+import static androidx.media.test.lib.CommonConstants.ACTION_MEDIA_CONTROLLER2;
+
+import android.app.Service;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.support.mediacompat.testlib.IRemoteMediaController;
+import android.util.Log;
+
+import androidx.media.test.lib.TestUtils;
+import androidx.media.test.lib.TestUtils.SyncHandler;
+import androidx.media2.MediaBrowser;
+import androidx.media2.MediaController;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaUtils;
+import androidx.media2.Rating;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionToken;
+import androidx.versionedparcelable.ParcelImpl;
+import androidx.versionedparcelable.ParcelUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A Service that creates {@link MediaController} and calls its methods
+ * according to the service app's requests.
+ */
+public class MediaControllerProviderService extends Service {
+    private static final String TAG = "MediaControllerProviderService";
+
+    Map<String, MediaController> mMediaControllerMap = new HashMap<>();
+    RemoteMediaControllerStub mBinder;
+
+    SyncHandler mHandler;
+    Executor mExecutor;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        mBinder = new RemoteMediaControllerStub();
+
+        mHandler = new SyncHandler(getMainLooper());
+        mExecutor = new Executor() {
+            @Override
+            public void execute(Runnable command) {
+                mHandler.post(command);
+            }
+        };
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (ACTION_MEDIA_CONTROLLER2.equals(intent.getAction())) {
+            return mBinder;
+        }
+        return null;
+    }
+
+    @Override
+    public void onDestroy() {
+        for (MediaController controller : mMediaControllerMap.values()) {
+            controller.close();
+        }
+    }
+
+    private class RemoteMediaControllerStub extends IRemoteMediaController.Stub {
+        @Override
+        public void create(final boolean isBrowser, final String controllerId,
+                ParcelImpl tokenParcelable, boolean waitForConnection) throws RemoteException {
+            final SessionToken token = MediaUtils.fromParcelable(tokenParcelable);
+            final TestControllerCallback callback = new TestControllerCallback();
+
+            try {
+                mHandler.postAndSync(new Runnable() {
+                    @Override
+                    public void run() {
+                        MediaController controller;
+                        if (isBrowser) {
+                            controller = new MediaBrowser(MediaControllerProviderService.this,
+                                    token, mExecutor, callback);
+                        } else {
+                            controller = new MediaController(MediaControllerProviderService.this,
+                                    token, mExecutor, callback);
+                        }
+                        mMediaControllerMap.put(controllerId, controller);
+                    }
+                });
+            } catch (Exception ex) {
+                Log.e(TAG, "Exception occurred while creating MediaController.", ex);
+            }
+
+            if (!waitForConnection) {
+                return;
+            }
+
+            boolean connected = false;
+            try {
+                connected = callback.mConnectionLatch.await(3000, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException ex) {
+                Log.e(TAG, "InterruptedException occurred while waiting for connection", ex);
+            }
+
+            if (!connected) {
+                Log.e(TAG, "Could not connect to the given session.");
+            }
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////
+        // MediaController methods
+        ////////////////////////////////////////////////////////////////////////////////
+
+        @Override
+        public ParcelImpl getConnectedSessionToken(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            return MediaUtils.toParcelable(controller.getConnectedSessionToken());
+        }
+
+        @Override
+        public void play(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.play();
+        }
+
+        @Override
+        public void pause(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.pause();
+        }
+
+        @Override
+        public void prepare(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.prepare();
+        }
+
+        @Override
+        public void seekTo(String controllerId, long pos) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.seekTo(pos);
+        }
+
+        @Override
+        public void setPlaybackSpeed(String controllerId, float speed) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.setPlaybackSpeed(speed);
+        }
+
+        @Override
+        public void setPlaylist(String controllerId, List<String> list, ParcelImpl metadata)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.setPlaylist(list, (MediaMetadata) MediaUtils.fromParcelable(metadata));
+        }
+
+        @Override
+        public void createAndSetDummyPlaylist(String controllerId, int size, ParcelImpl metadata)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            List<String> list = new ArrayList<>();
+            for (int i = 0; i < size; i++) {
+                // Make media ID of each item same with its index.
+                list.add(TestUtils.getMediaIdInDummyList(i));
+            }
+            controller.setPlaylist(list, (MediaMetadata) MediaUtils.fromParcelable(metadata));
+        }
+
+        @Override
+        public void setMediaItem(String controllerId, String mediaId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.setMediaItem(mediaId);
+        }
+
+        @Override
+        public void updatePlaylistMetadata(String controllerId, ParcelImpl metadata)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.updatePlaylistMetadata(
+                    (MediaMetadata) MediaUtils.fromParcelable(metadata));
+        }
+
+        @Override
+        public void addPlaylistItem(String controllerId, int index, String mediaId)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.addPlaylistItem(index, mediaId);
+        }
+
+        @Override
+        public void removePlaylistItem(String controllerId, int index) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.removePlaylistItem(index);
+        }
+
+        @Override
+        public void replacePlaylistItem(String controllerId, int index, String mediaId)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.replacePlaylistItem(index, mediaId);
+        }
+
+        @Override
+        public void skipToPreviousItem(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.skipToPreviousPlaylistItem();
+        }
+
+        @Override
+        public void skipToNextItem(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.skipToNextPlaylistItem();
+        }
+
+        @Override
+        public void skipToPlaylistItem(String controllerId, int index) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.skipToPlaylistItem(index);
+        }
+
+        @Override
+        public void setShuffleMode(String controllerId, int shuffleMode) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.setShuffleMode(shuffleMode);
+        }
+
+        @Override
+        public void setRepeatMode(String controllerId, int repeatMode) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.setRepeatMode(repeatMode);
+        }
+
+        @Override
+        public void setVolumeTo(String controllerId, int value, int flags) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.setVolumeTo(value, flags);
+        }
+
+        @Override
+        public void adjustVolume(String controllerId, int direction, int flags)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.adjustVolume(direction, flags);
+        }
+
+        @Override
+        public void sendCustomCommand(String controllerId, ParcelImpl command, Bundle args)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.sendCustomCommand((SessionCommand) MediaUtils.fromParcelable(command),
+                    args);
+        }
+
+        @Override
+        public void fastForward(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.fastForward();
+        }
+
+        @Override
+        public void rewind(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.rewind();
+        }
+
+        @Override
+        public void skipForward(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.skipForward();
+        }
+
+        @Override
+        public void skipBackward(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.skipBackward();
+        }
+
+        @Override
+        public void playFromMediaId(String controllerId, String mediaId, Bundle extras)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.playFromMediaId(mediaId, extras);
+        }
+
+        @Override
+        public void playFromSearch(String controllerId, String query, Bundle extras)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.playFromSearch(query, extras);
+        }
+
+        @Override
+        public void playFromUri(String controllerId, Uri uri, Bundle extras)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.playFromUri(uri, extras);
+        }
+
+        @Override
+        public void prepareFromMediaId(String controllerId, String mediaId, Bundle extras)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.prepareFromMediaId(mediaId, extras);
+        }
+
+        @Override
+        public void prepareFromSearch(String controllerId, String query, Bundle extras)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.prepareFromSearch(query, extras);
+        }
+
+        @Override
+        public void prepareFromUri(String controllerId, Uri uri, Bundle extras)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.prepareFromUri(uri, extras);
+        }
+
+        @Override
+        public void setRating(String controllerId, String mediaId, ParcelImpl rating)
+                throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.setRating(mediaId, ParcelUtils.<Rating>fromParcelable(rating));
+        }
+
+        @Override
+        public void close(String controllerId) throws RemoteException {
+            MediaController controller = mMediaControllerMap.get(controllerId);
+            controller.close();
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////
+        // MediaBrowser methods
+        ////////////////////////////////////////////////////////////////////////////////
+
+        @Override
+        public void getLibraryRoot(String controllerId, ParcelImpl libraryParams)
+                throws RemoteException {
+            MediaBrowser browser = (MediaBrowser) mMediaControllerMap.get(controllerId);
+            browser.getLibraryRoot((LibraryParams) MediaUtils.fromParcelable(libraryParams));
+        }
+
+        @Override
+        public void subscribe(String controllerId, String parentId, ParcelImpl libraryParams)
+                throws RemoteException {
+            MediaBrowser browser = (MediaBrowser) mMediaControllerMap.get(controllerId);
+            browser.subscribe(parentId, (LibraryParams) MediaUtils.fromParcelable(libraryParams));
+        }
+
+        @Override
+        public void unsubscribe(String controllerId, String parentId) throws RemoteException {
+            MediaBrowser browser = (MediaBrowser) mMediaControllerMap.get(controllerId);
+            browser.unsubscribe(parentId);
+        }
+
+        @Override
+        public void getChildren(String controllerId, String parentId, int page, int pageSize,
+                ParcelImpl libraryParams) throws RemoteException {
+            MediaBrowser browser = (MediaBrowser) mMediaControllerMap.get(controllerId);
+            browser.getChildren(parentId, page, pageSize,
+                    (LibraryParams) MediaUtils.fromParcelable(libraryParams));
+        }
+
+        @Override
+        public void getItem(String controllerId, String mediaId) throws RemoteException {
+            MediaBrowser browser = (MediaBrowser) mMediaControllerMap.get(controllerId);
+            browser.getItem(mediaId);
+        }
+
+        @Override
+        public void search(String controllerId, String query, ParcelImpl libraryParams)
+                throws RemoteException {
+            MediaBrowser browser = (MediaBrowser) mMediaControllerMap.get(controllerId);
+            browser.search(query, (LibraryParams) MediaUtils.fromParcelable(libraryParams));
+        }
+
+        @Override
+        public void getSearchResult(String controllerId, String query, int page, int pageSize,
+                ParcelImpl libraryParams) throws RemoteException {
+            MediaBrowser browser = (MediaBrowser) mMediaControllerMap.get(controllerId);
+            browser.getSearchResult(query, page, pageSize,
+                    (LibraryParams) MediaUtils.fromParcelable(libraryParams));
+        }
+
+        private class TestControllerCallback extends MediaBrowser.BrowserCallback {
+            private CountDownLatch mConnectionLatch = new CountDownLatch(1);
+
+            @Override
+            public void onConnected(MediaController controller,
+                    SessionCommandGroup allowedCommands) {
+                super.onConnected(controller, allowedCommands);
+                mConnectionLatch.countDown();
+            }
+        }
+    }
+}
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java
index 0bcb0f4..8143fce 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java
@@ -21,18 +21,20 @@
 import static org.junit.Assert.assertTrue;
 
 import android.os.Bundle;
-import android.os.Parcelable;
 
 import androidx.media.MediaBrowserServiceCompat.BrowserRoot;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaMetadata2;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaUtils;
+import androidx.versionedparcelable.ParcelImpl;
 
 import java.io.FileDescriptor;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Utilities for tests.
@@ -49,32 +51,32 @@
 //     */
 //    public static SessionToken2 getServiceToken(Context context, String id) {
 //        switch (id) {
-//            case MockMediaSessionService2.ID:
+//            case MockMediaSessionService.ID:
 //                return new SessionToken2(context, new ComponentName(
-//                        context.getPackageName(), MockMediaSessionService2.class.getName()));
-//            case MockMediaLibraryService2.ID:
+//                        context.getPackageName(), MockMediaSessionService.class.getName()));
+//            case MockMediaLibraryService.ID:
 //                return new SessionToken2(context, new ComponentName(
-//                        context.getPackageName(), MockMediaLibraryService2.class.getName()));
+//                        context.getPackageName(), MockMediaLibraryService.class.getName()));
 //        }
 //        fail("Unknown id=" + id);
 //        return null;
 //    }
 
     /**
-     * Create a list of {@link FileMediaItem2} for testing purpose.
+     * Create a list of {@link FileMediaItem} for testing purpose.
      * <p>
      * Caller's method name will be used for prefix of each media item's media id.
      *
      * @param size list size
      * @return the newly created playlist
      */
-    public static List<MediaItem2> createFileMediaItems(int size) {
-        final List<MediaItem2> list = new ArrayList<>();
+    public static List<MediaItem> createFileMediaItems(int size) {
+        final List<MediaItem> list = new ArrayList<>();
         String caller = Thread.currentThread().getStackTrace()[1].getMethodName();
         for (int i = 0; i < size; i++) {
-            list.add(new FileMediaItem2.Builder(new FileDescriptor())
-                    .setMetadata(new MediaMetadata2.Builder()
-                            .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID,
+            list.add(new FileMediaItem.Builder(new FileDescriptor())
+                    .setMetadata(new MediaMetadata.Builder()
+                            .putString(MediaMetadata.METADATA_KEY_MEDIA_ID,
                                     caller + "_item_" + (i + 1)).build())
                     .build());
         }
@@ -87,8 +89,8 @@
      * @return the newly created media item
      * @see #createMetadata()
      */
-    public static MediaItem2 createFileMediaItemWithMetadata() {
-        return new FileMediaItem2.Builder(new FileDescriptor())
+    public static MediaItem createFileMediaItemWithMetadata() {
+        return new FileMediaItem.Builder(new FileDescriptor())
                 .setMetadata(createMetadata())
                 .build();
     }
@@ -100,30 +102,19 @@
      *
      * @return the newly created media item
      */
-    public static MediaMetadata2 createMetadata() {
+    public static MediaMetadata createMetadata() {
         String mediaId = Thread.currentThread().getStackTrace()[1].getMethodName();
-        return new MediaMetadata2.Builder()
-                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId).build();
+        return new MediaMetadata.Builder()
+                .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId).build();
     }
 
-    public static ArrayList<Parcelable> playlistToParcelableArrayList(List<MediaItem2> playlist) {
-        if (playlist == null) {
-            return null;
-        }
-        ArrayList<Parcelable> result = new ArrayList<>();
-        for (MediaItem2 item : playlist) {
-            result.add(item.toBundle());
-        }
-        return result;
-    }
-
-    public static List<Bundle> mediaItem2ListToBundleList(List<MediaItem2> list) {
+    public static List<ParcelImpl> convertToParcelImplList(List<MediaItem> list) {
         if (list == null) {
             return null;
         }
-        List<Bundle> result = new ArrayList<>();
-        for (MediaItem2 item : list) {
-            result.add(item.toBundle());
+        List<ParcelImpl> result = new ArrayList<>();
+        for (MediaItem item : list) {
+            result.add(MediaUtils.toParcelable(item));
         }
         return result;
     }
@@ -138,7 +129,21 @@
 
     // Note: It's not assertEquals() to avoid issue with the static import of JUnit's assertEquals.
     // Otherwise, this API hides the statically imported JUnit's assertEquals and compile will fail.
-    public static void assertEqualLibraryParams(LibraryParams a, LibraryParams b) {
+    public static void assertMediaMetadataEquals(MediaMetadata expected, MediaMetadata actual) {
+        if (expected == null || actual == null) {
+            assertEquals(expected, actual);
+        } else {
+            Set<String> expectedKeySet = expected.keySet();
+            Set<String> actualKeySet = actual.keySet();
+
+            assertEquals(expectedKeySet, actualKeySet);
+            for (String key : expectedKeySet) {
+                assertEquals(expected.getObject(key), actual.getObject(key));
+            }
+        }
+    }
+
+    public static void assertLibraryParamsEquals(LibraryParams a, LibraryParams b) {
         if (a == null || b == null) {
             assertEquals(a, b);
         } else {
@@ -149,7 +154,7 @@
         }
     }
 
-    public static void assertEqualLibraryParams(LibraryParams params, Bundle rootExtras) {
+    public static void assertLibraryParamsEquals(LibraryParams params, Bundle rootExtras) {
         if (params == null || rootExtras == null) {
             assertEquals(params, rootExtras);
         } else {
@@ -160,44 +165,43 @@
         }
     }
 
-    public static void assertMediaItemHasId(MediaItem2 item, String expectedId) {
+    public static void assertMediaItemHasId(MediaItem item, String expectedId) {
         assertNotNull(item);
         assertNotNull(item.getMetadata());
         assertEquals(expectedId, item.getMetadata().getString(
-                MediaMetadata2.METADATA_KEY_MEDIA_ID));
+                MediaMetadata.METADATA_KEY_MEDIA_ID));
     }
 
-    public static void assertPaginatedListHasIds(List<MediaItem2> paginatedList,
+    public static void assertPaginatedListHasIds(List<MediaItem> paginatedList,
             List<String> fullIdList, int page, int pageSize) {
         int fromIndex = page * pageSize;
         int toIndex = Math.min((page + 1) * pageSize, fullIdList.size());
         // Compare the given results with originals.
         for (int originalIndex = fromIndex; originalIndex < toIndex; originalIndex++) {
             int relativeIndex = originalIndex - fromIndex;
-            assertMediaItemHasId(paginatedList.get(relativeIndex), fullIdList.get(originalIndex)
-            );
+            assertMediaItemHasId(paginatedList.get(relativeIndex), fullIdList.get(originalIndex));
         }
     }
 
-    public static void assertEqualMediaIds(MediaItem2 a, MediaItem2 b) {
-        assertEquals(a.getMetadata().getString(MediaMetadata2.METADATA_KEY_MEDIA_ID),
-                b.getMetadata().getString(MediaMetadata2.METADATA_KEY_MEDIA_ID));
+    public static void assertMediaIdEquals(MediaItem a, MediaItem b) {
+        assertEquals(a.getMetadata().getString(MediaMetadata.METADATA_KEY_MEDIA_ID),
+                b.getMetadata().getString(MediaMetadata.METADATA_KEY_MEDIA_ID));
     }
 
-    public static void assertEqualMediaIds(List<MediaItem2> a, List<MediaItem2> b) {
+    public static void assertMediaIdEquals(List<MediaItem> a, List<MediaItem> b) {
         assertEquals(a.size(), b.size());
         for (int i = 0; i < a.size(); i++) {
-            assertEqualMediaIds(a.get(i), b.get(i));
+            assertMediaIdEquals(a.get(i), b.get(i));
         }
     }
 
-    public static void assertNotMediaItemSubclass(List<MediaItem2> list) {
-        for (MediaItem2 item : list) {
+    public static void assertNotMediaItemSubclass(List<MediaItem> list) {
+        for (MediaItem item : list) {
             assertNotMediaItemSubclass(item);
         }
     }
 
-    public static void assertNotMediaItemSubclass(MediaItem2 item) {
-        assertEquals(MediaItem2.class, item.getClass());
+    public static void assertNotMediaItemSubclass(MediaItem item) {
+        assertEquals(MediaItem.class, item.getClass());
     }
 }
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession2.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession.java
similarity index 80%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession2.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession.java
index a33ebf3..2aff65d 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession2.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession.java
@@ -41,7 +41,7 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.support.mediacompat.testlib.IRemoteMediaSession2;
+import android.support.mediacompat.testlib.IRemoteMediaSession;
 import android.support.v4.media.session.MediaSessionCompat;
 import android.util.Log;
 
@@ -49,16 +49,18 @@
 import androidx.annotation.Nullable;
 import androidx.media.AudioAttributesCompat;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaUtils2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaUtils;
+import androidx.media2.ParcelImplListSlice;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
+import androidx.media2.SessionToken;
+import androidx.versionedparcelable.ParcelImpl;
 import androidx.versionedparcelable.ParcelUtils;
 
 import java.util.ArrayList;
@@ -67,32 +69,32 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Represents remote {@link MediaSession2} in the service app's MediaSession2ProviderService.
- * Users can run {@link MediaSession2} methods remotely with this object.
+ * Represents remote {@link MediaSession} in the service app's MediaSessionProviderService.
+ * Users can run {@link MediaSession} methods remotely with this object.
  */
-public class RemoteMediaSession2 {
-    private static final String TAG = "RemoteMediaSession2";
+public class RemoteMediaSession {
+    private static final String TAG = "RemoteMediaSession";
 
     private final Context mContext;
     private final String mSessionId;
 
     private ServiceConnection mServiceConnection;
-    private IRemoteMediaSession2 mBinder;
+    private IRemoteMediaSession mBinder;
     private RemoteMockPlayer mRemotePlayer;
     private CountDownLatch mCountDownLatch;
 
     /**
-     * Create a {@link MediaSession2} in the service app.
+     * Create a {@link MediaSession} in the service app.
      * Should NOT be called in main thread.
      */
-    public RemoteMediaSession2(@NonNull String sessionId, Context context) {
+    public RemoteMediaSession(@NonNull String sessionId, Context context) {
         mSessionId = sessionId;
         mContext = context;
         mCountDownLatch = new CountDownLatch(1);
         mServiceConnection = new MyServiceConnection();
 
         if (!connect()) {
-            fail("Failed to connect to the MediaSession2ProviderService.");
+            fail("Failed to connect to the MediaSessionProviderService.");
         }
         create();
     }
@@ -112,7 +114,7 @@
 
     /**
      * Create a {@link Bundle} which represents a configuration of local
-     * {@link SessionPlayer2} in order to create a new mock player in the service app.
+     * {@link SessionPlayer} in order to create a new mock player in the service app.
      * <p>
      * The returned value can be used in {@link #updatePlayer(Bundle)}.
      */
@@ -133,7 +135,7 @@
 
     /**
      * Create a {@link Bundle} which represents a configuration of remote
-     * {@link SessionPlayer2} in order to create a new mock player in the service app.
+     * {@link SessionPlayer} in order to create a new mock player in the service app.
      * <p>
      * The returned value can be used in {@link #updatePlayer(Bundle)}.
      */
@@ -151,23 +153,24 @@
     }
 
     /**
-     * Create a {@link Bundle} which represents a configuration of {@link SessionPlayer2}
+     * Create a {@link Bundle} which represents a configuration of {@link SessionPlayer}
      * in order to create a new mock playlist agent in the service app.
      * <p>
      * The returned value can be used in {@link #updatePlayer(Bundle)}.
      */
     public static Bundle createMockPlayerConnectorConfig(
             int state, int buffState, long pos, long buffPos, float speed,
-            @Nullable AudioAttributesCompat attr, @Nullable List<MediaItem2> playlist,
-            @Nullable MediaItem2 currentItem, @Nullable MediaMetadata2 metadata) {
+            @Nullable AudioAttributesCompat attr, @Nullable List<MediaItem> playlist,
+            @Nullable MediaItem currentItem, @Nullable MediaMetadata metadata) {
         Bundle bundle = createMockPlayerConnectorConfig(state, buffState, pos, buffPos, speed,
                 attr);
         if (playlist != null) {
-            bundle.putParcelableArrayList(KEY_PLAYLIST,
-                    MediaTestUtils.playlistToParcelableArrayList(playlist));
+            ParcelImplListSlice listSlice = new ParcelImplListSlice(
+                    MediaTestUtils.convertToParcelImplList(playlist));
+            bundle.putParcelable(KEY_PLAYLIST, listSlice);
         }
         if (currentItem != null) {
-            bundle.putBundle(KEY_MEDIA_ITEM, currentItem.toBundle());
+            bundle.putParcelable(KEY_MEDIA_ITEM, MediaUtils.toParcelable(currentItem));
         }
         if (metadata != null) {
             ParcelUtils.putVersionedParcelable(bundle, KEY_METADATA, metadata);
@@ -176,19 +179,19 @@
     }
 
     ////////////////////////////////////////////////////////////////////////////////
-    // MediaSession2 methods
+    // MediaSession methods
     ////////////////////////////////////////////////////////////////////////////////
 
     /**
-     * Gets {@link SessionToken2} from the service app.
+     * Gets {@link SessionToken} from the service app.
      * Should be used after the creation of the session through {@link #create()}.
      *
-     * @return A {@link SessionToken2} object if succeeded, {@code null} if failed.
+     * @return A {@link SessionToken} object if succeeded, {@code null} if failed.
      */
-    public SessionToken2 getToken() {
-        SessionToken2 token = null;
+    public SessionToken getToken() {
+        SessionToken token = null;
         try {
-            token = MediaUtils2.fromParcelable(mBinder.getToken(mSessionId));
+            token = MediaUtils.fromParcelable(mBinder.getToken(mSessionId));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to get session token. sessionId=" + mSessionId);
         }
@@ -199,14 +202,14 @@
      * Gets {@link MediaSessionCompat.Token} from the service app.
      * Should be used after the creation of the session through {@link #create()}.
      *
-     * @return A {@link SessionToken2} object if succeeded, {@code null} if failed.
+     * @return A {@link SessionToken} object if succeeded, {@code null} if failed.
      */
     public MediaSessionCompat.Token getCompatToken() {
         MediaSessionCompat.Token token = null;
         try {
             Bundle bundle = mBinder.getCompatToken(mSessionId);
             if (bundle != null) {
-                bundle.setClassLoader(MediaSession2.class.getClassLoader());
+                bundle.setClassLoader(MediaSession.class.getClassLoader());
             }
             token = MediaSessionCompat.Token.fromBundle(bundle);
         } catch (RemoteException ex) {
@@ -223,19 +226,19 @@
         }
     }
 
-    public void broadcastCustomCommand(@NonNull SessionCommand2 command, @Nullable Bundle args) {
+    public void broadcastCustomCommand(@NonNull SessionCommand command, @Nullable Bundle args) {
         try {
-            mBinder.broadcastCustomCommand(mSessionId, command.toBundle(), args);
+            mBinder.broadcastCustomCommand(mSessionId, MediaUtils.toParcelable(command), args);
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call broadcastCustomCommand()");
         }
     }
 
     public void sendCustomCommand(@NonNull ControllerInfo controller,
-            @NonNull SessionCommand2 command, @Nullable Bundle args) {
+            @NonNull SessionCommand command, @Nullable Bundle args) {
         try {
             // TODO: ControllerInfo should be handled.
-            mBinder.sendCustomCommand(mSessionId, null, command.toBundle(), args);
+            mBinder.sendCustomCommand(mSessionId, null, MediaUtils.toParcelable(command), args);
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call sendCustomCommand2()");
         }
@@ -250,34 +253,25 @@
     }
 
     public void setAllowedCommands(@NonNull ControllerInfo controller,
-            @NonNull SessionCommandGroup2 commands) {
+            @NonNull SessionCommandGroup commands) {
         try {
             // TODO: ControllerInfo should be handled.
-            mBinder.setAllowedCommands(mSessionId, null, commands.toBundle());
+            mBinder.setAllowedCommands(mSessionId, null,
+                    MediaUtils.toParcelable(commands));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call setAllowedCommands()");
         }
     }
 
-    public void notifyRoutesInfoChanged(@NonNull ControllerInfo controller,
-            @Nullable List<Bundle> routes) {
-        try {
-            // TODO: ControllerInfo should be handled.
-            mBinder.notifyRoutesInfoChanged(mSessionId, null, routes);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call notifyRoutesInfoChanged()");
-        }
-    }
-
     public void setCustomLayout(@NonNull ControllerInfo controller,
             @NonNull List<CommandButton> layout) {
         try {
-            List<Bundle> bundleList = new ArrayList<>();
+            List<ParcelImpl> parcelList = new ArrayList<>();
             for (CommandButton btn : layout) {
-                bundleList.add(btn.toBundle());
+                parcelList.add((ParcelImpl) ParcelUtils.toParcelable(btn));
             }
             // TODO: ControllerInfo should be handled.
-            mBinder.setCustomLayout(mSessionId, null, bundleList);
+            mBinder.setCustomLayout(mSessionId, null, parcelList);
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call setCustomLayout()");
         }
@@ -377,10 +371,10 @@
             }
         }
 
-        public void setPlaylist(List<MediaItem2> playlist) {
+        public void setPlaylist(List<MediaItem> playlist) {
             try {
                 mBinder.setPlaylist(
-                        mSessionId, MediaTestUtils.mediaItem2ListToBundleList(playlist));
+                        mSessionId, MediaTestUtils.convertToParcelImplList(playlist));
             } catch (RemoteException ex) {
                 Log.e(TAG, "Failed to call setPlaylist()");
             }
@@ -400,23 +394,31 @@
             }
         }
 
-        public void setPlaylistWithDummyItem(List<MediaItem2> playlist) {
+        public void setPlaylistWithDummyItem(List<MediaItem> playlist) {
             try {
                 mBinder.setPlaylistWithDummyItem(
-                        mSessionId, MediaTestUtils.mediaItem2ListToBundleList(playlist));
+                        mSessionId, MediaTestUtils.convertToParcelImplList(playlist));
             } catch (RemoteException ex) {
                 Log.e(TAG, "Failed to call setPlaylistWithDummyItem()");
             }
         }
 
-        public void setPlaylistMetadata(MediaMetadata2 metadata) {
+        public void setPlaylistMetadata(MediaMetadata metadata) {
             try {
-                mBinder.setPlaylistMetadata(mSessionId, metadata.toBundle());
+                mBinder.setPlaylistMetadata(mSessionId, MediaUtils.toParcelable(metadata));
             } catch (RemoteException ex) {
                 Log.e(TAG, "Failed to call setPlaylistMetadata()");
             }
         }
 
+        public void setPlaylistMetadataWithLargeBitmaps(int count, int width, int height) {
+            try {
+                mBinder.setPlaylistMetadataWithLargeBitmaps(mSessionId, count, width, height);
+            } catch (RemoteException ex) {
+                Log.e(TAG, "Failed to call setPlaylistMetadataWithLargeBitmaps()");
+            }
+        }
+
         public void setRepeatMode(int repeatMode) {
             try {
                 mBinder.setRepeatMode(mSessionId, repeatMode);
@@ -487,7 +489,7 @@
     ////////////////////////////////////////////////////////////////////////////////
 
     /**
-     * Connects to service app's MediaSession2ProviderService.
+     * Connects to service app's MediaSessionProviderService.
      * Should NOT be called in main thread.
      *
      * @return true if connected successfully, false if failed to connect.
@@ -500,7 +502,7 @@
         try {
             bound = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
         } catch (Exception ex) {
-            Log.e(TAG, "Failed binding to the MediaSession2ProviderService of the service app");
+            Log.e(TAG, "Failed binding to the MediaSessionProviderService of the service app");
         }
 
         if (bound) {
@@ -514,7 +516,7 @@
     }
 
     /**
-     * Disconnects from service app's MediaSession2ProviderService.
+     * Disconnects from service app's MediaSessionProviderService.
      */
     private void disconnect() {
         if (mServiceConnection != null) {
@@ -524,7 +526,7 @@
     }
 
     /**
-     * Create a {@link MediaSession2} in the service app.
+     * Create a {@link MediaSession} in the service app.
      * Should be used after successful connection through {@link #connect}.
      */
     private void create() {
@@ -539,8 +541,8 @@
     class MyServiceConnection implements ServiceConnection {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
-            Log.d(TAG, "Connected to service app's MediaSession2ProviderService.");
-            mBinder = IRemoteMediaSession2.Stub.asInterface(service);
+            Log.d(TAG, "Connected to service app's MediaSessionProviderService.");
+            mBinder = IRemoteMediaSession.Stub.asInterface(service);
             mCountDownLatch.countDown();
         }
 
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowser2CallbackTest.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCallbackTest.java
similarity index 71%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowser2CallbackTest.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCallbackTest.java
index e21b112..cda6f1f 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowser2CallbackTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCallbackTest.java
@@ -16,27 +16,23 @@
 
 package androidx.media.test.client.tests;
 
-import static androidx.media.test.client.MediaTestUtils.assertEqualLibraryParams;
-import static androidx.media.test.client.MediaTestUtils.assertMediaItemHasId;
-import static androidx.media.test.client.MediaTestUtils.assertPaginatedListHasIds;
-import static androidx.media.test.client.MediaTestUtils.createLibraryParams;
 import static androidx.media.test.lib.CommonConstants.MOCK_MEDIA_LIBRARY_SERVICE;
-import static androidx.media.test.lib.MediaBrowser2Constants.CUSTOM_ACTION_ASSERT_PARAMS;
-import static androidx.media.test.lib.MediaBrowser2Constants.LONG_LIST_COUNT;
-import static androidx.media.test.lib.MediaBrowser2Constants.NOTIFY_CHILDREN_CHANGED_EXTRAS;
-import static androidx.media.test.lib.MediaBrowser2Constants.NOTIFY_CHILDREN_CHANGED_ITEM_COUNT;
-import static androidx.media.test.lib.MediaBrowser2Constants.ROOT_EXTRAS;
-import static androidx.media.test.lib.MediaBrowser2Constants.ROOT_ID;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants.CUSTOM_ACTION_ASSERT_PARAMS;
+import static androidx.media.test.lib.MediaBrowserConstants.LONG_LIST_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.NOTIFY_CHILDREN_CHANGED_EXTRAS;
+import static androidx.media.test.lib.MediaBrowserConstants.NOTIFY_CHILDREN_CHANGED_ITEM_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.ROOT_EXTRAS;
+import static androidx.media.test.lib.MediaBrowserConstants.ROOT_ID;
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL_WITH_NON_SUBSCRIBED_ID;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE_WITH_NON_SUBSCRIBED_ID;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_SUCCESS;
 
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
@@ -56,21 +52,21 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.media.test.client.MediaTestUtils;
-import androidx.media.test.lib.MediaBrowser2Constants;
+import androidx.media.test.lib.MediaBrowserConstants;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaBrowser2;
-import androidx.media2.MediaBrowser2.BrowserCallback;
-import androidx.media2.MediaBrowser2.BrowserResult;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaController2.ControllerResult;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaBrowser;
+import androidx.media2.MediaBrowser.BrowserCallback;
+import androidx.media2.MediaBrowser.BrowserResult;
+import androidx.media2.MediaController;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaController.ControllerResult;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionToken;
 import androidx.test.filters.FlakyTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
@@ -89,20 +85,20 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaBrowser2.BrowserCallback}.
+ * Tests {@link MediaBrowser.BrowserCallback}.
  * <p>
- * This test inherits {@link MediaController2CallbackTest} to ensure that inherited APIs from
- * {@link MediaController2} works cleanly.
+ * This test inherits {@link MediaControllerCallbackTest} to ensure that inherited APIs from
+ * {@link MediaController} works cleanly.
  */
 // TODO: (internal cleanup) Move tests that aren't related with callbacks.
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaBrowser2CallbackTest extends MediaController2CallbackTest {
-    private static final String TAG = "MediaBrowser2CallbackTest";
+public class MediaBrowserCallbackTest extends MediaControllerCallbackTest {
+    private static final String TAG = "MediaBrowserCallbackTest";
 
     @Override
-    TestControllerInterface onCreateController(final @NonNull SessionToken2 token,
+    TestControllerInterface onCreateController(final @NonNull SessionToken token,
             final @Nullable ControllerCallback callback) throws InterruptedException {
         assertNotNull("Test bug", token);
         final AtomicReference<TestControllerInterface> controller = new AtomicReference<>();
@@ -119,14 +115,14 @@
         return controller.get();
     }
 
-    final MediaBrowser2 createBrowser() throws InterruptedException {
+    final MediaBrowser createBrowser() throws InterruptedException {
         return createBrowser(null);
     }
 
-    final MediaBrowser2 createBrowser(@Nullable BrowserCallback callback)
+    final MediaBrowser createBrowser(@Nullable BrowserCallback callback)
             throws InterruptedException {
-        final SessionToken2 token = new SessionToken2(mContext, MOCK_MEDIA_LIBRARY_SERVICE);
-        return (MediaBrowser2) createController(token, true, callback);
+        final SessionToken token = new SessionToken(mContext, MOCK_MEDIA_LIBRARY_SERVICE);
+        return (MediaBrowser) createController(token, true, callback);
     }
 
     /**
@@ -155,25 +151,25 @@
         final LibraryParams params = new LibraryParams.Builder()
                 .setOffline(true).setRecent(true).setExtras(new Bundle()).build();
 
-        MediaBrowser2 browser = createBrowser();
+        MediaBrowser browser = createBrowser();
         setExpectedLibraryParam(browser, params);
         BrowserResult result = browser.getLibraryRoot(params)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        MediaMetadata2 metadata = result.getMediaItem().getMetadata();
-        assertEquals(ROOT_ID, metadata.getString(MediaMetadata2.METADATA_KEY_MEDIA_ID));
+        MediaMetadata metadata = result.getMediaItem().getMetadata();
+        assertEquals(ROOT_ID, metadata.getString(MediaMetadata.METADATA_KEY_MEDIA_ID));
         assertTrue(TestUtils.equals(ROOT_EXTRAS, result.getLibraryParams().getExtras()));
     }
 
     @Test
     public void testGetItem() throws Exception {
         prepareLooper();
-        final String mediaId = MediaBrowser2Constants.MEDIA_ID_GET_ITEM;
+        final String mediaId = MediaBrowserConstants.MEDIA_ID_GET_ITEM;
 
         BrowserResult result = createBrowser().getItem(mediaId)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        assertMediaItemHasId(result.getMediaItem(), mediaId);
+        MediaTestUtils.assertMediaItemHasId(result.getMediaItem(), mediaId);
     }
 
     @Test
@@ -190,7 +186,7 @@
     @Test
     public void testGetItem_nullResult() throws Exception {
         prepareLooper();
-        final String mediaId = MediaBrowser2Constants.MEDIA_ID_GET_NULL_ITEM;
+        final String mediaId = MediaBrowserConstants.MEDIA_ID_GET_NULL_ITEM;
 
         // Exception will be thrown in the service side, and the process will be crashed.
         // In that case one of following will happen
@@ -211,7 +207,7 @@
     @Test
     public void testGetItem_invalidResult() throws Exception {
         prepareLooper();
-        final String mediaId = MediaBrowser2Constants.MEDIA_ID_GET_INVALID_ITEM;
+        final String mediaId = MediaBrowserConstants.MEDIA_ID_GET_INVALID_ITEM;
 
         // Exception will be thrown in the service side, and the process will be crashed.
         // In that case one of following will happen
@@ -232,12 +228,12 @@
     @Test
     public void testGetChildren() throws Exception {
         prepareLooper();
-        final String parentId = MediaBrowser2Constants.PARENT_ID;
+        final String parentId = MediaBrowserConstants.PARENT_ID;
         final int page = 4;
         final int pageSize = 10;
-        final LibraryParams params = createLibraryParams();
+        final LibraryParams params = MediaTestUtils.createLibraryParams();
 
-        MediaBrowser2 browser = createBrowser();
+        MediaBrowser browser = createBrowser();
         setExpectedLibraryParam(browser, params);
 
         BrowserResult result = browser.getChildren(parentId, page, pageSize, params)
@@ -246,7 +242,7 @@
         assertNull(result.getLibraryParams());
 
         MediaTestUtils.assertPaginatedListHasIds(
-                result.getMediaItems(), MediaBrowser2Constants.GET_CHILDREN_RESULT,
+                result.getMediaItems(), MediaBrowserConstants.GET_CHILDREN_RESULT,
                 page, pageSize);
     }
 
@@ -254,12 +250,12 @@
     @LargeTest
     public void testGetChildren_withLongList() throws Exception {
         prepareLooper();
-        final String parentId = MediaBrowser2Constants.PARENT_ID_LONG_LIST;
+        final String parentId = MediaBrowserConstants.PARENT_ID_LONG_LIST;
         final int page = 0;
         final int pageSize = Integer.MAX_VALUE;
-        final LibraryParams params = createLibraryParams();
+        final LibraryParams params = MediaTestUtils.createLibraryParams();
 
-        MediaBrowser2 browser = createBrowser();
+        MediaBrowser browser = createBrowser();
         setExpectedLibraryParam(browser, params);
 
         BrowserResult result = browser.getChildren(parentId, page, pageSize, params)
@@ -267,7 +263,7 @@
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
         assertNull(result.getLibraryParams());
 
-        List<MediaItem2> list = result.getMediaItems();
+        List<MediaItem> list = result.getMediaItems();
         assertEquals(LONG_LIST_COUNT, list.size());
         for (int i = 0; i < result.getMediaItems().size(); i++) {
             assertEquals(TestUtils.getMediaIdInDummyList(i), list.get(i).getMediaId());
@@ -277,9 +273,9 @@
     @Test
     public void testGetChildren_emptyResult() throws Exception {
         prepareLooper();
-        final String parentId = MediaBrowser2Constants.PARENT_ID_NO_CHILDREN;
+        final String parentId = MediaBrowserConstants.PARENT_ID_NO_CHILDREN;
 
-        MediaBrowser2 browser = createBrowser();
+        MediaBrowser browser = createBrowser();
         BrowserResult result = browser.getChildren(parentId, 1, 1, null)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -289,9 +285,9 @@
     @Test
     public void testGetChildren_nullResult() throws Exception {
         prepareLooper();
-        final String parentId = MediaBrowser2Constants.PARENT_ID_ERROR;
+        final String parentId = MediaBrowserConstants.PARENT_ID_ERROR;
 
-        MediaBrowser2 browser = createBrowser();
+        MediaBrowser browser = createBrowser();
         BrowserResult result = browser.getChildren(parentId, 1, 1, null)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertNotEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -301,25 +297,25 @@
     @Test
     public void testSearchCallbacks() throws Exception {
         prepareLooper();
-        final String query = MediaBrowser2Constants.SEARCH_QUERY;
+        final String query = MediaBrowserConstants.SEARCH_QUERY;
         final int page = 4;
         final int pageSize = 10;
-        final LibraryParams testParams = createLibraryParams();
+        final LibraryParams testParams = MediaTestUtils.createLibraryParams();
 
         final CountDownLatch latchForSearch = new CountDownLatch(1);
         final BrowserCallback callback = new BrowserCallback() {
             @Override
-            public void onSearchResultChanged(MediaBrowser2 browser,
+            public void onSearchResultChanged(MediaBrowser browser,
                     String queryOut, int itemCount, LibraryParams params) {
                 assertEquals(query, queryOut);
-                assertEqualLibraryParams(testParams, params);
-                assertEquals(MediaBrowser2Constants.SEARCH_RESULT_COUNT, itemCount);
+                MediaTestUtils.assertLibraryParamsEquals(testParams, params);
+                assertEquals(MediaBrowserConstants.SEARCH_RESULT_COUNT, itemCount);
                 latchForSearch.countDown();
             }
         };
 
         // Request the search.
-        MediaBrowser2 browser = createBrowser(callback);
+        MediaBrowser browser = createBrowser(callback);
         setExpectedLibraryParam(browser, testParams);
         BrowserResult result = browser.search(query, testParams)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -329,32 +325,32 @@
         result = browser.getSearchResult(query, page, pageSize, testParams)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        assertPaginatedListHasIds(result.getMediaItems(),
-                MediaBrowser2Constants.SEARCH_RESULT, page, pageSize);
+        MediaTestUtils.assertPaginatedListHasIds(result.getMediaItems(),
+                MediaBrowserConstants.SEARCH_RESULT, page, pageSize);
     }
 
     @Test
     @LargeTest
     public void testSearchCallbacks_withLongList() throws Exception {
         prepareLooper();
-        final String query = MediaBrowser2Constants.SEARCH_QUERY_LONG_LIST;
+        final String query = MediaBrowserConstants.SEARCH_QUERY_LONG_LIST;
         final int page = 0;
         final int pageSize = Integer.MAX_VALUE;
-        final LibraryParams testParams = createLibraryParams();
+        final LibraryParams testParams = MediaTestUtils.createLibraryParams();
 
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback callback = new BrowserCallback() {
             @Override
             public void onSearchResultChanged(
-                    MediaBrowser2 browser, String queryOut, int itemCount, LibraryParams params) {
+                    MediaBrowser browser, String queryOut, int itemCount, LibraryParams params) {
                 assertEquals(query, queryOut);
-                assertEqualLibraryParams(testParams, params);
-                assertEquals(MediaBrowser2Constants.LONG_LIST_COUNT, itemCount);
+                MediaTestUtils.assertLibraryParamsEquals(testParams, params);
+                assertEquals(MediaBrowserConstants.LONG_LIST_COUNT, itemCount);
                 latch.countDown();
             }
         };
 
-        MediaBrowser2 browser = createBrowser(callback);
+        MediaBrowser browser = createBrowser(callback);
         setExpectedLibraryParam(browser, testParams);
         BrowserResult result = browser.search(query, testParams)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -363,7 +359,7 @@
         result = browser.getSearchResult(query, page, pageSize, testParams)
                 .get(10, TimeUnit.SECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        List<MediaItem2> list = result.getMediaItems();
+        List<MediaItem> list = result.getMediaItems();
         for (int i = 0; i < list.size(); i++) {
             assertEquals(TestUtils.getMediaIdInDummyList(i), list.get(i).getMediaId());
         }
@@ -373,25 +369,25 @@
     @LargeTest
     public void testOnSearchResultChanged_searchTakesTime() throws Exception {
         prepareLooper();
-        final String query = MediaBrowser2Constants.SEARCH_QUERY_TAKES_TIME;
-        final LibraryParams testParams = createLibraryParams();
+        final String query = MediaBrowserConstants.SEARCH_QUERY_TAKES_TIME;
+        final LibraryParams testParams = MediaTestUtils.createLibraryParams();
 
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback callback = new BrowserCallback() {
             @Override
             public void onSearchResultChanged(
-                    MediaBrowser2 browser, String queryOut, int itemCount, LibraryParams params) {
+                    MediaBrowser browser, String queryOut, int itemCount, LibraryParams params) {
                 assertEquals(query, queryOut);
-                assertEqualLibraryParams(testParams, params);
-                assertEquals(MediaBrowser2Constants.SEARCH_RESULT_COUNT, itemCount);
+                MediaTestUtils.assertLibraryParamsEquals(testParams, params);
+                assertEquals(MediaBrowserConstants.SEARCH_RESULT_COUNT, itemCount);
                 latch.countDown();
             }
         };
 
-        MediaBrowser2 browser = createBrowser(callback);
+        MediaBrowser browser = createBrowser(callback);
         setExpectedLibraryParam(browser, testParams);
         BrowserResult result = browser.search(query, testParams)
-                .get(MediaBrowser2Constants.SEARCH_TIME_IN_MS + TIMEOUT_MS,
+                .get(MediaBrowserConstants.SEARCH_TIME_IN_MS + TIMEOUT_MS,
                         TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
     }
@@ -399,22 +395,22 @@
     @Test
     public void testOnSearchResultChanged_emptyResult() throws Exception {
         prepareLooper();
-        final String query = MediaBrowser2Constants.SEARCH_QUERY_EMPTY_RESULT;
-        final LibraryParams testParams = createLibraryParams();
+        final String query = MediaBrowserConstants.SEARCH_QUERY_EMPTY_RESULT;
+        final LibraryParams testParams = MediaTestUtils.createLibraryParams();
 
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback callback = new BrowserCallback() {
             @Override
             public void onSearchResultChanged(
-                    MediaBrowser2 browser, String queryOut, int itemCount, LibraryParams params) {
+                    MediaBrowser browser, String queryOut, int itemCount, LibraryParams params) {
                 assertEquals(query, queryOut);
-                assertEqualLibraryParams(testParams, params);
+                MediaTestUtils.assertLibraryParamsEquals(testParams, params);
                 assertEquals(0, itemCount);
                 latch.countDown();
             }
         };
 
-        MediaBrowser2 browser = createBrowser(callback);
+        MediaBrowser browser = createBrowser(callback);
         setExpectedLibraryParam(browser, testParams);
         BrowserResult result = browser.search(query, testParams)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -430,11 +426,11 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 assertEquals(expectedParentId, parentId);
                 assertEquals(NOTIFY_CHILDREN_CHANGED_ITEM_COUNT, itemCount);
-                MediaTestUtils.assertEqualLibraryParams(params, NOTIFY_CHILDREN_CHANGED_EXTRAS);
+                MediaTestUtils.assertLibraryParamsEquals(params, NOTIFY_CHILDREN_CHANGED_EXTRAS);
                 latch.countDown();
             }
         };
@@ -444,7 +440,7 @@
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
-        // The MediaLibrarySession in MockMediaLibraryService2 is supposed to call
+        // The MediaLibrarySession in MockMediaLibraryService is supposed to call
         // notifyChildrenChanged() in its callback onSubscribe().
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -458,11 +454,11 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 assertEquals(expectedParentId, parentId);
                 assertEquals(NOTIFY_CHILDREN_CHANGED_ITEM_COUNT, itemCount);
-                assertEqualLibraryParams(params, NOTIFY_CHILDREN_CHANGED_EXTRAS);
+                MediaTestUtils.assertLibraryParamsEquals(params, NOTIFY_CHILDREN_CHANGED_EXTRAS);
                 latch.countDown();
             }
         };
@@ -472,7 +468,7 @@
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
-        // The MediaLibrarySession in MockMediaLibraryService2 is supposed to call
+        // The MediaLibrarySession in MockMediaLibraryService is supposed to call
         // notifyChildrenChanged(ControllerInfo) in its callback onSubscribe().
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -488,7 +484,7 @@
 
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 // Unexpected call.
                 fail();
@@ -501,7 +497,7 @@
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
-        // The MediaLibrarySession in MockMediaLibraryService2 is supposed to call
+        // The MediaLibrarySession in MockMediaLibraryService is supposed to call
         // notifyChildrenChanged() in its callback onSubscribe(), but with a different media ID.
         // Therefore, onChildrenChanged() should not be called.
         assertFalse(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -517,7 +513,7 @@
 
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 // Unexpected call.
                 fail();
@@ -530,16 +526,16 @@
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
-        // The MediaLibrarySession in MockMediaLibraryService2 is supposed to call
+        // The MediaLibrarySession in MockMediaLibraryService is supposed to call
         // notifyChildrenChanged(ControllerInfo) in its callback onSubscribe(),
         // but with a different media ID.
         // Therefore, onChildrenChanged() should not be called.
         assertFalse(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
-    private void setExpectedLibraryParam(MediaBrowser2 browser, LibraryParams params)
+    private void setExpectedLibraryParam(MediaBrowser browser, LibraryParams params)
             throws Exception {
-        SessionCommand2 command = new SessionCommand2(CUSTOM_ACTION_ASSERT_PARAMS, null);
+        SessionCommand command = new SessionCommand(CUSTOM_ACTION_ASSERT_PARAMS, null);
         Bundle args = new Bundle();
         ParcelUtils.putVersionedParcelable(args, CUSTOM_ACTION_ASSERT_PARAMS, params);
         ControllerResult result = browser.sendCustomCommand(command, args)
@@ -564,13 +560,13 @@
 
         @CallSuper
         @Override
-        public void onConnected(MediaController2 controller, SessionCommandGroup2 commands) {
+        public void onConnected(MediaController controller, SessionCommandGroup commands) {
             connectLatch.countDown();
         }
 
         @CallSuper
         @Override
-        public void onDisconnected(MediaController2 controller) {
+        public void onDisconnected(MediaController controller) {
             disconnectLatch.countDown();
         }
 
@@ -593,14 +589,14 @@
         }
 
         @Override
-        public void onPlaybackInfoChanged(MediaController2 controller,
-                MediaController2.PlaybackInfo info) {
+        public void onPlaybackInfoChanged(MediaController controller,
+                MediaController.PlaybackInfo info) {
             mCallbackProxy.onPlaybackInfoChanged(controller, info);
         }
 
         @Override
-        public MediaController2.ControllerResult onCustomCommand(MediaController2 controller,
-                SessionCommand2 command, Bundle args) {
+        public MediaController.ControllerResult onCustomCommand(MediaController controller,
+                SessionCommand command, Bundle args) {
             synchronized (this) {
                 if (mOnCustomCommandRunnable != null) {
                     mOnCustomCommandRunnable.run();
@@ -610,76 +606,71 @@
         }
 
         @Override
-        public int onSetCustomLayout(MediaController2 controller, List<CommandButton> layout) {
+        public int onSetCustomLayout(MediaController controller, List<CommandButton> layout) {
             return mCallbackProxy.onSetCustomLayout(controller, layout);
         }
 
         @Override
-        public void onAllowedCommandsChanged(MediaController2 controller,
-                SessionCommandGroup2 commands) {
+        public void onAllowedCommandsChanged(MediaController controller,
+                SessionCommandGroup commands) {
             mCallbackProxy.onAllowedCommandsChanged(controller, commands);
         }
 
         @Override
-        public void onPlayerStateChanged(MediaController2 controller, int state) {
+        public void onPlayerStateChanged(MediaController controller, int state) {
             mCallbackProxy.onPlayerStateChanged(controller, state);
         }
 
         @Override
-        public void onSeekCompleted(MediaController2 controller, long position) {
+        public void onSeekCompleted(MediaController controller, long position) {
             mCallbackProxy.onSeekCompleted(controller, position);
         }
 
         @Override
-        public void onPlaybackSpeedChanged(MediaController2 controller, float speed) {
+        public void onPlaybackSpeedChanged(MediaController controller, float speed) {
             mCallbackProxy.onPlaybackSpeedChanged(controller, speed);
         }
 
         @Override
-        public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+        public void onBufferingStateChanged(MediaController controller, MediaItem item,
                 int state) {
             mCallbackProxy.onBufferingStateChanged(controller, item, state);
         }
 
         @Override
-        public void onCurrentMediaItemChanged(MediaController2 controller, MediaItem2 item) {
+        public void onCurrentMediaItemChanged(MediaController controller, MediaItem item) {
             mCallbackProxy.onCurrentMediaItemChanged(controller, item);
         }
 
         @Override
-        public void onPlaylistChanged(MediaController2 controller,
-                List<MediaItem2> list, MediaMetadata2 metadata) {
+        public void onPlaylistChanged(MediaController controller,
+                List<MediaItem> list, MediaMetadata metadata) {
             mCallbackProxy.onPlaylistChanged(controller, list, metadata);
         }
 
         @Override
-        public void onPlaylistMetadataChanged(MediaController2 controller,
-                MediaMetadata2 metadata) {
+        public void onPlaylistMetadataChanged(MediaController controller,
+                MediaMetadata metadata) {
             mCallbackProxy.onPlaylistMetadataChanged(controller, metadata);
         }
 
         @Override
-        public void onShuffleModeChanged(MediaController2 controller, int shuffleMode) {
+        public void onShuffleModeChanged(MediaController controller, int shuffleMode) {
             mCallbackProxy.onShuffleModeChanged(controller, shuffleMode);
         }
 
         @Override
-        public void onRepeatModeChanged(MediaController2 controller, int repeatMode) {
+        public void onRepeatModeChanged(MediaController controller, int repeatMode) {
             mCallbackProxy.onRepeatModeChanged(controller, repeatMode);
         }
 
         @Override
-        public void onPlaybackCompleted(MediaController2 controller) {
+        public void onPlaybackCompleted(MediaController controller) {
             mCallbackProxy.onPlaybackCompleted(controller);
         }
 
         @Override
-        public void onRoutesInfoChanged(MediaController2 controller, List<Bundle> routes) {
-            mCallbackProxy.onRoutesInfoChanged(controller, routes);
-        }
-
-        @Override
-        public void onSearchResultChanged(MediaBrowser2 browser, String query, int itemCount,
+        public void onSearchResultChanged(MediaBrowser browser, String query, int itemCount,
                 LibraryParams params) {
             super.onSearchResultChanged(browser, query, itemCount, params);
             if (mCallbackProxy instanceof BrowserCallback) {
@@ -689,7 +680,7 @@
         }
 
         @Override
-        public void onChildrenChanged(MediaBrowser2 browser, String parentId, int itemCount,
+        public void onChildrenChanged(MediaBrowser browser, String parentId, int itemCount,
                 LibraryParams params) {
             super.onChildrenChanged(browser, parentId, itemCount, params);
             if (mCallbackProxy instanceof BrowserCallback) {
@@ -706,10 +697,10 @@
         }
     }
 
-    public class TestMediaBrowser extends MediaBrowser2 implements TestControllerInterface {
+    public class TestMediaBrowser extends MediaBrowser implements TestControllerInterface {
         private final BrowserCallback mCallback;
 
-        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken2 token,
+        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken token,
                 @NonNull BrowserCallback callback) {
             super(context, token, sHandlerExecutor, callback);
             mCallback = callback;
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaLibraryService2.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaLibraryService.java
similarity index 91%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaLibraryService2.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaLibraryService.java
index cf5fe1a..6a3f282 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaLibraryService2.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaLibraryService.java
@@ -17,24 +17,24 @@
 package androidx.media.test.client.tests;
 
 import static androidx.media.test.lib.CommonConstants.MOCK_MEDIA_LIBRARY_SERVICE;
-import static androidx.media.test.lib.MediaBrowser2Constants.CHILDREN_COUNT;
-import static androidx.media.test.lib.MediaBrowser2Constants.CUSTOM_ACTION;
-import static androidx.media.test.lib.MediaBrowser2Constants.CUSTOM_ACTION_EXTRAS;
-import static androidx.media.test.lib.MediaBrowser2Constants.GET_CHILDREN_RESULT;
-import static androidx.media.test.lib.MediaBrowser2Constants.LONG_LIST_COUNT;
-import static androidx.media.test.lib.MediaBrowser2Constants.MEDIA_ID_GET_ITEM;
-import static androidx.media.test.lib.MediaBrowser2Constants.PARENT_ID;
-import static androidx.media.test.lib.MediaBrowser2Constants.PARENT_ID_ERROR;
-import static androidx.media.test.lib.MediaBrowser2Constants.PARENT_ID_LONG_LIST;
-import static androidx.media.test.lib.MediaBrowser2Constants.PARENT_ID_NO_CHILDREN;
-import static androidx.media.test.lib.MediaBrowser2Constants.ROOT_EXTRAS;
-import static androidx.media.test.lib.MediaBrowser2Constants.ROOT_ID;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY_EMPTY_RESULT;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY_ERROR;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY_LONG_LIST;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_RESULT;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_RESULT_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.CHILDREN_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.CUSTOM_ACTION;
+import static androidx.media.test.lib.MediaBrowserConstants.CUSTOM_ACTION_EXTRAS;
+import static androidx.media.test.lib.MediaBrowserConstants.GET_CHILDREN_RESULT;
+import static androidx.media.test.lib.MediaBrowserConstants.LONG_LIST_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.MEDIA_ID_GET_ITEM;
+import static androidx.media.test.lib.MediaBrowserConstants.PARENT_ID;
+import static androidx.media.test.lib.MediaBrowserConstants.PARENT_ID_ERROR;
+import static androidx.media.test.lib.MediaBrowserConstants.PARENT_ID_LONG_LIST;
+import static androidx.media.test.lib.MediaBrowserConstants.PARENT_ID_NO_CHILDREN;
+import static androidx.media.test.lib.MediaBrowserConstants.ROOT_EXTRAS;
+import static androidx.media.test.lib.MediaBrowserConstants.ROOT_ID;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY_EMPTY_RESULT;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY_ERROR;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY_LONG_LIST;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_RESULT;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_RESULT_COUNT;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -53,7 +53,7 @@
 import android.support.v4.media.MediaBrowserCompat.SubscriptionCallback;
 
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaLibraryService2;
+import androidx.media2.MediaLibraryService;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SmallTest;
 
@@ -65,11 +65,11 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests whether {@link MediaBrowserCompat} works well with {@link MediaLibraryService2}.
+ * Tests whether {@link MediaBrowserCompat} works well with {@link MediaLibraryService}.
  */
 @SmallTest
-public class MediaBrowserCompatTestWithMediaLibraryService2 extends
-        MediaBrowserCompatTestWithMediaSessionService2 {
+public class MediaBrowserCompatTestWithMediaLibraryService extends
+        MediaBrowserCompatTestWithMediaSessionService {
     @Override
     public void setUp() throws Exception {
         super.setUp();
@@ -88,8 +88,8 @@
     @Test
     public void testGetRoot() throws InterruptedException {
         prepareLooper();
-        // The MockMediaLibraryService gives MediaBrowser2Constants.ROOT_ID as root ID, and
-        // MediaBrowser2Constants.ROOT_EXTRAS as extras.
+        // The MockMediaLibraryService gives MediaBrowserConstants.ROOT_ID as root ID, and
+        // MediaBrowserConstants.ROOT_EXTRAS as extras.
         sHandler.postAndSync(new Runnable() {
             @Override
             public void run() {
@@ -410,7 +410,7 @@
     public void testSubscribe() throws InterruptedException {
 //        prepareLooper();
 //        final String testParentId = "testSubscribeId";
-//        final List<MediaItem2> testList = TestUtils.createMediaItems(3);
+//        final List<MediaItem> testList = TestUtils.createMediaItems(3);
 //
 //        final CountDownLatch latch = new CountDownLatch(1);
 //        final MediaLibrarySessionCallback callback = new MediaLibrarySessionCallback() {
@@ -424,7 +424,7 @@
 //            }
 //
 //            @Override
-//            public List<MediaItem2> onGetChildren(MediaLibrarySession session,
+//            public List<MediaItem> onGetChildren(MediaLibrarySession session,
 //                    ControllerInfo controller,
 //                    String parentId, int page, int pageSize, Bundle extras) {
 //                assertEquals(testParentId, parentId);
@@ -458,7 +458,7 @@
 //        final String testParentId = "testSubscribe_withExtras";
 //        final Bundle testExtras = new Bundle();
 //        testExtras.putString(testParentId, testParentId);
-//        final List<MediaItem2> testList = TestUtils.createMediaItems(3);
+//        final List<MediaItem> testList = TestUtils.createMediaItems(3);
 //
 //        final CountDownLatch latch = new CountDownLatch(1);
 //        final MediaLibrarySessionCallback callback = new MediaLibrarySessionCallback() {
@@ -473,7 +473,7 @@
 //            }
 //
 //            @Override
-//            public List<MediaItem2> onGetChildren(MediaLibrarySession session,
+//            public List<MediaItem> onGetChildren(MediaLibrarySession session,
 //                    ControllerInfo controller,
 //                    String parentId, int page, int pageSize, Bundle extras) {
 //                assertEquals(testParentId, parentId);
@@ -508,7 +508,7 @@
     public void testSubscribe_withPagination() throws InterruptedException {
 //        prepareLooper();
 //        final String testParentId = "testSubscribe_pagination_ID";
-//        final List<MediaItem2> testList = TestUtils.createMediaItems(3);
+//        final List<MediaItem> testList = TestUtils.createMediaItems(3);
 //        final int testPage = 2;
 //        final int testPageSize = 3;
 //        final Bundle testExtras = new Bundle();
@@ -529,7 +529,7 @@
 //            }
 //
 //            @Override
-//            public List<MediaItem2> onGetChildren(MediaLibrarySession session,
+//            public List<MediaItem> onGetChildren(MediaLibrarySession session,
 //                    ControllerInfo controller,
 //                    String parentId, int page, int pageSize, Bundle extras) {
 //                assertEquals(testParentId, parentId);
@@ -619,7 +619,7 @@
 //        final String testUnsubscribedParentId = "testNotifyChildrenChanged22";
 //        final Bundle testExtras = new Bundle();
 //        testExtras.putString(testSubscribedParentId, testSubscribedParentId);
-//        final List<MediaItem2> testList = TestUtils.createMediaItems(3);
+//        final List<MediaItem> testList = TestUtils.createMediaItems(3);
 //
 //        final CountDownLatch subscribeLatch = new CountDownLatch(1);
 //        final MediaLibrarySessionCallback callback = new MediaLibrarySessionCallback() {
@@ -633,7 +633,7 @@
 //            }
 //
 //            @Override
-//            public List<MediaItem2> onGetChildren(MediaLibrarySession session,
+//            public List<MediaItem> onGetChildren(MediaLibrarySession session,
 //                    ControllerInfo controller, String parentId, int page, int pageSize,
 //                    Bundle extras) {
 //                assertEquals(testSubscribedParentId, parentId);
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaSessionService2.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaSessionService.java
similarity index 95%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaSessionService2.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaSessionService.java
index 58d6b1b..f219ec8 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaSessionService2.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserCompatTestWithMediaSessionService.java
@@ -26,7 +26,7 @@
 import android.support.v4.media.MediaBrowserCompat;
 import android.support.v4.media.session.MediaControllerCompat;
 
-import androidx.media2.MediaSessionService2;
+import androidx.media2.MediaSessionService;
 import androidx.test.filters.SmallTest;
 
 import org.junit.After;
@@ -38,10 +38,10 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests whether {@link MediaBrowserCompat} works well with {@link MediaSessionService2}.
+ * Tests whether {@link MediaBrowserCompat} works well with {@link MediaSessionService}.
  */
 @SmallTest
-public class MediaBrowserCompatTestWithMediaSessionService2 extends MediaSession2TestBase {
+public class MediaBrowserCompatTestWithMediaSessionService extends MediaSessionTestBase {
     MediaBrowserCompat mBrowserCompat;
     TestConnectionCallback mConnectionCallback;
 
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowser2Test.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserTest.java
similarity index 83%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowser2Test.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserTest.java
index 478fd19..a0be4fd 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowser2Test.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaBrowserTest.java
@@ -25,11 +25,11 @@
 import androidx.annotation.CallSuper;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.media2.MediaBrowser2;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaBrowser;
+import androidx.media2.MediaController;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionToken;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -41,15 +41,15 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaBrowser2}.
+ * Tests {@link MediaBrowser}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaBrowser2Test extends MediaController2Test {
+public class MediaBrowserTest extends MediaControllerTest {
 
     @Override
-    TestControllerInterface onCreateController(final @NonNull SessionToken2 token,
+    TestControllerInterface onCreateController(final @NonNull SessionToken token,
             final @Nullable ControllerCallback callback) throws InterruptedException {
         final AtomicReference<TestControllerInterface> controller = new AtomicReference<>();
         sHandler.postAndSync(new Runnable() {
@@ -64,8 +64,8 @@
         return controller.get();
     }
 
-    public static class TestBrowserCallback extends MediaBrowser2.BrowserCallback
-            implements MediaSession2TestBase.TestControllerCallbackInterface {
+    public static class TestBrowserCallback extends MediaBrowser.BrowserCallback
+            implements MediaSessionTestBase.TestControllerCallbackInterface {
         public final CountDownLatch connectLatch = new CountDownLatch(1);
         public final CountDownLatch disconnectLatch = new CountDownLatch(1);
 
@@ -73,13 +73,13 @@
 
         @CallSuper
         @Override
-        public void onConnected(MediaController2 controller, SessionCommandGroup2 commands) {
+        public void onConnected(MediaController controller, SessionCommandGroup commands) {
             connectLatch.countDown();
         }
 
         @CallSuper
         @Override
-        public void onDisconnected(MediaController2 controller) {
+        public void onDisconnected(MediaController controller) {
             disconnectLatch.countDown();
         }
 
@@ -105,11 +105,11 @@
         public void setRunnableForOnCustomCommand(Runnable runnable) {}
     }
 
-    public class TestMediaBrowser extends MediaBrowser2 implements
-            MediaSession2TestBase.TestControllerInterface {
+    public class TestMediaBrowser extends MediaBrowser implements
+            MediaSessionTestBase.TestControllerInterface {
         private final BrowserCallback mCallback;
 
-        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken2 token,
+        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken token,
                 @NonNull BrowserCallback callback) {
             super(context, token, sHandlerExecutor, callback);
             mCallback = callback;
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2CallbackTest.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCallbackTest.java
similarity index 65%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2CallbackTest.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCallbackTest.java
index 4fb8047..072d560 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2CallbackTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCallbackTest.java
@@ -19,15 +19,13 @@
 import static android.media.AudioAttributes.CONTENT_TYPE_MUSIC;
 
 import static androidx.media.VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE;
-import static androidx.media.test.client.MediaTestUtils.assertEqualMediaIds;
-import static androidx.media.test.client.MediaTestUtils.assertNotMediaItemSubclass;
 import static androidx.media.test.lib.CommonConstants.DEFAULT_TEST_NAME;
 import static androidx.media.test.lib.CommonConstants.INDEX_FOR_NULL_ITEM;
 import static androidx.media.test.lib.CommonConstants.INDEX_FOR_UNKONWN_ITEM;
 import static androidx.media.test.lib.CommonConstants.MOCK_MEDIA_LIBRARY_SERVICE;
-import static androidx.media.test.lib.MediaSession2Constants
+import static androidx.media.test.lib.MediaSessionConstants
         .TEST_CONTROLLER_CALLBACK_SESSION_REJECTS;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_SUCCESS;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -35,26 +33,25 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import android.graphics.Bitmap;
 import android.media.AudioManager;
 import android.os.Build;
 import android.os.Bundle;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.media.AudioAttributesCompat;
 import androidx.media.test.client.MediaTestUtils;
-import androidx.media.test.client.RemoteMediaSession2;
+import androidx.media.test.client.RemoteMediaSession;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaController;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
+import androidx.media2.SessionToken;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
@@ -62,7 +59,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -74,26 +70,26 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaController2.ControllerCallback}.
+ * Tests {@link MediaController.ControllerCallback}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaController2CallbackTest extends MediaSession2TestBase {
+public class MediaControllerCallbackTest extends MediaSessionTestBase {
 
     // Since ControllerInfo cannot be passed, we just pass null and the service app chooses the
     // right controller by using the package name.
     static final ControllerInfo TEST_CONTROLLER_INFO = null;
-    RemoteMediaSession2 mRemoteSession2;
-    MediaController2 mController;
+    RemoteMediaSession mRemoteSession2;
+    MediaController mController;
 
-    final List<RemoteMediaSession2> mRemoteSessionList = new ArrayList<>();
+    final List<RemoteMediaSession> mRemoteSessionList = new ArrayList<>();
 
     @Before
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        mRemoteSession2 = createRemoteMediaSession2(DEFAULT_TEST_NAME);
+        mRemoteSession2 = createRemoteMediaSession(DEFAULT_TEST_NAME);
     }
 
     @After
@@ -101,7 +97,7 @@
     public void cleanUp() throws Exception {
         super.cleanUp();
         for (int i = 0; i < mRemoteSessionList.size(); i++) {
-            RemoteMediaSession2 session = mRemoteSessionList.get(i);
+            RemoteMediaSession session = mRemoteSessionList.get(i);
             if (session != null) {
                 session.cleanUp();
             }
@@ -113,37 +109,37 @@
         prepareLooper();
         // createController() uses controller callback to wait until the controller becomes
         // available.
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
         assertNotNull(controller);
     }
 
     @Test
     public void testConnection_sessionRejects() throws InterruptedException {
         prepareLooper();
-        RemoteMediaSession2 session2 =
-                createRemoteMediaSession2(TEST_CONTROLLER_CALLBACK_SESSION_REJECTS);
+        RemoteMediaSession session =
+                createRemoteMediaSession(TEST_CONTROLLER_CALLBACK_SESSION_REJECTS);
 
-        MediaController2 controller = createController(session2.getToken(),
+        MediaController controller = createController(session.getToken(),
                 false /* waitForConnect */, null);
         assertNotNull(controller);
         waitForConnect(controller, false /* expected */);
         waitForDisconnect(controller, true /* expected */);
 
-        session2.cleanUp();
+        session.cleanUp();
     }
 
     @Test
     public void testConnection_toLibraryService() throws InterruptedException {
         prepareLooper();
-        SessionToken2 token = new SessionToken2(mContext, MOCK_MEDIA_LIBRARY_SERVICE);
-        MediaController2 controller = createController(token);
+        SessionToken token = new SessionToken(mContext, MOCK_MEDIA_LIBRARY_SERVICE);
+        MediaController controller = createController(token);
         assertNotNull(controller);
     }
 
     @Test
     public void testConnection_sessionClosed() throws InterruptedException {
         prepareLooper();
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
 
         mRemoteSession2.close();
         waitForDisconnect(controller, true);
@@ -152,7 +148,7 @@
     @Test
     public void testConnection_controllerClosed() throws InterruptedException {
         prepareLooper();
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
 
         controller.close();
         waitForDisconnect(controller, true);
@@ -162,7 +158,7 @@
     @LargeTest
     public void testNoInteractionAfterSessionClose_session() throws InterruptedException {
         prepareLooper();
-        SessionToken2 token = mRemoteSession2.getToken();
+        SessionToken token = mRemoteSession2.getToken();
         mController = createController(token);
         testControllerAfterSessionIsClosed(DEFAULT_TEST_NAME);
     }
@@ -171,7 +167,7 @@
     @LargeTest
     public void testNoInteractionAfterControllerClose_session() throws InterruptedException {
         prepareLooper();
-        final SessionToken2 token = mRemoteSession2.getToken();
+        final SessionToken token = mRemoteSession2.getToken();
         mController = createController(token);
 
         mController.close();
@@ -191,11 +187,11 @@
         mRemoteSession2.getMockPlayer().createAndSetDummyPlaylist(playlistSize);
 
         final CountDownLatch latch = new CountDownLatch(1);
-        MediaController2 controller = new MediaController2(mContext, mRemoteSession2.getToken(),
-                sHandlerExecutor, new MediaController2.ControllerCallback() {
+        MediaController controller = new MediaController(mContext, mRemoteSession2.getToken(),
+                sHandlerExecutor, new MediaController.ControllerCallback() {
                     @Override
-                    public void onConnected(MediaController2 controller,
-                            SessionCommandGroup2 allowedCommands) {
+                    public void onConnected(MediaController controller,
+                            SessionCommandGroup allowedCommands) {
                         super.onConnected(controller, allowedCommands);
                         latch.countDown();
                     }
@@ -204,7 +200,7 @@
         assertTrue(latch.await(10, TimeUnit.SECONDS));
 
         // After connection, getPlaylist() should return the playlist which is set to the player.
-        List<MediaItem2> playlist = controller.getPlaylist();
+        List<MediaItem> playlist = controller.getPlaylist();
         assertNotNull(playlist);
         assertEquals(playlistSize, playlist.size());
         for (int i = 0; i < playlist.size(); i++) {
@@ -215,40 +211,40 @@
     @Test
     public void testControllerCallback_sessionUpdatePlayer() throws InterruptedException {
         prepareLooper();
-        final int testState = SessionPlayer2.PLAYER_STATE_PLAYING;
-        final List<MediaItem2> testPlaylist = MediaTestUtils.createFileMediaItems(3);
+        final int testState = SessionPlayer.PLAYER_STATE_PLAYING;
+        final List<MediaItem> testPlaylist = MediaTestUtils.createFileMediaItems(3);
         final AudioAttributesCompat testAudioAttributes = new AudioAttributesCompat.Builder()
                 .setLegacyStreamType(AudioManager.STREAM_RING).build();
         final CountDownLatch latch = new CountDownLatch(3);
         mController = createController(mRemoteSession2.getToken(),
-                true /* waitForConnect */, new MediaController2.ControllerCallback() {
+                true /* waitForConnect */, new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlayerStateChanged(MediaController2 controller, int state) {
+                    public void onPlayerStateChanged(MediaController controller, int state) {
                         assertEquals(mController, controller);
                         assertEquals(testState, state);
                         latch.countDown();
                     }
 
                     @Override
-                    public void onPlaylistChanged(MediaController2 controller,
-                            List<MediaItem2> list, MediaMetadata2 metadata) {
+                    public void onPlaylistChanged(MediaController controller,
+                            List<MediaItem> list, MediaMetadata metadata) {
                         assertEquals(mController, controller);
-                        assertNotMediaItemSubclass(list);
-                        assertEqualMediaIds(testPlaylist, list);
+                        MediaTestUtils.assertNotMediaItemSubclass(list);
+                        MediaTestUtils.assertMediaIdEquals(testPlaylist, list);
                         assertNull(metadata);
                         latch.countDown();
                     }
 
                     @Override
-                    public void onPlaybackInfoChanged(MediaController2 controller,
-                            MediaController2.PlaybackInfo info) {
+                    public void onPlaybackInfoChanged(MediaController controller,
+                            MediaController.PlaybackInfo info) {
                         assertEquals(mController, controller);
                         assertEquals(testAudioAttributes, info.getAudioAttributes());
                         latch.countDown();
                     }
                 });
 
-        Bundle config = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle config = RemoteMediaSession.createMockPlayerConnectorConfig(
                 testState, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
                 0f /* speed */, testAudioAttributes, testPlaylist, null /* currentItem */,
                 null /* metadata */);
@@ -261,23 +257,23 @@
     public void testOnCurrentMediaItemChanged() throws Exception {
         prepareLooper();
         final int listSize = 5;
-        final List<MediaItem2> list = MediaTestUtils.createFileMediaItems(listSize);
+        final List<MediaItem> list = MediaTestUtils.createFileMediaItems(listSize);
         mRemoteSession2.getMockPlayer().setPlaylistWithDummyItem(list);
 
         final int currentItemIndex = 3;
-        final MediaItem2 currentItem = list.get(currentItemIndex);
+        final MediaItem currentItem = list.get(currentItemIndex);
         final CountDownLatch latchForControllerCallback = new CountDownLatch(3);
-        MediaController2 controller = createController(
-                mRemoteSession2.getToken(), true, new MediaController2.ControllerCallback() {
+        MediaController controller = createController(
+                mRemoteSession2.getToken(), true, new MediaController.ControllerCallback() {
                     @Override
-                    public void onCurrentMediaItemChanged(MediaController2 controller,
-                            MediaItem2 item) {
+                    public void onCurrentMediaItemChanged(MediaController controller,
+                            MediaItem item) {
                         switch ((int) latchForControllerCallback.getCount()) {
                             case 3:
                                 // No check needed..
                                 break;
                             case 2:
-                                assertNotMediaItemSubclass(item);
+                                MediaTestUtils.assertNotMediaItemSubclass(item);
                                 assertEquals(currentItem.getMediaId(), item.getMediaId());
                                 break;
                             case 1:
@@ -292,13 +288,13 @@
         // Known ITEM should be notified through the onCurrentMediaItemChanged.
         mRemoteSession2.getMockPlayer().notifyCurrentMediaItemChanged(currentItemIndex);
 
-        // Null ITEM becomes null MediaItem2.
+        // Null ITEM becomes null MediaItem.
         mRemoteSession2.getMockPlayer().notifyCurrentMediaItemChanged(INDEX_FOR_NULL_ITEM);
         assertTrue(latchForControllerCallback.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
     /**
-     * This also tests {@link MediaController2#getPlaybackSpeed()}.
+     * This also tests {@link MediaController#getPlaybackSpeed()}.
      */
     @Test
     public void testOnPlaybackSpeedChanged() throws Exception {
@@ -307,10 +303,10 @@
         mRemoteSession2.getMockPlayer().setPlaybackSpeed(speed);
 
         final CountDownLatch latchForControllerCallback = new CountDownLatch(1);
-        MediaController2 controller = createController(
-                mRemoteSession2.getToken(), true, new MediaController2.ControllerCallback() {
+        MediaController controller = createController(
+                mRemoteSession2.getToken(), true, new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlaybackSpeedChanged(MediaController2 controller,
+                    public void onPlaybackSpeedChanged(MediaController controller,
                             float speedOut) {
                         assertEquals(speed, speedOut, 0.0f);
                         latchForControllerCallback.countDown();
@@ -322,7 +318,7 @@
     }
 
     /**
-     * This also tests {@link MediaController2#getPlaybackInfo()}.
+     * This also tests {@link MediaController#getPlaybackInfo()}.
      */
     @Test
     public void testOnPlaybackInfoChanged() throws Exception {
@@ -336,10 +332,10 @@
         final int volumeControlType = VOLUME_CONTROL_ABSOLUTE;
 
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
             @Override
-            public void onPlaybackInfoChanged(MediaController2 controller, PlaybackInfo info) {
+            public void onPlaybackInfoChanged(MediaController controller, PlaybackInfo info) {
                 assertEquals(PlaybackInfo.PLAYBACK_TYPE_REMOTE, info.getPlaybackType());
                 assertEquals(attrs, info.getAudioAttributes());
                 assertEquals(volumeControlType, info.getPlaybackType());
@@ -348,9 +344,9 @@
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
 
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 volumeControlType, maxVolume, currentVolume, attrs);
         mRemoteSession2.updatePlayer(playerConfig);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -372,43 +368,43 @@
                 .setContentType(AudioAttributesCompat.CONTENT_TYPE_MUSIC)
                 .setUsage(AudioAttributesCompat.USAGE_MEDIA)
                 .build();
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlaybackInfoChanged(MediaController2 controller,
+                    public void onPlaybackInfoChanged(MediaController controller,
                             PlaybackInfo info) {
                         assertNotNull(info.getAudioAttributes());
                         assertEquals(attrs, info.getAudioAttributes());
                         latch.countDown();
                     }
                 };
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         mRemoteSession2.getMockPlayer().notifyAudioAttributesChanged(attrs);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
     /**
-     * This also tests {@link MediaController2#getPlaylist()}.
+     * This also tests {@link MediaController#getPlaylist()}.
      */
     @Test
     public void testOnPlaylistChanged() throws InterruptedException {
         prepareLooper();
-        final List<MediaItem2> testList = MediaTestUtils.createFileMediaItems(2);
-        final AtomicReference<List<MediaItem2>> listFromCallback = new AtomicReference<>();
+        final List<MediaItem> testList = MediaTestUtils.createFileMediaItems(2);
+        final AtomicReference<List<MediaItem>> listFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlaylistChanged(MediaController2 controller,
-                            List<MediaItem2> playlist, MediaMetadata2 metadata) {
+                    public void onPlaylistChanged(MediaController controller,
+                            List<MediaItem> playlist, MediaMetadata metadata) {
                         assertNotNull(playlist);
-                        assertNotMediaItemSubclass(playlist);
-                        assertEqualMediaIds(testList, playlist);
+                        MediaTestUtils.assertNotMediaItemSubclass(playlist);
+                        MediaTestUtils.assertMediaIdEquals(testList, playlist);
                         listFromCallback.set(playlist);
                         latch.countDown();
                     }
                 };
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
 
         mRemoteSession2.getMockPlayer().setPlaylist(testList);
         mRemoteSession2.getMockPlayer().notifyPlaylistChanged();
@@ -421,13 +417,13 @@
     public void testOnPlaylistChanged_longList() throws InterruptedException {
         prepareLooper();
         final int listSize = 5000;
-        final AtomicReference<List<MediaItem2>> listFromCallback = new AtomicReference<>();
+        final AtomicReference<List<MediaItem>> listFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlaylistChanged(MediaController2 controller,
-                            List<MediaItem2> playlist, MediaMetadata2 metadata) {
+                    public void onPlaylistChanged(MediaController controller,
+                            List<MediaItem> playlist, MediaMetadata metadata) {
                         assertNotNull(playlist);
                         assertEquals(listSize, playlist.size());
                         for (int i = 0; i < playlist.size(); i++) {
@@ -438,7 +434,7 @@
                         latch.countDown();
                     }
                 };
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         mRemoteSession2.getMockPlayer().createAndSetDummyPlaylist(listSize);
         mRemoteSession2.getMockPlayer().notifyPlaylistChanged();
 
@@ -447,95 +443,115 @@
     }
 
     /**
-     * This also tests {@link MediaController2#getPlaylistMetadata()}.
+     * This also tests {@link MediaController#getPlaylistMetadata()}.
      */
     @Test
     public void testOnPlaylistMetadataChanged() throws InterruptedException {
         prepareLooper();
-        final MediaMetadata2 testMetadata = MediaTestUtils.createMetadata();
-        final AtomicReference<MediaMetadata2> metadataFromCallback = new AtomicReference<>();
+        final MediaMetadata testMetadata = MediaTestUtils.createMetadata();
+        final AtomicReference<MediaMetadata> metadataFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlaylistMetadataChanged(MediaController2 controller,
-                            MediaMetadata2 metadata) {
-                        assertNotNull(testMetadata);
+                    public void onPlaylistMetadataChanged(MediaController controller,
+                            MediaMetadata metadata) {
+                        assertNotNull(metadata);
                         assertEquals(testMetadata.getMediaId(), metadata.getMediaId());
                         metadataFromCallback.set(metadata);
                         latch.countDown();
                     }
                 };
-        RemoteMediaSession2.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
+        RemoteMediaSession.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
         player.setPlaylistMetadata(testMetadata);
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         player.notifyPlaylistMetadataChanged();
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertEquals(metadataFromCallback.get().getMediaId(),
                 controller.getPlaylistMetadata().getMediaId());
     }
 
-    /**
-     * Test whether {@link MediaSession2#setPlaylist(List, MediaMetadata2)} is notified
-     * through the {@link MediaController2.ControllerCallback#onPlaylistMetadataChanged(
-     * MediaController2, MediaMetadata2)}
-     * if the controller doesn't have {@link SessionCommand2#COMMAND_CODE_PLAYER_GET_PLAYLIST} but
-     * {@link SessionCommand2#COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA}.
-     */
-    @Ignore
     @Test
-    public void testOnPlaylistMetadataChanged_sessionSetPlaylist() throws InterruptedException {
-        // TODO: Implement
-        // Create session with ID TEST_ON_PLAYLIST_METADATA_CHANGED_SESSION_SET_PLAYLIST.
+    @LargeTest
+    public void testOnPlaylistMetadataChanged_withManyLargeImages() throws InterruptedException {
+        prepareLooper();
+        final int imageCount = 20;
+        final int originalWidth = 1024;
+        final int originalHeight = 1024;
+
+        final CountDownLatch latch = new CountDownLatch(1);
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
+                    @Override
+                    public void onPlaylistMetadataChanged(MediaController controller,
+                            MediaMetadata metadata) {
+                        assertNotNull(metadata);
+                        Set<String> keySet = metadata.keySet();
+                        assertEquals(imageCount, keySet.size());
+                        for (String key : keySet) {
+                            Bitmap value = metadata.getBitmap(key);
+                            assertTrue("Bitmap should have been scaled down.",
+                                    originalWidth > value.getWidth()
+                                            && originalHeight > value.getHeight());
+                        }
+                        latch.countDown();
+                    }
+                };
+        RemoteMediaSession.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
+        player.setPlaylistMetadataWithLargeBitmaps(imageCount, originalWidth, originalHeight);
+
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
+        player.notifyPlaylistMetadataChanged();
+        assertTrue(latch.await(3, TimeUnit.SECONDS));
     }
 
     /**
-     * This also tests {@link MediaController2#getShuffleMode()}.
+     * This also tests {@link MediaController#getShuffleMode()}.
      */
     @Test
     public void testOnShuffleModeChanged() throws InterruptedException {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
                     @Override
-                    public void onShuffleModeChanged(MediaController2 controller, int shuffleMode) {
+                    public void onShuffleModeChanged(MediaController controller, int shuffleMode) {
                         assertEquals(testShuffleMode, shuffleMode);
                         latch.countDown();
                     }
                 };
-        RemoteMediaSession2.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
+        RemoteMediaSession.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
         player.setShuffleMode(testShuffleMode);
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         player.notifyShuffleModeChanged();
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertEquals(testShuffleMode, controller.getShuffleMode());
     }
 
     /**
-     * This also tests {@link MediaController2#getRepeatMode()}.
+     * This also tests {@link MediaController#getRepeatMode()}.
      */
     @Test
     public void testOnRepeatModeChanged() throws InterruptedException {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
                     @Override
-                    public void onRepeatModeChanged(MediaController2 controller, int repeatMode) {
+                    public void onRepeatModeChanged(MediaController controller, int repeatMode) {
                         assertEquals(testRepeatMode, repeatMode);
                         latch.countDown();
                     }
                 };
 
-        RemoteMediaSession2.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
+        RemoteMediaSession.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
         player.setRepeatMode(testRepeatMode);
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         player.notifyRepeatModeChanged();
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertEquals(testRepeatMode, controller.getRepeatMode());
@@ -545,17 +561,17 @@
     public void testOnPlaybackCompleted() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
                     @Override
-                    public void onPlaybackCompleted(MediaController2 controller) {
+                    public void onPlaybackCompleted(MediaController controller) {
                         latch.countDown();
                     }
                 };
 
-        RemoteMediaSession2.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
+        RemoteMediaSession.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         player.notifyPlaybackCompleted();
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -566,10 +582,10 @@
         final long testSeekPosition = 400;
         final long testPosition = 500;
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
             @Override
-            public void onSeekCompleted(MediaController2 controller, long position) {
+            public void onSeekCompleted(MediaController controller, long position) {
                 controller.setTimeDiff(0L);
                 assertEquals(testSeekPosition, position);
                 assertEquals(testPosition, controller.getCurrentPosition());
@@ -577,10 +593,10 @@
             }
         };
 
-        mRemoteSession2.getMockPlayer().setPlayerState(SessionPlayer2.PLAYER_STATE_PAUSED);
+        mRemoteSession2.getMockPlayer().setPlayerState(SessionPlayer.PLAYER_STATE_PAUSED);
         mRemoteSession2.getMockPlayer().setCurrentPosition(testPosition);
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         mRemoteSession2.getMockPlayer().notifySeekCompleted(testSeekPosition);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -590,18 +606,18 @@
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
 
-        final List<MediaItem2> testPlaylist = MediaTestUtils.createFileMediaItems(3);
+        final List<MediaItem> testPlaylist = MediaTestUtils.createFileMediaItems(3);
         final int targetItemIndex = 0;
-        final int testBufferingState = SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
+        final int testBufferingState = SessionPlayer.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
         final long testBufferingPosition = 500;
 
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
             @Override
-            public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+            public void onBufferingStateChanged(MediaController controller, MediaItem item,
                     int state) {
                 controller.setTimeDiff(0L);
-                assertNotMediaItemSubclass(item);
+                MediaTestUtils.assertNotMediaItemSubclass(item);
                 assertEquals(testPlaylist.get(targetItemIndex).getMediaId(), item.getMediaId());
                 assertEquals(testBufferingState, state);
                 assertEquals(testBufferingState, controller.getBufferingState());
@@ -612,10 +628,10 @@
 
         mRemoteSession2.getMockPlayer().setPlaylistWithDummyItem(testPlaylist);
 
-        RemoteMediaSession2.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
+        RemoteMediaSession.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
         player.setBufferedPosition(testBufferingPosition);
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         // Since we cannot pass the DataSourceDesc directly, send the item index so that the player
         // can select which item's state change should be notified.
         player.notifyBufferingStateChanged(targetItemIndex, testBufferingState);
@@ -625,13 +641,13 @@
     @Test
     public void testOnPlayerStateChanged() throws InterruptedException {
         prepareLooper();
-        final int testPlayerState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int testPlayerState = SessionPlayer.PLAYER_STATE_PLAYING;
         final long testPosition = 500;
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
             @Override
-            public void onPlayerStateChanged(MediaController2 controller, int state) {
+            public void onPlayerStateChanged(MediaController controller, int state) {
                 controller.setTimeDiff(0L);
                 assertEquals(testPlayerState, state);
                 assertEquals(testPlayerState, controller.getPlayerState());
@@ -642,7 +658,7 @@
 
         mRemoteSession2.getMockPlayer().setCurrentPosition(testPosition);
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         mRemoteSession2.getMockPlayer().notifyPlayerStateChanged(testPlayerState);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -650,30 +666,30 @@
     @Test
     public void testOnAllowedCommandsChanged() throws InterruptedException {
         prepareLooper();
-        final SessionCommandGroup2 commands = new SessionCommandGroup2();
-        commands.addCommand(SessionCommand2.COMMAND_CODE_PLAYER_PLAY);
-        commands.addCommand(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE);
+        final SessionCommandGroup commands = new SessionCommandGroup();
+        commands.addCommand(SessionCommand.COMMAND_CODE_PLAYER_PLAY);
+        commands.addCommand(SessionCommand.COMMAND_CODE_PLAYER_PAUSE);
 
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
             @Override
-            public void onAllowedCommandsChanged(MediaController2 controller,
-                    SessionCommandGroup2 commandsOut) {
+            public void onAllowedCommandsChanged(MediaController controller,
+                    SessionCommandGroup commandsOut) {
                 assertNotNull(commandsOut);
-                Set<SessionCommand2> expected = commands.getCommands();
-                Set<SessionCommand2> actual = commandsOut.getCommands();
+                Set<SessionCommand> expected = commands.getCommands();
+                Set<SessionCommand> actual = commandsOut.getCommands();
 
                 assertNotNull(actual);
                 assertEquals(expected.size(), actual.size());
-                for (SessionCommand2 command : expected) {
+                for (SessionCommand command : expected) {
                     assertTrue(actual.contains(command));
                 }
                 latch.countDown();
             }
         };
 
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
         mRemoteSession2.setAllowedCommands(TEST_CONTROLLER_INFO, commands);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -681,23 +697,23 @@
     @Test
     public void testOnCustomCommand() throws InterruptedException {
         prepareLooper();
-        final SessionCommand2 testCommand = new SessionCommand2(
-                SessionCommand2.COMMAND_CODE_PLAYER_PREPARE);
+        final SessionCommand testCommand = new SessionCommand(
+                SessionCommand.COMMAND_CODE_PLAYER_PREPARE);
         final Bundle testArgs = TestUtils.createTestBundle();
 
         final CountDownLatch latch = new CountDownLatch(2);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
             @Override
-            public MediaController2.ControllerResult onCustomCommand(MediaController2 controller,
-                    SessionCommand2 command, Bundle args) {
+            public MediaController.ControllerResult onCustomCommand(MediaController controller,
+                    SessionCommand command, Bundle args) {
                 assertEquals(testCommand, command);
                 assertTrue(TestUtils.equals(testArgs, args));
                 latch.countDown();
-                return new MediaController2.ControllerResult(RESULT_CODE_SUCCESS, null);
+                return new MediaController.ControllerResult(RESULT_CODE_SUCCESS, null);
             }
         };
-        MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
+        MediaController controller = createController(mRemoteSession2.getToken(), true, callback);
 
         // TODO(jaewan): Test with multiple controllers
         mRemoteSession2.broadcastCustomCommand(testCommand, testArgs);
@@ -710,20 +726,20 @@
     @Test
     public void testOnCustomLayoutChanged() throws InterruptedException {
         prepareLooper();
-        final List<MediaSession2.CommandButton> buttons = new ArrayList<>();
+        final List<MediaSession.CommandButton> buttons = new ArrayList<>();
 
-        MediaSession2.CommandButton button = new MediaSession2.CommandButton.Builder()
-                .setCommand(new SessionCommand2(SessionCommand2.COMMAND_CODE_PLAYER_PLAY))
+        MediaSession.CommandButton button = new MediaSession.CommandButton.Builder()
+                .setCommand(new SessionCommand(SessionCommand.COMMAND_CODE_PLAYER_PLAY))
                 .setDisplayName("button")
                 .build();
         buttons.add(button);
 
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
+        final MediaController.ControllerCallback callback =
+                new MediaController.ControllerCallback() {
             @Override
-            public int onSetCustomLayout(MediaController2 controller2,
-                    List<MediaSession2.CommandButton> layout) {
+            public int onSetCustomLayout(MediaController controller,
+                    List<MediaSession.CommandButton> layout) {
                 assertEquals(layout.size(), buttons.size());
                 for (int i = 0; i < layout.size(); i++) {
                     assertEquals(layout.get(i).getCommand(), buttons.get(i).getCommand());
@@ -733,31 +749,12 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        final MediaController2 controller =
+        final MediaController controller =
                 createController(mRemoteSession2.getToken(), true, callback);
         mRemoteSession2.setCustomLayout(TEST_CONTROLLER_INFO, buttons);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
-    @Test
-    public void testOnRoutesInfoChanged() throws InterruptedException {
-        prepareLooper();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2.ControllerCallback callback =
-                new MediaController2.ControllerCallback() {
-            @Override
-            public void onRoutesInfoChanged(@NonNull MediaController2 controller,
-                    @Nullable List<Bundle> routes) {
-                assertNull(routes);
-                latch.countDown();
-            }
-        };
-        final MediaController2 controller =
-                createController(mRemoteSession2.getToken(), true, callback);
-        mRemoteSession2.notifyRoutesInfoChanged(TEST_CONTROLLER_INFO, null /* routeList */);
-        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-    }
-
     private void testControllerAfterSessionIsClosed(String id) throws InterruptedException {
         // This cause session service to be died.
         mRemoteSession2.close();
@@ -767,7 +764,7 @@
         // Ensure that the controller cannot use newly create session with the same ID.
         // Recreated session has different session stub, so previously created controller
         // shouldn't be available.
-        mRemoteSession2 = createRemoteMediaSession2(id);
+        mRemoteSession2 = createRemoteMediaSession(id);
         testNoInteraction();
     }
 
@@ -785,7 +782,7 @@
                 latch.countDown();
             }
         });
-        SessionCommand2 customCommand = new SessionCommand2("testNoInteraction", null);
+        SessionCommand customCommand = new SessionCommand("testNoInteraction", null);
 
         mRemoteSession2.broadcastCustomCommand(customCommand, null);
 
@@ -793,8 +790,8 @@
         setRunnableForOnCustomCommand(mController, null);
     }
 
-    RemoteMediaSession2 createRemoteMediaSession2(String id) {
-        RemoteMediaSession2 session = new RemoteMediaSession2(id, mContext);
+    RemoteMediaSession createRemoteMediaSession(String id) {
+        RemoteMediaSession session = new RemoteMediaSession(id, mContext);
         mRemoteSessionList.add(session);
         return session;
     }
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession2.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession.java
similarity index 87%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession2.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession.java
index 53023b2..9b6580f 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession2.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession.java
@@ -31,14 +31,14 @@
 import androidx.media.AudioAttributesCompat;
 import androidx.media.VolumeProviderCompat;
 import androidx.media.test.client.MediaTestUtils;
-import androidx.media.test.client.RemoteMediaSession2;
+import androidx.media.test.client.RemoteMediaSession;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaUtils2;
-import androidx.media2.SessionPlayer2;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaUtils;
+import androidx.media2.SessionPlayer;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -54,24 +54,24 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests {@link MediaSession2}.
+ * Tests {@link MediaSession}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaControllerCompatCallbackTestWithMediaSession2 extends MediaSession2TestBase {
+public class MediaControllerCompatCallbackTestWithMediaSession extends MediaSessionTestBase {
     private static final String TAG = "MCCCallbackTestWithMS2";
 
     private static final long TIMEOUT_MS = 1000L;
 
-    private RemoteMediaSession2 mSession;
+    private RemoteMediaSession mSession;
     private MediaControllerCompat mControllerCompat;
 
     @Before
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        mSession = new RemoteMediaSession2(TAG, mContext);
+        mSession = new RemoteMediaSession(TAG, mContext);
         mControllerCompat = new MediaControllerCompat(mContext, mSession.getCompatToken());
     }
 
@@ -85,7 +85,7 @@
     @Test
     public void testRepeatModeChange() throws Exception {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
 
         final MediaControllerCallback controllerCallback = new MediaControllerCallback();
         controllerCallback.reset(1);
@@ -101,7 +101,7 @@
     @Test
     public void testShuffleModeChange() throws Exception {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
 
         final MediaControllerCallback controllerCallback = new MediaControllerCallback();
         controllerCallback.reset(1);
@@ -129,13 +129,13 @@
     @Test
     public void testUpdatePlayer() throws Exception {
         prepareLooper();
-        final int testState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int testState = SessionPlayer.PLAYER_STATE_PLAYING;
         final int testBufferingPosition = 1500;
         final float testSpeed = 1.5f;
-        final List<MediaItem2> testPlaylist = MediaTestUtils.createFileMediaItems(3);
+        final List<MediaItem> testPlaylist = MediaTestUtils.createFileMediaItems(3);
         final String testPlaylistTitle = "testPlaylistTitle";
-        final MediaMetadata2 testPlaylistMetadata = new MediaMetadata2.Builder()
-                .putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, testPlaylistTitle).build();
+        final MediaMetadata testPlaylistMetadata = new MediaMetadata.Builder()
+                .putText(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, testPlaylistTitle).build();
 
         final MediaControllerCallback controllerCallback = new MediaControllerCallback();
         // TODO: Make each callback method use their own CountDownLatch.
@@ -149,7 +149,7 @@
         }
         mControllerCompat.registerCallback(controllerCallback, sHandler);
 
-        Bundle config = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle config = RemoteMediaSession.createMockPlayerConnectorConfig(
                 testState, 0 /* buffState */, 0 /* pos */, testBufferingPosition,
                 testSpeed, null /* audioAttrs */, testPlaylist, testPlaylist.get(0),
                 testPlaylistMetadata);
@@ -158,7 +158,7 @@
         assertTrue(controllerCallback.await(TIMEOUT_MS));
         assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
         assertEquals(testState,
-                MediaUtils2.convertToPlayerState(controllerCallback.mPlaybackState));
+                MediaUtils.convertToPlayerState(controllerCallback.mPlaybackState));
         assertEquals(testBufferingPosition,
                 controllerCallback.mPlaybackState.getBufferedPosition());
         assertEquals(testSpeed, controllerCallback.mPlaybackState.getPlaybackSpeed(), 0.0f);
@@ -197,7 +197,7 @@
                 };
         mControllerCompat.registerCallback(controllerCallback, sHandler);
 
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 controlType, maxVolume, currentVolume, null);
         mSession.updatePlayer(playerConfig);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -213,7 +213,7 @@
     @Test
     public void testUpdatePlayer_playbackTypeChangedToLocal() throws Exception {
         prepareLooper();
-        Bundle prevPlayerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle prevPlayerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, 10 /* maxVolume */,
                 1 /* currentVolume */, null /* audioAttrs */);
         mSession.updatePlayer(prevPlayerConfig);
@@ -236,7 +236,7 @@
                 };
         mControllerCompat.registerCallback(controllerCallback, sHandler);
 
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 0 /* state */, 0 /* buffState */, 0 /* pos */, 0 /* bufferingPosition */,
                 1.0f /* speed */, attrs);
         mSession.updatePlayer(playerConfig);
@@ -273,7 +273,7 @@
                 };
         mControllerCompat.registerCallback(controllerCallback, sHandler);
 
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 0 /* state */, 0 /* buffState */, 0 /* pos */, 0 /* bufferingPosition */,
                 1.0f /* speed */, attrs);
         mSession.updatePlayer(playerConfig);
@@ -294,7 +294,7 @@
     @Test
     public void testUpdatePlayer_playbackTypeNotChanged_remote() throws Exception {
         prepareLooper();
-        Bundle prevPlayerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle prevPlayerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, 10 /* maxVolume */,
                 1 /* currentVolume */, null /* audioAttrs */);
         mSession.updatePlayer(prevPlayerConfig);
@@ -319,7 +319,7 @@
                 };
         mControllerCompat.registerCallback(controllerCallback, sHandler);
 
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 controlType, maxVolume, currentVolume, null);
         mSession.updatePlayer(playerConfig);
 
@@ -341,7 +341,7 @@
     @Test
     public void testPlayerStateChange() throws Exception {
         prepareLooper();
-        final int targetState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int targetState = SessionPlayer.PLAYER_STATE_PLAYING;
 
         final MediaControllerCallback controllerCallback = new MediaControllerCallback();
         controllerCallback.reset(1);
@@ -352,7 +352,7 @@
         assertTrue(controllerCallback.mOnSessionReadyCalled);
         assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
         assertEquals(targetState,
-                MediaUtils2.convertToPlayerState(controllerCallback.mPlaybackState));
+                MediaUtils.convertToPlayerState(controllerCallback.mPlaybackState));
     }
 
     @Test
@@ -374,9 +374,9 @@
     @Test
     public void testBufferingStateChange() throws Exception {
         prepareLooper();
-        final List<MediaItem2> testPlaylist = MediaTestUtils.createFileMediaItems(3);
+        final List<MediaItem> testPlaylist = MediaTestUtils.createFileMediaItems(3);
         final int testItemIndex = 0;
-        final int testBufferingState = SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
+        final int testBufferingState = SessionPlayer.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
         final long testBufferingPosition = 500;
         mSession.getMockPlayer().setPlaylistWithDummyItem(testPlaylist);
 
@@ -402,9 +402,9 @@
         mControllerCompat.registerCallback(controllerCallback, sHandler);
 
         mSession.getMockPlayer().setCurrentPosition(testSeekPosition);
-        mSession.getMockPlayer().setPlayerState(SessionPlayer2.PLAYER_STATE_PAUSED);
+        mSession.getMockPlayer().setPlayerState(SessionPlayer.PLAYER_STATE_PAUSED);
         mSession.getMockPlayer().notifySeekCompleted(testSeekPosition);
-        assertTrue(controllerCallback.await(MediaSession2TestBase.TIMEOUT_MS));
+        assertTrue(controllerCallback.await(MediaSessionTestBase.TIMEOUT_MS));
         assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
         assertEquals(testSeekPosition, controllerCallback.mPlaybackState.getPosition());
     }
@@ -414,13 +414,13 @@
         prepareLooper();
 
         String displayTitle = "displayTitle";
-        MediaMetadata2 metadata = new MediaMetadata2.Builder()
-                .putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, displayTitle).build();
-        MediaItem2 currentMediaItem = new FileMediaItem2.Builder(new FileDescriptor())
+        MediaMetadata metadata = new MediaMetadata.Builder()
+                .putText(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, displayTitle).build();
+        MediaItem currentMediaItem = new FileMediaItem.Builder(new FileDescriptor())
                 .setMetadata(metadata)
                 .build();
 
-        List<MediaItem2> playlist = MediaTestUtils.createFileMediaItems(5);
+        List<MediaItem> playlist = MediaTestUtils.createFileMediaItems(5);
         final int testItemIndex = 3;
         playlist.set(testItemIndex, currentMediaItem);
         mSession.getMockPlayer().setPlaylistWithDummyItem(playlist);
@@ -432,19 +432,19 @@
         mSession.getMockPlayer().setCurrentMediaItem(testItemIndex);
         mSession.getMockPlayer().notifyCurrentMediaItemChanged(testItemIndex);
 
-        assertTrue(controllerCallback.await(MediaSession2TestBase.TIMEOUT_MS));
+        assertTrue(controllerCallback.await(MediaSessionTestBase.TIMEOUT_MS));
         assertTrue(controllerCallback.mOnMetadataChangedCalled);
         assertEquals(displayTitle, controllerCallback.mMediaMetadata
-                .getString(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE));
+                .getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE));
     }
 
     @Test
     public void testPlaylistAndPlaylistMetadataChange() throws Exception {
         prepareLooper();
-        final List<MediaItem2> playlist = MediaTestUtils.createFileMediaItems(5);
+        final List<MediaItem> playlist = MediaTestUtils.createFileMediaItems(5);
         final String playlistTitle = "playlistTitle";
-        MediaMetadata2 playlistMetadata = new MediaMetadata2.Builder()
-                .putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
+        MediaMetadata playlistMetadata = new MediaMetadata.Builder()
+                .putText(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
 
         final MediaControllerCallback controllerCallback = new MediaControllerCallback();
         controllerCallback.reset(2);
@@ -454,7 +454,7 @@
         mSession.getMockPlayer().setPlaylistMetadata(playlistMetadata);
         mSession.getMockPlayer().notifyPlaylistChanged();
 
-        assertTrue(controllerCallback.await(MediaSession2TestBase.TIMEOUT_MS));
+        assertTrue(controllerCallback.await(MediaSessionTestBase.TIMEOUT_MS));
         assertTrue(controllerCallback.mOnQueueChangedCalled);
         assertTrue(controllerCallback.mOnQueueTitleChangedCalled);
 
@@ -471,8 +471,8 @@
     public void testPlaylistAndPlaylistMetadataChange_longList() throws Exception {
         prepareLooper();
         final String playlistTitle = "playlistTitle";
-        MediaMetadata2 playlistMetadata = new MediaMetadata2.Builder()
-                .putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
+        MediaMetadata playlistMetadata = new MediaMetadata.Builder()
+                .putText(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
 
         final MediaControllerCallback controllerCallback = new MediaControllerCallback();
         controllerCallback.reset(2);
@@ -508,8 +508,8 @@
     public void testPlaylistMetadataChange() throws Exception {
         prepareLooper();
         final String playlistTitle = "playlistTitle";
-        MediaMetadata2 playlistMetadata = new MediaMetadata2.Builder()
-                .putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
+        MediaMetadata playlistMetadata = new MediaMetadata.Builder()
+                .putText(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
 
         final MediaControllerCallback controllerCallback = new MediaControllerCallback();
         controllerCallback.reset(1);
@@ -518,7 +518,7 @@
         mSession.getMockPlayer().setPlaylistMetadata(playlistMetadata);
         mSession.getMockPlayer().notifyPlaylistMetadataChanged();
 
-        assertTrue(controllerCallback.await(MediaSession2TestBase.TIMEOUT_MS));
+        assertTrue(controllerCallback.await(MediaSessionTestBase.TIMEOUT_MS));
         assertTrue(controllerCallback.mOnQueueTitleChangedCalled);
         assertEquals(playlistTitle, controllerCallback.mTitle);
     }
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2LegacyTest.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerLegacyTest.java
similarity index 73%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2LegacyTest.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerLegacyTest.java
index 4ab907c..74556ae 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2LegacyTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerLegacyTest.java
@@ -18,8 +18,6 @@
 
 import static android.support.mediacompat.testlib.util.IntentUtil.SERVICE_PACKAGE_NAME;
 
-import static androidx.media.test.client.MediaTestUtils.assertEqualMediaIds;
-import static androidx.media.test.client.MediaTestUtils.assertMediaItemHasId;
 import static androidx.media.test.lib.CommonConstants.DEFAULT_TEST_NAME;
 
 import static org.junit.Assert.assertEquals;
@@ -38,6 +36,7 @@
 import android.support.v4.media.session.MediaSessionCompat;
 import android.support.v4.media.session.MediaSessionCompat.QueueItem;
 import android.support.v4.media.session.PlaybackStateCompat;
+import android.support.v4.media.session.PlaybackStateCompat.CustomAction;
 import android.util.Log;
 
 import androidx.media.VolumeProviderCompat;
@@ -45,14 +44,17 @@
 import androidx.media.test.client.RemoteMediaSessionCompat;
 import androidx.media.test.lib.MockActivity;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaUtils2;
-import androidx.media2.RemoteSessionPlayer2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionPlayer2;
+import androidx.media2.MediaController;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaController.ControllerResult;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaUtils;
+import androidx.media2.RemoteSessionPlayer;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
 import androidx.test.filters.SmallTest;
 
 import org.junit.After;
@@ -65,17 +67,17 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaController2} interacting with {@link MediaSessionCompat}.
+ * Tests {@link MediaController} interacting with {@link MediaSessionCompat}.
  *
- * TODO: Pull out callback tests to a separate file (i.e. MediaController2LegacyCallbackTest).
+ * TODO: Pull out callback tests to a separate file (i.e. MediaControllerLegacyCallbackTest).
  */
 @SmallTest
-public class MediaController2LegacyTest extends MediaSession2TestBase {
-    private static final String TAG = "MediaController2LegacyTest";
+public class MediaControllerLegacyTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaControllerLegacyTest";
 
     AudioManager mAudioManager;
     RemoteMediaSessionCompat mSession;
-    MediaController2 mController;
+    MediaController mController;
 
     @Before
     @Override
@@ -102,7 +104,7 @@
         final long bufferedPosition = 900000;
         final long timeDiff = 102;
         final float speed = 0.5f;
-        final MediaMetadataCompat metadata = MediaUtils2.convertToMediaMetadataCompat(
+        final MediaMetadataCompat metadata = MediaUtils.convertToMediaMetadataCompat(
                 MediaTestUtils.createMetadata());
 
         mSession.setPlaybackState(new PlaybackStateCompat.Builder()
@@ -114,8 +116,8 @@
         mController = createController(mSession.getSessionToken());
         mController.setTimeDiff(timeDiff);
 
-        assertEquals(SessionPlayer2.PLAYER_STATE_PLAYING, mController.getPlayerState());
-        assertEquals(SessionPlayer2.BUFFERING_STATE_COMPLETE,
+        assertEquals(SessionPlayer.PLAYER_STATE_PLAYING, mController.getPlayerState());
+        assertEquals(SessionPlayer.BUFFERING_STATE_COMPLETE,
                 mController.getBufferingState());
         assertEquals(bufferedPosition, mController.getBufferedPosition());
         assertEquals(speed, mController.getPlaybackSpeed(), 0.0f);
@@ -149,16 +151,16 @@
     }
 
     /**
-     * This also tests {@link ControllerCallback#onRepeatModeChanged(MediaController2, int)}.
+     * This also tests {@link ControllerCallback#onRepeatModeChanged(MediaController, int)}.
      */
     @Test
     public void testGetRepeatMode() throws Exception {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onRepeatModeChanged(MediaController2 controller, int repeatMode) {
+            public void onRepeatModeChanged(MediaController controller, int repeatMode) {
                 assertEquals(testRepeatMode, repeatMode);
                 latch.countDown();
             }
@@ -171,16 +173,16 @@
     }
 
     /**
-     * This also tests {@link ControllerCallback#onShuffleModeChanged(MediaController2, int)}.
+     * This also tests {@link ControllerCallback#onShuffleModeChanged(MediaController, int)}.
      */
     @Test
     public void testGetShuffleMode() throws Exception {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onShuffleModeChanged(MediaController2 controller, int shuffleMode) {
+            public void onShuffleModeChanged(MediaController controller, int shuffleMode) {
                 assertEquals(testShuffleMode, shuffleMode);
                 latch.countDown();
             }
@@ -194,20 +196,20 @@
 
     /**
      * This also tests {@link ControllerCallback#onPlaylistChanged(
-     * MediaController2, List, MediaMetadata2)}.
+     * MediaController, List, MediaMetadata)}.
      */
     @Test
     public void testGetPlaylist() throws Exception {
         prepareLooper();
-        final List<MediaItem2> testList = MediaTestUtils.createFileMediaItems(2);
-        final List<QueueItem> testQueue = MediaUtils2.convertToQueueItemList(testList);
-        final AtomicReference<List<MediaItem2>> listFromCallback = new AtomicReference<>();
+        final List<MediaItem> testList = MediaTestUtils.createFileMediaItems(2);
+        final List<QueueItem> testQueue = MediaUtils.convertToQueueItemList(testList);
+        final AtomicReference<List<MediaItem>> listFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
 
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaylistChanged(MediaController2 controller,
-                    List<MediaItem2> playlist, MediaMetadata2 metadata) {
+            public void onPlaylistChanged(MediaController controller,
+                    List<MediaItem> playlist, MediaMetadata metadata) {
                 assertNotNull(playlist);
                 assertEquals(testList.size(), playlist.size());
                 for (int i = 0; i < playlist.size(); i++) {
@@ -227,15 +229,15 @@
     @Test
     public void testGetPlaylistMetadata() throws Exception {
         prepareLooper();
-        final AtomicReference<MediaMetadata2> metadataFromCallback = new AtomicReference<>();
+        final AtomicReference<MediaMetadata> metadataFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
         final CharSequence queueTitle = "test queue title";
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaylistMetadataChanged(MediaController2 controller,
-                    MediaMetadata2 metadata) {
+            public void onPlaylistMetadataChanged(MediaController controller,
+                    MediaMetadata metadata) {
                 assertEquals(queueTitle.toString(),
-                        metadata.getString(MediaMetadata2.METADATA_KEY_TITLE));
+                        metadata.getString(MediaMetadata.METADATA_KEY_TITLE));
                 metadataFromCallback.set(metadata);
                 latch.countDown();
             }
@@ -275,8 +277,8 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onCurrentMediaItemChanged(MediaController2 controller, MediaItem2 item) {
-                assertMediaItemHasId(item, testMediaId);
+            public void onCurrentMediaItemChanged(MediaController controller, MediaItem item) {
+                MediaTestUtils.assertMediaItemHasId(item, testMediaId);
                 latch.countDown();
             }
         };
@@ -292,8 +294,8 @@
     public void testControllerCallback_onCurrentMediaItemChanged_byActiveQueueItemChange()
             throws Exception {
         prepareLooper();
-        final List<MediaItem2> testList = MediaTestUtils.createFileMediaItems(2);
-        final List<QueueItem> testQueue = MediaUtils2.convertToQueueItemList(testList);
+        final List<MediaItem> testList = MediaTestUtils.createFileMediaItems(2);
+        final List<QueueItem> testQueue = MediaUtils.convertToQueueItemList(testList);
         mSession.setQueue(testQueue);
 
         PlaybackStateCompat.Builder builder = new PlaybackStateCompat.Builder();
@@ -307,8 +309,8 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onCurrentMediaItemChanged(MediaController2 controller, MediaItem2 item) {
-                assertEqualMediaIds(testList.get(newItemIndex), item);
+            public void onCurrentMediaItemChanged(MediaController controller, MediaItem item) {
+                MediaTestUtils.assertMediaIdEquals(testList.get(newItemIndex), item);
                 latch.countDown();
             }
         };
@@ -330,7 +332,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onSeekCompleted(MediaController2 controller, long position) {
+            public void onSeekCompleted(MediaController controller, long position) {
                 assertEquals(testSeekPosition, position);
                 latch.countDown();
             }
@@ -352,16 +354,16 @@
     @Test
     public void testControllerCallback_onBufferingCompleted() throws Exception {
         prepareLooper();
-        final List<MediaItem2> testPlaylist = MediaTestUtils.createFileMediaItems(1);
-        final MediaMetadataCompat metadata = MediaUtils2.convertToMediaMetadataCompat(
+        final List<MediaItem> testPlaylist = MediaTestUtils.createFileMediaItems(1);
+        final MediaMetadataCompat metadata = MediaUtils.convertToMediaMetadataCompat(
                 testPlaylist.get(0).getMetadata());
 
-        final int testBufferingState = SessionPlayer2.BUFFERING_STATE_COMPLETE;
+        final int testBufferingState = SessionPlayer.BUFFERING_STATE_COMPLETE;
         final long testBufferingPosition = 500;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+            public void onBufferingStateChanged(MediaController controller, MediaItem item,
                     int state) {
                 assertEquals(metadata.getDescription().getMediaId(), item.getMediaId());
                 assertEquals(testBufferingState, state);
@@ -390,16 +392,16 @@
     @Test
     public void testControllerCallback_onBufferingStarved() throws Exception {
         prepareLooper();
-        final List<MediaItem2> testPlaylist = MediaTestUtils.createFileMediaItems(1);
-        final MediaMetadataCompat metadata = MediaUtils2.convertToMediaMetadataCompat(
+        final List<MediaItem> testPlaylist = MediaTestUtils.createFileMediaItems(1);
+        final MediaMetadataCompat metadata = MediaUtils.convertToMediaMetadataCompat(
                 testPlaylist.get(0).getMetadata());
 
-        final int testBufferingState = SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_STARVED;
+        final int testBufferingState = SessionPlayer.BUFFERING_STATE_BUFFERING_AND_STARVED;
         final long testBufferingPosition = 0;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+            public void onBufferingStateChanged(MediaController controller, MediaItem item,
                     int state) {
                 assertEquals(metadata.getDescription().getMediaId(), item.getMediaId());
                 assertEquals(testBufferingState, state);
@@ -428,12 +430,12 @@
     @Test
     public void testControllerCallback_onPlayerStateChanged() throws Exception {
         prepareLooper();
-        final int testPlayerState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int testPlayerState = SessionPlayer.PLAYER_STATE_PLAYING;
         final long testPosition = 500;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlayerStateChanged(MediaController2 controller, int state) {
+            public void onPlayerStateChanged(MediaController controller, int state) {
                 assertEquals(testPlayerState, state);
                 assertEquals(testPlayerState, controller.getPlayerState());
                 assertEquals(testPosition, controller.getCurrentPosition());
@@ -461,7 +463,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaybackSpeedChanged(MediaController2 controller, float speed) {
+            public void onPlaybackSpeedChanged(MediaController controller, float speed) {
                 assertEquals(testSpeed, speed, 0.0f);
                 latch.countDown();
             }
@@ -485,8 +487,8 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaybackInfoChanged(MediaController2 controller,
-                    MediaController2.PlaybackInfo info) {
+            public void onPlaybackInfoChanged(MediaController controller,
+                    MediaController.PlaybackInfo info) {
                 // Here, we are intentionally avoid using assertEquals(), since this callback
                 // can be called many times which of them have inaccurate values.
                 Log.d(TAG, "Given playbackType=" + info.getPlaybackType()
@@ -494,7 +496,7 @@
                         + " maxVolume=" + info.getMaxVolume()
                         + " currentVolume=" + info.getCurrentVolume()
                         + " audioAttrs=" + info.getAudioAttributes());
-                if (MediaController2.PlaybackInfo.PLAYBACK_TYPE_REMOTE == info.getPlaybackType()
+                if (MediaController.PlaybackInfo.PLAYBACK_TYPE_REMOTE == info.getPlaybackType()
                         && volumeControlType == info.getControlType()
                         && maxVolume == info.getMaxVolume()
                         && currentVolume == info.getCurrentVolume()) {
@@ -524,11 +526,11 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaybackInfoChanged(MediaController2 controller,
-                    MediaController2.PlaybackInfo info) {
-                assertEquals(MediaController2.PlaybackInfo.PLAYBACK_TYPE_LOCAL,
+            public void onPlaybackInfoChanged(MediaController controller,
+                    MediaController.PlaybackInfo info) {
+                assertEquals(MediaController.PlaybackInfo.PLAYBACK_TYPE_LOCAL,
                         info.getPlaybackType());
-                assertEquals(RemoteSessionPlayer2.VOLUME_CONTROL_ABSOLUTE, info.getControlType());
+                assertEquals(RemoteSessionPlayer.VOLUME_CONTROL_ABSOLUTE, info.getControlType());
                 assertEquals(maxVolume, info.getMaxVolume());
                 assertEquals(currentVolume, info.getCurrentVolume());
                 latch.countDown();
@@ -548,8 +550,8 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public MediaController2.ControllerResult onCustomCommand(MediaController2 controller,
-                    SessionCommand2 command, Bundle args) {
+            public MediaController.ControllerResult onCustomCommand(MediaController controller,
+                    SessionCommand command, Bundle args) {
                 assertEquals(event, command.getCustomCommand());
                 assertTrue(TestUtils.equals(extras, args));
                 latch.countDown();
@@ -562,6 +564,78 @@
     }
 
     @Test
+    public void testControllerCallback_onSetCustomLayout() throws Exception {
+        prepareLooper();
+
+        final CustomAction testCustomAction1 =
+                new CustomAction.Builder("testCustomAction1", "testName1", 1).build();
+        final CustomAction testCustomAction2 =
+                new CustomAction.Builder("testCustomAction2", "testName2", 2).build();
+        final CountDownLatch latch = new CountDownLatch(2);
+        final ControllerCallback callback = new ControllerCallback() {
+            @Override
+            public int onSetCustomLayout(MediaController controller, List<CommandButton> layout) {
+                assertEquals(1, layout.size());
+                CommandButton button = layout.get(0);
+
+                switch ((int) latch.getCount()) {
+                    case 2:
+                        assertEquals(testCustomAction1.getAction(),
+                                button.getCommand().getCustomCommand());
+                        assertEquals(testCustomAction1.getName(), button.getDisplayName());
+                        assertEquals(testCustomAction1.getIcon(), button.getIconResId());
+                        break;
+                    case 1:
+                        assertEquals(testCustomAction2.getAction(),
+                                button.getCommand().getCustomCommand());
+                        assertEquals(testCustomAction2.getName(), button.getDisplayName());
+                        assertEquals(testCustomAction2.getIcon(), button.getIconResId());
+                        break;
+                }
+                latch.countDown();
+                return ControllerResult.RESULT_CODE_SUCCESS;
+            }
+        };
+        mSession.setPlaybackState(new PlaybackStateCompat.Builder()
+                .addCustomAction(testCustomAction1).build());
+        // onSetCustomLayout will be called when its connected
+        mController = createController(mSession.getSessionToken(), true, callback);
+        // onSetCustomLayout will be called again when the custom action in the playback state is
+        // changed.
+        mSession.setPlaybackState(new PlaybackStateCompat.Builder()
+                .addCustomAction(testCustomAction2).build());
+        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+    }
+
+    @Test
+    public void testControllerCallback_onAllowedCommandChanged() throws Exception {
+        prepareLooper();
+
+        final CustomAction testCustomAction1 =
+                new CustomAction.Builder("testCustomAction1", "testName1", 1).build();
+        final CustomAction testCustomAction2 =
+                new CustomAction.Builder("testCustomAction2", "testName2", 2).build();
+        final CountDownLatch latch = new CountDownLatch(1);
+        final ControllerCallback callback = new ControllerCallback() {
+            @Override
+            public void onAllowedCommandsChanged(MediaController controller,
+                    SessionCommandGroup commands) {
+                assertFalse(commands.hasCommand(new SessionCommand(
+                        testCustomAction1.getAction(), testCustomAction1.getExtras())));
+                assertTrue(commands.hasCommand(new SessionCommand(
+                        testCustomAction2.getAction(), testCustomAction2.getExtras())));
+                latch.countDown();
+            }
+        };
+        mSession.setPlaybackState(new PlaybackStateCompat.Builder()
+                .addCustomAction(testCustomAction1).build());
+        mController = createController(mSession.getSessionToken(), true, callback);
+        mSession.setPlaybackState(new PlaybackStateCompat.Builder()
+                .addCustomAction(testCustomAction2).build());
+        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+    }
+
+    @Test
     public void testControllerCallback_onConnected() throws Exception {
         prepareLooper();
         mController = createController(mSession.getSessionToken());
@@ -605,7 +679,7 @@
     @Test
     public void testClose_beforeConnected() throws InterruptedException {
         prepareLooper();
-        MediaController2 controller = createController(mSession.getSessionToken(), false, null);
+        MediaController controller = createController(mSession.getSessionToken(), false, null);
 
         // Should not crash.
         controller.close();
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerTest.java
similarity index 77%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerTest.java
index 3f224e1..05008cf 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerTest.java
@@ -21,10 +21,8 @@
 import static androidx.media.AudioAttributesCompat.CONTENT_TYPE_MUSIC;
 import static androidx.media.VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE;
 import static androidx.media.VolumeProviderCompat.VOLUME_CONTROL_FIXED;
-import static androidx.media.test.client.MediaTestUtils.assertEqualMediaIds;
-import static androidx.media.test.client.MediaTestUtils.assertNotMediaItemSubclass;
 import static androidx.media.test.lib.CommonConstants.DEFAULT_TEST_NAME;
-import static androidx.media.test.lib.MediaSession2Constants.TEST_GET_SESSION_ACTIVITY;
+import static androidx.media.test.lib.MediaSessionConstants.TEST_GET_SESSION_ACTIVITY;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -41,11 +39,11 @@
 
 import androidx.media.AudioAttributesCompat;
 import androidx.media.test.client.MediaTestUtils;
-import androidx.media.test.client.RemoteMediaSession2;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaItem2;
-import androidx.media2.SessionPlayer2;
+import androidx.media.test.client.RemoteMediaSession;
+import androidx.media2.MediaController;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaItem;
+import androidx.media2.SessionPlayer;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -60,24 +58,24 @@
 import java.util.List;
 
 /**
- * Tests {@link MediaController2}.
+ * Tests {@link MediaController}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaController2Test extends MediaSession2TestBase {
+public class MediaControllerTest extends MediaSessionTestBase {
 
-    final List<RemoteMediaSession2> mRemoteSessionList = new ArrayList<>();
+    final List<RemoteMediaSession> mRemoteSessionList = new ArrayList<>();
 
     AudioManager mAudioManager;
-    RemoteMediaSession2 mRemoteSession2;
+    RemoteMediaSession mRemoteSession2;
 
     @Before
     @Override
     public void setUp() throws Exception {
         super.setUp();
         mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
-        mRemoteSession2 = createRemoteMediaSession2(DEFAULT_TEST_NAME);
+        mRemoteSession2 = createRemoteMediaSession(DEFAULT_TEST_NAME);
     }
 
     @After
@@ -85,7 +83,7 @@
     public void cleanUp() throws Exception {
         super.cleanUp();
         for (int i = 0; i < mRemoteSessionList.size(); i++) {
-            RemoteMediaSession2 session = mRemoteSessionList.get(i);
+            RemoteMediaSession session = mRemoteSessionList.get(i);
             if (session != null) {
                 session.cleanUp();
             }
@@ -93,7 +91,7 @@
     }
 
     /**
-     * Test if the {@link MediaSession2TestBase.TestControllerCallback} wraps the callback proxy
+     * Test if the {@link MediaSessionTestBase.TestControllerCallback} wraps the callback proxy
      * without missing any method.
      */
     @Test
@@ -106,26 +104,26 @@
             // overridden the method and call matching API in the callback proxy.
             assertNotEquals("TestControllerCallback should override " + methods[i]
                             + " and call callback proxy",
-                    MediaController2.ControllerCallback.class, methods[i].getDeclaringClass());
+                    MediaController.ControllerCallback.class, methods[i].getDeclaringClass());
         }
     }
 
     @Test
     public void testGetSessionActivity() throws InterruptedException {
         prepareLooper();
-        RemoteMediaSession2 session2 = createRemoteMediaSession2(TEST_GET_SESSION_ACTIVITY);
+        RemoteMediaSession session = createRemoteMediaSession(TEST_GET_SESSION_ACTIVITY);
 
-        MediaController2 controller = createController(session2.getToken());
+        MediaController controller = createController(session.getToken());
         PendingIntent sessionActivity = controller.getSessionActivity();
         assertNotNull(sessionActivity);
         if (Build.VERSION.SDK_INT >= 17) {
             // PendingIntent#getCreatorPackage() is added in API 17.
             assertEquals(SERVICE_PACKAGE_NAME, sessionActivity.getCreatorPackage());
 
-            // TODO: Add getPid/getUid in MediaController2ProviderService and compare them.
+            // TODO: Add getPid/getUid in MediaControllerProviderService and compare them.
             // assertEquals(mRemoteSession2.getUid(), sessionActivity.getCreatorUid());
         }
-        session2.cleanUp();
+        session.cleanUp();
     }
 
     @Test
@@ -136,7 +134,7 @@
             return;
         }
 
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
 
         // Here, we intentionally choose STREAM_ALARM in order not to consider
         // 'Do Not Disturb' or 'Volume limit'.
@@ -149,7 +147,7 @@
 
         AudioAttributesCompat attrs = new AudioAttributesCompat.Builder()
                 .setLegacyStreamType(stream).build();
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 0 /* state */, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
                 0f /* speed */, attrs);
         mRemoteSession2.updatePlayer(playerConfig);
@@ -178,7 +176,7 @@
             return;
         }
 
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
 
         // Here, we intentionally choose STREAM_ALARM in order not to consider
         // 'Do Not Disturb' or 'Volume limit'.
@@ -191,7 +189,7 @@
 
         AudioAttributesCompat attrs = new AudioAttributesCompat.Builder()
                 .setLegacyStreamType(stream).build();
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 0 /* state */, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
                 0f /* speed */, attrs);
         mRemoteSession2.updatePlayer(playerConfig);
@@ -216,14 +214,14 @@
     @Test
     public void testGetPackageName() throws Exception {
         prepareLooper();
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
         assertEquals(SERVICE_PACKAGE_NAME, controller.getConnectedSessionToken().getPackageName());
     }
 
     @Test
     public void testIsConnected() throws InterruptedException {
         prepareLooper();
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
         assertTrue(controller.isConnected());
 
         mRemoteSession2.close();
@@ -234,7 +232,7 @@
     @Test
     public void testClose_beforeConnected() throws InterruptedException {
         prepareLooper();
-        MediaController2 controller = createController(mRemoteSession2.getToken(),
+        MediaController controller = createController(mRemoteSession2.getToken(),
                 false /* waitForConnect */, null /* callback */);
         controller.close();
     }
@@ -242,7 +240,7 @@
     @Test
     public void testClose_twice() throws InterruptedException {
         prepareLooper();
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
         controller.close();
         controller.close();
     }
@@ -250,27 +248,27 @@
     @Test
     public void testGettersAfterConnected() throws InterruptedException {
         prepareLooper();
-        final int state = SessionPlayer2.PLAYER_STATE_PLAYING;
-        final int bufferingState = SessionPlayer2.BUFFERING_STATE_COMPLETE;
+        final int state = SessionPlayer.PLAYER_STATE_PLAYING;
+        final int bufferingState = SessionPlayer.BUFFERING_STATE_COMPLETE;
         final long position = 150000;
         final long bufferedPosition = 900000;
         final float speed = 0.5f;
         final long timeDiff = 102;
-        final MediaItem2 currentMediaItem = MediaTestUtils.createFileMediaItemWithMetadata();
+        final MediaItem currentMediaItem = MediaTestUtils.createFileMediaItemWithMetadata();
 
-        Bundle config = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle config = RemoteMediaSession.createMockPlayerConnectorConfig(
                 state, bufferingState, position, bufferedPosition, speed, null /* audioAttrs */,
                 null /* playlist */, currentMediaItem, null /* metadata */);
         mRemoteSession2.updatePlayer(config);
 
-        MediaController2 controller = createController(mRemoteSession2.getToken());
+        MediaController controller = createController(mRemoteSession2.getToken());
         controller.setTimeDiff(timeDiff);
         assertEquals(state, controller.getPlayerState());
         assertEquals(bufferedPosition, controller.getBufferedPosition());
         assertEquals(speed, controller.getPlaybackSpeed(), 0.0f);
         assertEquals(position + (long) (speed * timeDiff), controller.getCurrentPosition());
-        assertNotMediaItemSubclass(controller.getCurrentMediaItem());
-        assertEqualMediaIds(currentMediaItem, controller.getCurrentMediaItem());
+        MediaTestUtils.assertNotMediaItemSubclass(controller.getCurrentMediaItem());
+        MediaTestUtils.assertMediaIdEquals(currentMediaItem, controller.getCurrentMediaItem());
     }
 
     @Test
@@ -280,12 +278,12 @@
                 .setContentType(CONTENT_TYPE_MUSIC)
                 .build();
 
-        Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+        Bundle playerConfig = RemoteMediaSession.createMockPlayerConnectorConfig(
                 0 /* state */, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
                 0f /* speed */, attrs);
         mRemoteSession2.updatePlayer(playerConfig);
 
-        final MediaController2 controller = createController(mRemoteSession2.getToken());
+        final MediaController controller = createController(mRemoteSession2.getToken());
         PlaybackInfo info = controller.getPlaybackInfo();
         assertNotNull(info);
         assertEquals(PlaybackInfo.PLAYBACK_TYPE_LOCAL, info.getPlaybackType());
@@ -302,8 +300,8 @@
                 info.getCurrentVolume());
     }
 
-    RemoteMediaSession2 createRemoteMediaSession2(String id) {
-        RemoteMediaSession2 session = new RemoteMediaSession2(id, mContext);
+    RemoteMediaSession createRemoteMediaSession(String id) {
+        RemoteMediaSession session = new RemoteMediaSession(id, mContext);
         mRemoteSessionList.add(session);
         return session;
     }
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test_copied.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerTest_copied.java
similarity index 81%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test_copied.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerTest_copied.java
index be4f6bf..3fb9838 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test_copied.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerTest_copied.java
@@ -16,39 +16,39 @@
 
 package androidx.media.test.client.tests;
 
-import androidx.media2.MediaController2;
+import androidx.media2.MediaController;
 
 import org.junit.Ignore;
 
 /**
- * Tests {@link MediaController2}.
+ * Tests {@link MediaController}.
  */
 @Ignore("b/111487997")
-public class MediaController2Test_copied extends MediaSession2TestBase {
-    private static final String TAG = "MediaController2Test_copied";
+public class MediaControllerTest_copied extends MediaSessionTestBase {
+    private static final String TAG = "MediaControllerTest_copied";
 
 // Temporaily commenting out, since we don't have the Mock services yet.
 //    @Test
 //    public void testGetServiceToken() {
 //        prepareLooper();
-//        SessionToken2 token = MediaTestUtils.getServiceToken(
-//                  mContext, MockMediaSessionService2.ID);
+//        SessionToken token = MediaTestUtils.getServiceToken(
+//                  mContext, MockMediaSessionService.ID);
 //        assertNotNull(token);
 //        assertEquals(mContext.getPackageName(), token.getPackageName());
-//        assertEquals(MockMediaSessionService2.ID, token.getSessionId());
-//        assertEquals(SessionToken2.TYPE_SESSION_SERVICE, token.getType());
+//        assertEquals(MockMediaSessionService.ID, token.getSessionId());
+//        assertEquals(SessionToken.TYPE_SESSION_SERVICE, token.getType());
 //    }
 //
 //    @Test
 //    public void testConnectToService_sessionService() throws InterruptedException {
 //        prepareLooper();
-//        testConnectToService(MockMediaSessionService2.ID);
+//        testConnectToService(MockMediaSessionService.ID);
 //    }
 //
 //    @Test
 //    public void testConnectToService_libraryService() throws InterruptedException {
 //        prepareLooper();
-//        testConnectToService(MockMediaLibraryService2.ID);
+//        testConnectToService(MockMediaLibraryService.ID);
 //    }
 //
 //    public void testConnectToService(String id) throws InterruptedException {
@@ -56,7 +56,7 @@
 //        final CountDownLatch latch = new CountDownLatch(1);
 //        final MediaLibrarySessionCallback sessionCallback = new MediaLibrarySessionCallback() {
 //            @Override
-//            public SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
+//            public SessionCommandGroup onConnect(@NonNull MediaSession session,
 //                    @NonNull ControllerInfo controller) {
 //                if (Process.myUid() == controller.getUid()) {
 //                    if (mSession != null) {
@@ -73,13 +73,13 @@
 //        };
 //        TestServiceRegistry.getInstance().setSessionCallback(sessionCallback);
 //
-//        final SessionCommand2 testCommand = new SessionCommand2("testConnectToService", null);
+//        final SessionCommand testCommand = new SessionCommand("testConnectToService", null);
 //        final CountDownLatch controllerLatch = new CountDownLatch(1);
 //        mController = createController(MediaTestUtils.getServiceToken(mContext, id), true,
 //                new ControllerCallback() {
 //                    @Override
-//                    public void onCustomCommand(MediaController2 controller,
-//                            SessionCommand2 command, Bundle args, ResultReceiver receiver) {
+//                    public void onCustomCommand(MediaController controller,
+//                            SessionCommand command, Bundle args, ResultReceiver receiver) {
 //                        if (testCommand.equals(command)) {
 //                            controllerLatch.countDown();
 //                        }
@@ -103,21 +103,21 @@
 //    @Test
 //    public void testControllerAfterSessionIsClosed_sessionService() throws InterruptedException {
 //        prepareLooper();
-//        testConnectToService(MockMediaSessionService2.ID);
-//        testControllerAfterSessionIsClosed(MockMediaSessionService2.ID);
+//        testConnectToService(MockMediaSessionService.ID);
+//        testControllerAfterSessionIsClosed(MockMediaSessionService.ID);
 //    }
 
 // Temporaily commenting out, since we don't have the Mock services yet.
 //    @Test
 //    public void testClose_sessionService() throws InterruptedException {
 //        prepareLooper();
-//        testCloseFromService(MockMediaSessionService2.ID);
+//        testCloseFromService(MockMediaSessionService.ID);
 //    }
 //
 //    @Test
 //    public void testClose_libraryService() throws InterruptedException {
 //        prepareLooper();
-//        testCloseFromService(MockMediaLibraryService2.ID);
+//        testCloseFromService(MockMediaLibraryService.ID);
 //    }
 //
 //    private void testCloseFromService(String id) throws InterruptedException {
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaItem2Test.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaItemTest.java
similarity index 66%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaItem2Test.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaItemTest.java
index 222f0e1..5196a65 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaItem2Test.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaItemTest.java
@@ -25,11 +25,11 @@
 import android.os.Build;
 import android.os.Parcel;
 
-import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaUtils2;
-import androidx.media2.UriMediaItem2;
+import androidx.media.test.client.MediaTestUtils;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaUtils;
+import androidx.media2.UriMediaItem;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
@@ -42,12 +42,12 @@
 import org.junit.runner.RunWith;
 
 /**
- * Tests {@link MediaItem2}.
+ * Tests {@link MediaItem}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaItem2Test {
+public class MediaItemTest {
     private Context mContext;
 
     @Before
@@ -57,36 +57,36 @@
 
     @Test
     public void testSubclass_sameProcess() {
-        final UriMediaItem2 testUriItem = createUriMediaItem2();
-        final ParcelImpl parcel = MediaUtils2.toParcelable(testUriItem);
+        final UriMediaItem testUriItem = createUriMediaItem();
+        final ParcelImpl parcel = MediaUtils.toParcelable(testUriItem);
 
-        final MediaItem2 testRemoteItem = MediaUtils2.fromParcelable(parcel);
+        final MediaItem testRemoteItem = MediaUtils.fromParcelable(parcel);
         assertEquals(testUriItem, testRemoteItem);
     }
 
     @Test
     public void testSubclass_acrossProcessWithMediaUtils() {
-        final UriMediaItem2 testUriItem = createUriMediaItem2();
+        final UriMediaItem testUriItem = createUriMediaItem();
 
         // Mocks the binder call across the processes by using writeParcelable/readParcelable
         // which only happens between processes. Code snippets are copied from
         // VersionedParcelIntegTest#parcelCopy.
         final Parcel p = Parcel.obtain();
-        p.writeParcelable(MediaUtils2.toParcelable(testUriItem), 0);
+        p.writeParcelable(MediaUtils.toParcelable(testUriItem), 0);
         p.setDataPosition(0);
-        final MediaItem2 testRemoteItem = MediaUtils2.fromParcelable(
-                (ParcelImpl) p.readParcelable(MediaItem2.class.getClassLoader()));
+        final MediaItem testRemoteItem = MediaUtils.fromParcelable(
+                (ParcelImpl) p.readParcelable(MediaItem.class.getClassLoader()));
 
-        assertFalse(testRemoteItem instanceof UriMediaItem2);
+        assertFalse(testRemoteItem instanceof UriMediaItem);
         assertEquals(testUriItem.getStartPosition(), testRemoteItem.getStartPosition());
         assertEquals(testUriItem.getEndPosition(), testRemoteItem.getEndPosition());
-        TestUtils.equals(testUriItem.getMetadata().toBundle(),
-                testRemoteItem.getMetadata().toBundle());
+        MediaTestUtils.assertMediaMetadataEquals(
+                testUriItem.getMetadata(), testRemoteItem.getMetadata());
     }
 
     @Test
     public void testSubclass_acrossProcessWithParcelUtils() {
-        final UriMediaItem2 testUriItem = createUriMediaItem2();
+        final UriMediaItem testUriItem = createUriMediaItem();
 
         // Mocks the binder call across the processes by using writeParcelable/readParcelable
         // which only happens between processes. Code snippets are copied from
@@ -95,17 +95,17 @@
             final Parcel p = Parcel.obtain();
             p.writeParcelable(ParcelUtils.toParcelable(testUriItem), 0);
             p.setDataPosition(0);
-            final MediaItem2 testRemoteItem = ParcelUtils.fromParcelable(
-                    (ParcelImpl) p.readParcelable(MediaItem2.class.getClassLoader()));
-            fail("Write to parcel should fail for subclass of MediaItem2");
+            final MediaItem testRemoteItem = ParcelUtils.fromParcelable(
+                    (ParcelImpl) p.readParcelable(MediaItem.class.getClassLoader()));
+            fail("Write to parcel should fail for subclass of MediaItem");
         } catch (Exception e) {
         }
     }
 
-    private UriMediaItem2 createUriMediaItem2() {
-        final MediaMetadata2 testMetadata = new MediaMetadata2.Builder()
-                .putString("MediaItem2Test", "MediaItem2Test").build();
-        return new UriMediaItem2.Builder(mContext, Uri.parse("test://test"))
+    private UriMediaItem createUriMediaItem() {
+        final MediaMetadata testMetadata = new MediaMetadata.Builder()
+                .putString("MediaItemTest", "MediaItemTest").build();
+        return new UriMediaItem.Builder(mContext, Uri.parse("test://test"))
                         .setMetadata(testMetadata)
                         .setStartPosition(1)
                         .setEndPosition(1000)
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaSession2TestBase.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaSessionTestBase.java
similarity index 78%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaSession2TestBase.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaSessionTestBase.java
index 00519c79..5950be2 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaSession2TestBase.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaSessionTestBase.java
@@ -31,14 +31,14 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.media.test.lib.TestUtils.SyncHandler;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaController;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionToken;
 import androidx.test.InstrumentationRegistry;
 
 import org.junit.AfterClass;
@@ -57,14 +57,14 @@
  * For all subclasses, all individual tests should begin with the {@link #prepareLooper()}. See
  * {@link #prepareLooper} for details.
  */
-abstract class MediaSession2TestBase {
+abstract class MediaSessionTestBase {
     static final int TIMEOUT_MS = 1000;
 
     static SyncHandler sHandler;
     static Executor sHandlerExecutor;
 
     Context mContext;
-    private List<MediaController2> mControllers = new ArrayList<>();
+    private List<MediaController> mControllers = new ArrayList<>();
 
     interface TestControllerInterface {
         ControllerCallback getCallback();
@@ -79,7 +79,7 @@
     /**
      * All tests methods should start with this.
      * <p>
-     * MediaControllerCompat, which is wrapped by the MediaSession2, can be only created by the
+     * MediaControllerCompat, which is wrapped by the MediaSession, can be only created by the
      * thread whose Looper is prepared. However, when the presubmit tests runs on the server,
      * test runs with the {@link org.junit.internal.runners.statements.FailOnTimeout} which creates
      * dedicated thread for running test methods while methods annotated with @After or @Before
@@ -95,19 +95,19 @@
 
     @BeforeClass
     public static void setUpThread() {
-        synchronized (MediaSession2TestBase.class) {
+        synchronized (MediaSessionTestBase.class) {
             if (sHandler != null) {
                 return;
             }
             prepareLooper();
-            HandlerThread handlerThread = new HandlerThread("MediaSession2TestBase");
+            HandlerThread handlerThread = new HandlerThread("MediaSessionTestBase");
             handlerThread.start();
             sHandler = new SyncHandler(handlerThread.getLooper());
             sHandlerExecutor = new Executor() {
                 @Override
                 public void execute(Runnable runnable) {
                     SyncHandler handler;
-                    synchronized (MediaSession2TestBase.class) {
+                    synchronized (MediaSessionTestBase.class) {
                         handler = sHandler;
                     }
                     if (handler != null) {
@@ -120,7 +120,7 @@
 
     @AfterClass
     public static void cleanUpThread() {
-        synchronized (MediaSession2TestBase.class) {
+        synchronized (MediaSessionTestBase.class) {
             if (sHandler == null) {
                 return;
             }
@@ -146,20 +146,20 @@
         }
     }
 
-    final MediaController2 createController(@NonNull MediaSessionCompat.Token token)
+    final MediaController createController(@NonNull MediaSessionCompat.Token token)
             throws InterruptedException {
         return createController(token, true, null);
     }
 
-    final MediaController2 createController(@NonNull MediaSessionCompat.Token token,
+    final MediaController createController(@NonNull MediaSessionCompat.Token token,
             boolean waitForConnect, @Nullable ControllerCallback callback)
             throws InterruptedException {
         TestControllerInterface instance = onCreateController(token, callback);
-        if (!(instance instanceof MediaController2)) {
-            throw new RuntimeException("Test has a bug. Expected MediaController2 but returned "
+        if (!(instance instanceof MediaController)) {
+            throw new RuntimeException("Test has a bug. Expected MediaController but returned "
                     + instance);
         }
-        MediaController2 controller = (MediaController2) instance;
+        MediaController controller = (MediaController) instance;
         mControllers.add(controller);
         if (waitForConnect) {
             waitForConnect(controller, true);
@@ -167,20 +167,20 @@
         return controller;
     }
 
-    final MediaController2 createController(@NonNull SessionToken2 token)
+    final MediaController createController(@NonNull SessionToken token)
             throws InterruptedException {
         return createController(token, true, null);
     }
 
-    final MediaController2 createController(@NonNull SessionToken2 token,
+    final MediaController createController(@NonNull SessionToken token,
             boolean waitForConnect, @Nullable ControllerCallback callback)
             throws InterruptedException {
         TestControllerInterface instance = onCreateController(token, callback);
-        if (!(instance instanceof MediaController2)) {
-            throw new RuntimeException("Test has a bug. Expected MediaController2 but returned "
+        if (!(instance instanceof MediaController)) {
+            throw new RuntimeException("Test has a bug. Expected MediaController but returned "
                     + instance);
         }
-        MediaController2 controller = (MediaController2) instance;
+        MediaController controller = (MediaController) instance;
         mControllers.add(controller);
         if (waitForConnect) {
             waitForConnect(controller, true);
@@ -189,7 +189,7 @@
     }
 
     private static TestControllerCallbackInterface getTestControllerCallbackInterface(
-            MediaController2 controller) {
+            MediaController controller) {
         if (!(controller instanceof TestControllerInterface)) {
             throw new RuntimeException("Test has a bug. Expected controller implemented"
                     + " TestControllerInterface but got " + controller);
@@ -202,17 +202,17 @@
         return (TestControllerCallbackInterface) callback;
     }
 
-    public static void waitForConnect(MediaController2 controller, boolean expected)
+    public static void waitForConnect(MediaController controller, boolean expected)
             throws InterruptedException {
         getTestControllerCallbackInterface(controller).waitForConnect(expected);
     }
 
-    public static void waitForDisconnect(MediaController2 controller, boolean expected)
+    public static void waitForDisconnect(MediaController controller, boolean expected)
             throws InterruptedException {
         getTestControllerCallbackInterface(controller).waitForDisconnect(expected);
     }
 
-    public static void setRunnableForOnCustomCommand(MediaController2 controller,
+    public static void setRunnableForOnCustomCommand(MediaController controller,
             Runnable runnable) {
         getTestControllerCallbackInterface(controller).setRunnableForOnCustomCommand(runnable);
     }
@@ -236,7 +236,7 @@
         return controller.get();
     }
 
-    TestControllerInterface onCreateController(final @NonNull SessionToken2 token,
+    TestControllerInterface onCreateController(final @NonNull SessionToken token,
             @Nullable ControllerCallback callback) throws InterruptedException {
         final ControllerCallback controllerCallback =
                 callback != null ? callback : new ControllerCallback() {};
@@ -255,7 +255,7 @@
     }
 
     // TODO(jaewan): (Can be Post-P): Deprecate this
-    public static class TestControllerCallback extends MediaController2.ControllerCallback
+    public static class TestControllerCallback extends MediaController.ControllerCallback
             implements TestControllerCallbackInterface {
         public final ControllerCallback mCallbackProxy;
         public final CountDownLatch connectLatch = new CountDownLatch(1);
@@ -272,13 +272,13 @@
 
         @CallSuper
         @Override
-        public void onConnected(MediaController2 controller, SessionCommandGroup2 commands) {
+        public void onConnected(MediaController controller, SessionCommandGroup commands) {
             connectLatch.countDown();
         }
 
         @CallSuper
         @Override
-        public void onDisconnected(MediaController2 controller) {
+        public void onDisconnected(MediaController controller) {
             disconnectLatch.countDown();
         }
 
@@ -301,8 +301,8 @@
         }
 
         @Override
-        public MediaController2.ControllerResult onCustomCommand(MediaController2 controller,
-                SessionCommand2 command, Bundle args) {
+        public MediaController.ControllerResult onCustomCommand(MediaController controller,
+                SessionCommand command, Bundle args) {
             synchronized (this) {
                 if (mOnCustomCommandRunnable != null) {
                     mOnCustomCommandRunnable.run();
@@ -312,72 +312,72 @@
         }
 
         @Override
-        public void onPlaybackInfoChanged(MediaController2 controller,
-                MediaController2.PlaybackInfo info) {
+        public void onPlaybackInfoChanged(MediaController controller,
+                MediaController.PlaybackInfo info) {
             mCallbackProxy.onPlaybackInfoChanged(controller, info);
         }
 
         @Override
-        public int onSetCustomLayout(MediaController2 controller, List<CommandButton> layout) {
+        public int onSetCustomLayout(MediaController controller, List<CommandButton> layout) {
             return mCallbackProxy.onSetCustomLayout(controller, layout);
         }
 
         @Override
-        public void onAllowedCommandsChanged(MediaController2 controller,
-                SessionCommandGroup2 commands) {
+        public void onAllowedCommandsChanged(MediaController controller,
+                SessionCommandGroup commands) {
             mCallbackProxy.onAllowedCommandsChanged(controller, commands);
         }
 
         @Override
-        public void onPlayerStateChanged(MediaController2 controller, int state) {
+        public void onPlayerStateChanged(MediaController controller, int state) {
             mCallbackProxy.onPlayerStateChanged(controller, state);
         }
 
         @Override
-        public void onSeekCompleted(MediaController2 controller, long position) {
+        public void onSeekCompleted(MediaController controller, long position) {
             mCallbackProxy.onSeekCompleted(controller, position);
         }
 
         @Override
-        public void onPlaybackSpeedChanged(MediaController2 controller, float speed) {
+        public void onPlaybackSpeedChanged(MediaController controller, float speed) {
             mCallbackProxy.onPlaybackSpeedChanged(controller, speed);
         }
 
         @Override
-        public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+        public void onBufferingStateChanged(MediaController controller, MediaItem item,
                 int state) {
             mCallbackProxy.onBufferingStateChanged(controller, item, state);
         }
 
         @Override
-        public void onCurrentMediaItemChanged(MediaController2 controller, MediaItem2 item) {
+        public void onCurrentMediaItemChanged(MediaController controller, MediaItem item) {
             mCallbackProxy.onCurrentMediaItemChanged(controller, item);
         }
 
         @Override
-        public void onPlaylistChanged(MediaController2 controller,
-                List<MediaItem2> list, MediaMetadata2 metadata) {
+        public void onPlaylistChanged(MediaController controller,
+                List<MediaItem> list, MediaMetadata metadata) {
             mCallbackProxy.onPlaylistChanged(controller, list, metadata);
         }
 
         @Override
-        public void onPlaylistMetadataChanged(MediaController2 controller,
-                MediaMetadata2 metadata) {
+        public void onPlaylistMetadataChanged(MediaController controller,
+                MediaMetadata metadata) {
             mCallbackProxy.onPlaylistMetadataChanged(controller, metadata);
         }
 
         @Override
-        public void onShuffleModeChanged(MediaController2 controller, int shuffleMode) {
+        public void onShuffleModeChanged(MediaController controller, int shuffleMode) {
             mCallbackProxy.onShuffleModeChanged(controller, shuffleMode);
         }
 
         @Override
-        public void onRepeatModeChanged(MediaController2 controller, int repeatMode) {
+        public void onRepeatModeChanged(MediaController controller, int repeatMode) {
             mCallbackProxy.onRepeatModeChanged(controller, repeatMode);
         }
 
         @Override
-        public void onPlaybackCompleted(MediaController2 controller) {
+        public void onPlaybackCompleted(MediaController controller) {
             mCallbackProxy.onPlaybackCompleted(controller);
         }
 
@@ -387,15 +387,9 @@
                 mOnCustomCommandRunnable = runnable;
             }
         }
-
-        @Override
-        public void onRoutesInfoChanged(@NonNull MediaController2 controller,
-                @Nullable List<Bundle> routes) {
-            mCallbackProxy.onRoutesInfoChanged(controller, routes);
-        }
     }
 
-    public class TestMediaController extends MediaController2 implements TestControllerInterface {
+    public class TestMediaController extends MediaController implements TestControllerInterface {
         private final ControllerCallback mCallback;
 
         TestMediaController(@NonNull Context context, @NonNull MediaSessionCompat.Token token,
@@ -404,7 +398,7 @@
             mCallback = callback;
         }
 
-        TestMediaController(@NonNull Context context, @NonNull SessionToken2 token,
+        TestMediaController(@NonNull Context context, @NonNull SessionToken token,
                 @NonNull ControllerCallback callback) {
             super(context, token, sHandlerExecutor, callback);
             mCallback = callback;
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/RemoteMediaSession2Test.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/RemoteMediaSessionTest.java
similarity index 75%
rename from media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/RemoteMediaSession2Test.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/RemoteMediaSessionTest.java
index 1ad72ad..aca71ec 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/RemoteMediaSession2Test.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/RemoteMediaSessionTest.java
@@ -25,9 +25,9 @@
 
 import android.content.Context;
 
-import androidx.media.test.client.RemoteMediaSession2;
-import androidx.media2.MediaController2;
-import androidx.media2.SessionToken2;
+import androidx.media.test.client.RemoteMediaSession;
+import androidx.media2.MediaController;
+import androidx.media2.SessionToken;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -39,17 +39,17 @@
 
 import java.util.concurrent.Executor;
 
-/** Test {@link RemoteMediaSession2}. */
+/** Test {@link RemoteMediaSession}. */
 @RunWith(AndroidJUnit4.class)
-public class RemoteMediaSession2Test {
+public class RemoteMediaSessionTest {
 
     private Context mContext;
-    private RemoteMediaSession2 mRemoteSession2;
+    private RemoteMediaSession mRemoteSession2;
 
     @Before
     public void setUp() {
         mContext = InstrumentationRegistry.getTargetContext();
-        mRemoteSession2 = new RemoteMediaSession2(DEFAULT_TEST_NAME, mContext);
+        mRemoteSession2 = new RemoteMediaSession(DEFAULT_TEST_NAME, mContext);
     }
 
     @After
@@ -60,7 +60,7 @@
     @Test
     @SmallTest
     public void testGettingToken() {
-        SessionToken2 token = mRemoteSession2.getToken();
+        SessionToken token = mRemoteSession2.getToken();
         assertNotNull(token);
         assertEquals(SERVICE_PACKAGE_NAME, token.getPackageName());
     }
@@ -68,13 +68,13 @@
     @Test
     @SmallTest
     public void testCreatingController() {
-        SessionToken2 token = mRemoteSession2.getToken();
+        SessionToken token = mRemoteSession2.getToken();
         assertNotNull(token);
-        MediaController2 controller = new MediaController2(mContext, token, new Executor() {
+        MediaController controller = new MediaController(mContext, token, new Executor() {
             @Override
             public void execute(Runnable command) {
                 command.run();
             }
-        }, new MediaController2.ControllerCallback() {});
+        }, new MediaController.ControllerCallback() {});
     }
 }
diff --git a/media/version-compat-tests/current/service/src/androidTest/AndroidManifest.xml b/media/version-compat-tests/current/service/src/androidTest/AndroidManifest.xml
index ece9e33..608fbeb 100644
--- a/media/version-compat-tests/current/service/src/androidTest/AndroidManifest.xml
+++ b/media/version-compat-tests/current/service/src/androidTest/AndroidManifest.xml
@@ -42,7 +42,7 @@
             </intent-filter>
         </service>
 
-        <service android:name="androidx.media.test.service.MediaSession2ProviderService">
+        <service android:name="androidx.media.test.service.MediaSessionProviderService">
             <intent-filter>
                 <!-- Keep sync with CommonConstants.java -->
                 <action android:name="androidx.media.test.action.MEDIA_SESSION2" />
@@ -56,15 +56,15 @@
             </intent-filter>
         </service>
 
-        <service android:name="androidx.media.test.service.MockMediaSessionService2">
+        <service android:name="androidx.media.test.service.MockMediaSessionService">
             <intent-filter>
-                <action android:name="android.media.MediaSessionService2" />
+                <action android:name="androidx.media2.MediaSessionService" />
             </intent-filter>
         </service>
 
-        <service android:name="androidx.media.test.service.MockMediaLibraryService2">
+        <service android:name="androidx.media.test.service.MockMediaLibraryService">
             <intent-filter>
-                <action android:name="android.media.MediaLibraryService2" />
+                <action android:name="androidx.media2.MediaLibraryService" />
             </intent-filter>
         </service>
 
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaSession2ProviderService.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaSession2ProviderService.java
deleted file mode 100644
index 0d323a3..0000000
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaSession2ProviderService.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media.test.service;
-
-import static androidx.media.test.lib.CommonConstants.ACTION_MEDIA_SESSION2;
-import static androidx.media.test.lib.CommonConstants.INDEX_FOR_NULL_ITEM;
-import static androidx.media.test.lib.CommonConstants.INDEX_FOR_UNKONWN_ITEM;
-import static androidx.media.test.lib.CommonConstants.KEY_AUDIO_ATTRIBUTES;
-import static androidx.media.test.lib.CommonConstants.KEY_BUFFERED_POSITION;
-import static androidx.media.test.lib.CommonConstants.KEY_BUFFERING_STATE;
-import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_POSITION;
-import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_VOLUME;
-import static androidx.media.test.lib.CommonConstants.KEY_MAX_VOLUME;
-import static androidx.media.test.lib.CommonConstants.KEY_MEDIA_ITEM;
-import static androidx.media.test.lib.CommonConstants.KEY_METADATA;
-import static androidx.media.test.lib.CommonConstants.KEY_PLAYER_STATE;
-import static androidx.media.test.lib.CommonConstants.KEY_PLAYLIST;
-import static androidx.media.test.lib.CommonConstants.KEY_SPEED;
-import static androidx.media.test.lib.CommonConstants.KEY_VOLUME_CONTROL_TYPE;
-import static androidx.media.test.lib.MediaSession2Constants
-        .TEST_CONTROLLER_CALLBACK_SESSION_REJECTS;
-import static androidx.media.test.lib.MediaSession2Constants.TEST_GET_SESSION_ACTIVITY;
-import static androidx.media.test.lib.MediaSession2Constants
-        .TEST_ON_PLAYLIST_METADATA_CHANGED_SESSION_SET_PLAYLIST;
-
-import android.app.PendingIntent;
-import android.app.Service;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.support.mediacompat.testlib.IRemoteMediaSession2;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.media.AudioAttributesCompat;
-import androidx.media.test.lib.MockActivity;
-import androidx.media.test.lib.TestUtils;
-import androidx.media.test.lib.TestUtils.SyncHandler;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaUtils2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
-import androidx.versionedparcelable.ParcelImpl;
-import androidx.versionedparcelable.ParcelUtils;
-
-import java.io.FileDescriptor;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Executor;
-
-/**
- * A Service that creates {@link MediaSession2} and calls its methods according to the client app's
- * requests.
- */
-public class MediaSession2ProviderService extends Service {
-    private static final String TAG = "MediaSession2ProviderService";
-
-    Map<String, MediaSession2> mSession2Map = new HashMap<>();
-    RemoteMediaSession2Stub mSession2Binder;
-
-    SyncHandler mHandler;
-    Executor mExecutor;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mSession2Binder = new RemoteMediaSession2Stub();
-        mHandler = new SyncHandler(getMainLooper());
-        mExecutor = new Executor() {
-            @Override
-            public void execute(Runnable command) {
-                mHandler.post(command);
-            }
-        };
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        if (ACTION_MEDIA_SESSION2.equals(intent.getAction())) {
-            return mSession2Binder;
-        }
-        return null;
-    }
-
-    @Override
-    public void onDestroy() {
-        for (MediaSession2 session2 : mSession2Map.values()) {
-            session2.close();
-        }
-    }
-
-    private class RemoteMediaSession2Stub extends IRemoteMediaSession2.Stub {
-        @Override
-        public void create(final String sessionId) throws RemoteException {
-            final MediaSession2.Builder builder =
-                    new MediaSession2.Builder(MediaSession2ProviderService.this, new MockPlayer(0))
-                            .setId(sessionId);
-
-            switch (sessionId) {
-                case TEST_GET_SESSION_ACTIVITY: {
-                    final Intent sessionActivity = new Intent(MediaSession2ProviderService.this,
-                            MockActivity.class);
-                    PendingIntent pendingIntent = PendingIntent.getActivity(
-                            MediaSession2ProviderService.this,
-                            0 /* requestCode */,
-                            sessionActivity, 0 /* flags */);
-                    builder.setSessionActivity(pendingIntent);
-                    break;
-                }
-                case TEST_CONTROLLER_CALLBACK_SESSION_REJECTS: {
-                    builder.setSessionCallback(mExecutor, new MediaSession2.SessionCallback() {
-                        @Override
-                        public SessionCommandGroup2 onConnect(MediaSession2 session,
-                                MediaSession2.ControllerInfo controller) {
-                            return null;
-                        }
-                    });
-                    break;
-                }
-                case TEST_ON_PLAYLIST_METADATA_CHANGED_SESSION_SET_PLAYLIST: {
-                    builder.setSessionCallback(mExecutor, new MediaSession2.SessionCallback() {
-                        @Override
-                        public SessionCommandGroup2 onConnect(MediaSession2 session,
-                                MediaSession2.ControllerInfo controller) {
-                            SessionCommandGroup2 commands = new SessionCommandGroup2.Builder()
-                                    .addCommand(new SessionCommand2(
-                                            SessionCommand2
-                                                    .COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA))
-                                    .build();
-                            return commands;
-                        }
-                    });
-                    break;
-                }
-            }
-
-            try {
-                mHandler.postAndSync(new Runnable() {
-                    @Override
-                    public void run() {
-                        MediaSession2 session2 = builder.build();
-                        mSession2Map.put(sessionId, session2);
-                    }
-                });
-            } catch (InterruptedException ex) {
-                Log.e(TAG, "InterruptedException occurred while creating MediaSession2", ex);
-            }
-        }
-
-        ////////////////////////////////////////////////////////////////////////////////
-        // MediaSession2 methods
-        ////////////////////////////////////////////////////////////////////////////////
-
-        @Override
-        public ParcelImpl getToken(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            return session2 != null
-                    ? MediaUtils2.toParcelable(session2.getToken()) : null;
-        }
-
-        @Override
-        public Bundle getCompatToken(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            return session2.getSessionCompat().getSessionToken().toBundle();
-        }
-
-        @Override
-        public void updatePlayer(String sessionId, @NonNull Bundle config) throws RemoteException {
-            config.setClassLoader(MediaSession2.class.getClassLoader());
-            if (config != null) {
-                config.setClassLoader(MediaSession2.class.getClassLoader());
-            }
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            session2.updatePlayer(createMockPlayer(config));
-        }
-
-        private SessionPlayer2 createMockPlayer(Bundle config) {
-            SessionPlayer2 player;
-            if (config.containsKey(KEY_VOLUME_CONTROL_TYPE)) {
-                // Remote player
-                player = new MockRemotePlayer(
-                        config.getInt(KEY_VOLUME_CONTROL_TYPE),
-                        config.getInt(KEY_MAX_VOLUME),
-                        config.getInt(KEY_CURRENT_VOLUME));
-            } else {
-                // Local player
-                MockPlayer localPlayer = new MockPlayer(0);
-                localPlayer.mLastPlayerState = config.getInt(KEY_PLAYER_STATE);
-                localPlayer.mLastBufferingState = config.getInt(KEY_BUFFERING_STATE);
-                localPlayer.mCurrentPosition = config.getLong(KEY_CURRENT_POSITION);
-                localPlayer.mBufferedPosition = config.getLong(KEY_BUFFERED_POSITION);
-                localPlayer.mPlaybackSpeed = config.getFloat(KEY_SPEED);
-
-                localPlayer.mPlaylist = MediaTestUtils.playlistFromParcelableList(
-                        config.getParcelableArrayList(KEY_PLAYLIST), false /* createItem */);
-                localPlayer.mCurrentMediaItem = MediaItem2.fromBundle(
-                        config.getBundle(KEY_MEDIA_ITEM));
-                localPlayer.mMetadata = ParcelUtils.getVersionedParcelable(config, KEY_METADATA);
-                player = localPlayer;
-            }
-            player.setAudioAttributes(
-                    AudioAttributesCompat.fromBundle(
-                            config.getBundle(KEY_AUDIO_ATTRIBUTES)));
-            return player;
-        }
-
-        @Override
-        public void broadcastCustomCommand(String sessionId, Bundle command, Bundle args)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            session2.broadcastCustomCommand(SessionCommand2.fromBundle(command), args);
-        }
-
-        @Override
-        public void sendCustomCommand(String sessionId, Bundle controller, Bundle command,
-                Bundle args) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            ControllerInfo info = MediaTestUtils.getTestControllerInfo(session2);
-            session2.sendCustomCommand(info, SessionCommand2.fromBundle(command), args);
-        }
-
-        @Override
-        public void close(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            session2.close();
-        }
-
-        @Override
-        public void setAllowedCommands(String sessionId, Bundle controller, Bundle commands)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            ControllerInfo info = MediaTestUtils.getTestControllerInfo(session2);
-            session2.setAllowedCommands(info, SessionCommandGroup2.fromBundle(commands));
-        }
-
-        @Override
-        public void notifyRoutesInfoChanged(String sessionId, Bundle controller,
-                List<Bundle> routes) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            ControllerInfo info = MediaTestUtils.getTestControllerInfo(session2);
-            session2.notifyRoutesInfoChanged(info, routes);
-        }
-
-        @Override
-        public void setCustomLayout(String sessionId, Bundle controller, List<Bundle> layout)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            ControllerInfo info = MediaTestUtils.getTestControllerInfo(session2);
-            session2.setCustomLayout(info, MediaTestUtils.buttonListFromBundleList(layout));
-        }
-
-        ////////////////////////////////////////////////////////////////////////////////
-        // MockPlayer methods
-        ////////////////////////////////////////////////////////////////////////////////
-
-        @Override
-        public void setPlayerState(String sessionId, int state) {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mLastPlayerState = state;
-        }
-
-        @Override
-        public void setCurrentPosition(String sessionId, long pos) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mCurrentPosition = pos;
-        }
-
-        @Override
-        public void setBufferedPosition(String sessionId, long pos) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mBufferedPosition = pos;
-        }
-
-        @Override
-        public void setDuration(String sessionId, long duration) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mDuration = duration;
-        }
-
-        @Override
-        public void setPlaybackSpeed(String sessionId, float speed) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mPlaybackSpeed = speed;
-        }
-
-        @Override
-        public void notifySeekCompleted(String sessionId, long pos) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifySeekCompleted(pos);
-        }
-
-        @Override
-        public void notifyBufferingStateChanged(String sessionId, int itemIndex, int buffState)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyBufferingStateChanged(
-                    player.getPlaylist().get(itemIndex), buffState);
-        }
-
-        @Override
-        public void notifyPlayerStateChanged(String sessionId, int state) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyPlayerStateChanged(state);
-        }
-
-        @Override
-        public void notifyPlaybackSpeedChanged(String sessionId, float speed)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyPlaybackSpeedChanged(speed);
-        }
-
-        @Override
-        public void notifyCurrentMediaItemChanged(String sessionId, int index)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            switch (index) {
-                case INDEX_FOR_UNKONWN_ITEM:
-                    player.notifyCurrentMediaItemChanged(
-                            new FileMediaItem2.Builder(new FileDescriptor()).build());
-                    break;
-                case INDEX_FOR_NULL_ITEM:
-                    player.notifyCurrentMediaItemChanged(null);
-                    break;
-                default:
-                    player.notifyCurrentMediaItemChanged(
-                            player.getPlaylist().get(index));
-                    break;
-            }
-        }
-
-        @Override
-        public void notifyAudioAttributesChanged(String sessionId, Bundle attrs)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyAudioAttributesChanged(AudioAttributesCompat.fromBundle(attrs));
-        }
-
-        ////////////////////////////////////////////////////////////////////////////////
-        // MockPlaylistAgent methods
-        ////////////////////////////////////////////////////////////////////////////////
-
-        @Override
-        public void setPlaylist(String sessionId, List<Bundle> playlist)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-
-            List<MediaItem2> list = new ArrayList<>();
-            for (Bundle bundle : playlist) {
-                list.add(MediaItem2.fromBundle(bundle));
-            }
-            player.mPlaylist = list;
-        }
-
-        @Override
-        public void createAndSetDummyPlaylist(String sessionId, int size) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-
-            List<MediaItem2> list = new ArrayList<>();
-            for (int i = 0; i < size; i++) {
-                list.add(new MediaItem2.Builder()
-                        .setMetadata(new MediaMetadata2.Builder()
-                                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID,
-                                        TestUtils.getMediaIdInDummyList(i)).build())
-                        .build());
-            }
-            player.mPlaylist = list;
-        }
-
-        @Override
-        public void setPlaylistWithDummyItem(String sessionId, List<Bundle> playlist)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-
-            List<MediaItem2> list = new ArrayList<>();
-            for (Bundle bundle : playlist) {
-                MediaItem2 item = MediaItem2.fromBundle(bundle);
-                list.add(new FileMediaItem2.Builder(new FileDescriptor())
-                        .setMetadata(item.getMetadata())
-                        .build());
-            }
-            player.mPlaylist = list;
-        }
-
-        @Override
-        public void setPlaylistMetadata(String sessionId, Bundle metadata)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mMetadata = MediaMetadata2.fromBundle(metadata);
-        }
-
-        @Override
-        public void setShuffleMode(String sessionId, int shuffleMode)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mShuffleMode = shuffleMode;
-        }
-
-        @Override
-        public void setRepeatMode(String sessionId, int repeatMode) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mRepeatMode = repeatMode;
-        }
-
-        @Override
-        public void setCurrentMediaItem(String sessionId, int index)
-                throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.mCurrentMediaItem = player.mPlaylist.get(index);
-        }
-
-        @Override
-        public void notifyPlaylistChanged(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyPlaylistChanged();
-        }
-
-        @Override
-        public void notifyPlaylistMetadataChanged(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyPlaylistMetadataChanged();
-        }
-
-        @Override
-        public void notifyShuffleModeChanged(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyShuffleModeChanged();
-        }
-
-        @Override
-        public void notifyRepeatModeChanged(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyRepeatModeChanged();
-        }
-
-        @Override
-        public void notifyPlaybackCompleted(String sessionId) throws RemoteException {
-            MediaSession2 session2 = mSession2Map.get(sessionId);
-            MockPlayer player = (MockPlayer) session2.getPlayer();
-            player.notifyPlaybackCompleted();
-        }
-    }
-}
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaSessionProviderService.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaSessionProviderService.java
new file mode 100644
index 0000000..a371c5e
--- /dev/null
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaSessionProviderService.java
@@ -0,0 +1,506 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media.test.service;
+
+import static androidx.media.test.lib.CommonConstants.ACTION_MEDIA_SESSION2;
+import static androidx.media.test.lib.CommonConstants.INDEX_FOR_NULL_ITEM;
+import static androidx.media.test.lib.CommonConstants.INDEX_FOR_UNKONWN_ITEM;
+import static androidx.media.test.lib.CommonConstants.KEY_AUDIO_ATTRIBUTES;
+import static androidx.media.test.lib.CommonConstants.KEY_BUFFERED_POSITION;
+import static androidx.media.test.lib.CommonConstants.KEY_BUFFERING_STATE;
+import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_POSITION;
+import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_VOLUME;
+import static androidx.media.test.lib.CommonConstants.KEY_MAX_VOLUME;
+import static androidx.media.test.lib.CommonConstants.KEY_MEDIA_ITEM;
+import static androidx.media.test.lib.CommonConstants.KEY_METADATA;
+import static androidx.media.test.lib.CommonConstants.KEY_PLAYER_STATE;
+import static androidx.media.test.lib.CommonConstants.KEY_PLAYLIST;
+import static androidx.media.test.lib.CommonConstants.KEY_SPEED;
+import static androidx.media.test.lib.CommonConstants.KEY_VOLUME_CONTROL_TYPE;
+import static androidx.media.test.lib.MediaSessionConstants
+        .TEST_CONTROLLER_CALLBACK_SESSION_REJECTS;
+import static androidx.media.test.lib.MediaSessionConstants.TEST_GET_SESSION_ACTIVITY;
+import static androidx.media.test.lib.MediaSessionConstants
+        .TEST_ON_PLAYLIST_METADATA_CHANGED_SESSION_SET_PLAYLIST;
+
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.support.mediacompat.testlib.IRemoteMediaSession;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.media.AudioAttributesCompat;
+import androidx.media.test.lib.MockActivity;
+import androidx.media.test.lib.TestUtils;
+import androidx.media.test.lib.TestUtils.SyncHandler;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaUtils;
+import androidx.media2.ParcelImplListSlice;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
+import androidx.versionedparcelable.ParcelImpl;
+import androidx.versionedparcelable.ParcelUtils;
+
+import java.io.FileDescriptor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executor;
+
+/**
+ * A Service that creates {@link MediaSession} and calls its methods according to the client app's
+ * requests.
+ */
+public class MediaSessionProviderService extends Service {
+    private static final String TAG = "MediaSessionProviderService";
+
+    Map<String, MediaSession> mSessionMap = new HashMap<>();
+    RemoteMediaSessionStub mSessionBinder;
+
+    SyncHandler mHandler;
+    Executor mExecutor;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        mSessionBinder = new RemoteMediaSessionStub();
+        mHandler = new SyncHandler(getMainLooper());
+        mExecutor = new Executor() {
+            @Override
+            public void execute(Runnable command) {
+                mHandler.post(command);
+            }
+        };
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (ACTION_MEDIA_SESSION2.equals(intent.getAction())) {
+            return mSessionBinder;
+        }
+        return null;
+    }
+
+    @Override
+    public void onDestroy() {
+        for (MediaSession session : mSessionMap.values()) {
+            session.close();
+        }
+    }
+
+    private class RemoteMediaSessionStub extends IRemoteMediaSession.Stub {
+        @Override
+        public void create(final String sessionId) throws RemoteException {
+            final MediaSession.Builder builder =
+                    new MediaSession.Builder(MediaSessionProviderService.this, new MockPlayer(0))
+                            .setId(sessionId);
+
+            switch (sessionId) {
+                case TEST_GET_SESSION_ACTIVITY: {
+                    final Intent sessionActivity = new Intent(MediaSessionProviderService.this,
+                            MockActivity.class);
+                    PendingIntent pendingIntent = PendingIntent.getActivity(
+                            MediaSessionProviderService.this,
+                            0 /* requestCode */,
+                            sessionActivity, 0 /* flags */);
+                    builder.setSessionActivity(pendingIntent);
+                    break;
+                }
+                case TEST_CONTROLLER_CALLBACK_SESSION_REJECTS: {
+                    builder.setSessionCallback(mExecutor, new MediaSession.SessionCallback() {
+                        @Override
+                        public SessionCommandGroup onConnect(MediaSession session,
+                                MediaSession.ControllerInfo controller) {
+                            return null;
+                        }
+                    });
+                    break;
+                }
+                case TEST_ON_PLAYLIST_METADATA_CHANGED_SESSION_SET_PLAYLIST: {
+                    builder.setSessionCallback(mExecutor, new MediaSession.SessionCallback() {
+                        @Override
+                        public SessionCommandGroup onConnect(MediaSession session,
+                                MediaSession.ControllerInfo controller) {
+                            SessionCommandGroup commands = new SessionCommandGroup.Builder()
+                                    .addCommand(new SessionCommand(
+                                            SessionCommand
+                                                    .COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA))
+                                    .build();
+                            return commands;
+                        }
+                    });
+                    break;
+                }
+            }
+
+            try {
+                mHandler.postAndSync(new Runnable() {
+                    @Override
+                    public void run() {
+                        MediaSession session = builder.build();
+                        mSessionMap.put(sessionId, session);
+                    }
+                });
+            } catch (InterruptedException ex) {
+                Log.e(TAG, "InterruptedException occurred while creating MediaSession", ex);
+            }
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////
+        // MediaSession methods
+        ////////////////////////////////////////////////////////////////////////////////
+
+        @Override
+        public ParcelImpl getToken(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            return session != null
+                    ? MediaUtils.toParcelable(session.getToken()) : null;
+        }
+
+        @Override
+        public Bundle getCompatToken(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            return session.getSessionCompat().getSessionToken().toBundle();
+        }
+
+        @Override
+        public void updatePlayer(String sessionId, @NonNull Bundle config) throws RemoteException {
+            config.setClassLoader(MediaSession.class.getClassLoader());
+            if (config != null) {
+                config.setClassLoader(MediaSession.class.getClassLoader());
+            }
+            MediaSession session = mSessionMap.get(sessionId);
+            session.updatePlayer(createMockPlayer(config));
+        }
+
+        private SessionPlayer createMockPlayer(Bundle config) {
+            SessionPlayer player;
+            if (config.containsKey(KEY_VOLUME_CONTROL_TYPE)) {
+                // Remote player
+                player = new MockRemotePlayer(
+                        config.getInt(KEY_VOLUME_CONTROL_TYPE),
+                        config.getInt(KEY_MAX_VOLUME),
+                        config.getInt(KEY_CURRENT_VOLUME));
+            } else {
+                // Local player
+                MockPlayer localPlayer = new MockPlayer(0);
+                localPlayer.mLastPlayerState = config.getInt(KEY_PLAYER_STATE);
+                localPlayer.mLastBufferingState = config.getInt(KEY_BUFFERING_STATE);
+                localPlayer.mCurrentPosition = config.getLong(KEY_CURRENT_POSITION);
+                localPlayer.mBufferedPosition = config.getLong(KEY_BUFFERED_POSITION);
+                localPlayer.mPlaybackSpeed = config.getFloat(KEY_SPEED);
+
+                ParcelImplListSlice listSlice = config.getParcelable(KEY_PLAYLIST);
+                if (listSlice != null) {
+                    localPlayer.mPlaylist = MediaTestUtils.convertToMediaItems(listSlice.getList(),
+                            false /* createItem */);
+                }
+                ParcelImpl currentItem = config.getParcelable(KEY_MEDIA_ITEM);
+                localPlayer.mCurrentMediaItem = (currentItem == null)
+                        ? null : (MediaItem) MediaUtils.fromParcelable(currentItem);
+                localPlayer.mMetadata = ParcelUtils.getVersionedParcelable(config, KEY_METADATA);
+                player = localPlayer;
+            }
+            player.setAudioAttributes(
+                    AudioAttributesCompat.fromBundle(
+                            config.getBundle(KEY_AUDIO_ATTRIBUTES)));
+            return player;
+        }
+
+        @Override
+        public void broadcastCustomCommand(String sessionId, ParcelImpl command, Bundle args)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            session.broadcastCustomCommand(
+                    (SessionCommand) MediaUtils.fromParcelable(command), args);
+        }
+
+        @Override
+        public void sendCustomCommand(String sessionId, Bundle controller, ParcelImpl command,
+                Bundle args) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            ControllerInfo info = MediaTestUtils.getTestControllerInfo(session);
+            session.sendCustomCommand(info, (SessionCommand) MediaUtils.fromParcelable(command),
+                    args);
+        }
+
+        @Override
+        public void close(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            session.close();
+        }
+
+        @Override
+        public void setAllowedCommands(String sessionId, Bundle controller, ParcelImpl commands)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            ControllerInfo info = MediaTestUtils.getTestControllerInfo(session);
+            session.setAllowedCommands(info,
+                    (SessionCommandGroup) MediaUtils.fromParcelable(commands));
+        }
+
+        @Override
+        public void setCustomLayout(String sessionId, Bundle controller, List<ParcelImpl> layout)
+                throws RemoteException {
+            if (layout == null) {
+                return;
+            }
+            MediaSession session = mSessionMap.get(sessionId);
+            ControllerInfo info = MediaTestUtils.getTestControllerInfo(session);
+            List<MediaSession.CommandButton> buttons = new ArrayList<>();
+            for (ParcelImpl parcel : layout) {
+                if (parcel != null) {
+                    buttons.add((MediaSession.CommandButton) ParcelUtils.fromParcelable(parcel));
+                }
+            }
+            session.setCustomLayout(info, buttons);
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////
+        // MockPlayer methods
+        ////////////////////////////////////////////////////////////////////////////////
+
+        @Override
+        public void setPlayerState(String sessionId, int state) {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mLastPlayerState = state;
+        }
+
+        @Override
+        public void setCurrentPosition(String sessionId, long pos) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mCurrentPosition = pos;
+        }
+
+        @Override
+        public void setBufferedPosition(String sessionId, long pos) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mBufferedPosition = pos;
+        }
+
+        @Override
+        public void setDuration(String sessionId, long duration) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mDuration = duration;
+        }
+
+        @Override
+        public void setPlaybackSpeed(String sessionId, float speed) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mPlaybackSpeed = speed;
+        }
+
+        @Override
+        public void notifySeekCompleted(String sessionId, long pos) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifySeekCompleted(pos);
+        }
+
+        @Override
+        public void notifyBufferingStateChanged(String sessionId, int itemIndex, int buffState)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyBufferingStateChanged(
+                    player.getPlaylist().get(itemIndex), buffState);
+        }
+
+        @Override
+        public void notifyPlayerStateChanged(String sessionId, int state) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyPlayerStateChanged(state);
+        }
+
+        @Override
+        public void notifyPlaybackSpeedChanged(String sessionId, float speed)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyPlaybackSpeedChanged(speed);
+        }
+
+        @Override
+        public void notifyCurrentMediaItemChanged(String sessionId, int index)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            switch (index) {
+                case INDEX_FOR_UNKONWN_ITEM:
+                    player.notifyCurrentMediaItemChanged(
+                            new FileMediaItem.Builder(new FileDescriptor()).build());
+                    break;
+                case INDEX_FOR_NULL_ITEM:
+                    player.notifyCurrentMediaItemChanged(null);
+                    break;
+                default:
+                    player.notifyCurrentMediaItemChanged(
+                            player.getPlaylist().get(index));
+                    break;
+            }
+        }
+
+        @Override
+        public void notifyAudioAttributesChanged(String sessionId, Bundle attrs)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyAudioAttributesChanged(AudioAttributesCompat.fromBundle(attrs));
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////
+        // MockPlaylistAgent methods
+        ////////////////////////////////////////////////////////////////////////////////
+
+        @Override
+        public void setPlaylist(String sessionId, List<ParcelImpl> playlist)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mPlaylist = MediaTestUtils.convertToMediaItems(playlist, false /* createItem */);
+        }
+
+        @Override
+        public void createAndSetDummyPlaylist(String sessionId, int size) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+
+            List<MediaItem> list = new ArrayList<>();
+            for (int i = 0; i < size; i++) {
+                list.add(new MediaItem.Builder()
+                        .setMetadata(new MediaMetadata.Builder()
+                                .putString(MediaMetadata.METADATA_KEY_MEDIA_ID,
+                                        TestUtils.getMediaIdInDummyList(i)).build())
+                        .build());
+            }
+            player.mPlaylist = list;
+        }
+
+        @Override
+        public void setPlaylistWithDummyItem(String sessionId, List<ParcelImpl> playlist)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+
+            List<MediaItem> list = new ArrayList<>();
+            for (ParcelImpl parcel : playlist) {
+                MediaItem item = MediaUtils.fromParcelable(parcel);
+                list.add(new FileMediaItem.Builder(new FileDescriptor())
+                        .setMetadata(item.getMetadata())
+                        .build());
+            }
+            player.mPlaylist = list;
+        }
+
+        @Override
+        public void setPlaylistMetadata(String sessionId, ParcelImpl metadata)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mMetadata = MediaUtils.fromParcelable(metadata);
+        }
+
+        @Override
+        public void setPlaylistMetadataWithLargeBitmaps(String sessionId, int count, int width,
+                int height) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+
+            MediaMetadata.Builder builder = new MediaMetadata.Builder();
+            for (int i = 0; i < count; i++) {
+                builder.putBitmap(TestUtils.getMediaIdInDummyList(i), bitmap);
+            }
+            player.mMetadata = builder.build();
+        }
+
+        @Override
+        public void setShuffleMode(String sessionId, int shuffleMode)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mShuffleMode = shuffleMode;
+        }
+
+        @Override
+        public void setRepeatMode(String sessionId, int repeatMode) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mRepeatMode = repeatMode;
+        }
+
+        @Override
+        public void setCurrentMediaItem(String sessionId, int index)
+                throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.mCurrentMediaItem = player.mPlaylist.get(index);
+        }
+
+        @Override
+        public void notifyPlaylistChanged(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyPlaylistChanged();
+        }
+
+        @Override
+        public void notifyPlaylistMetadataChanged(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyPlaylistMetadataChanged();
+        }
+
+        @Override
+        public void notifyShuffleModeChanged(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyShuffleModeChanged();
+        }
+
+        @Override
+        public void notifyRepeatModeChanged(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyRepeatModeChanged();
+        }
+
+        @Override
+        public void notifyPlaybackCompleted(String sessionId) throws RemoteException {
+            MediaSession session = mSessionMap.get(sessionId);
+            MockPlayer player = (MockPlayer) session.getPlayer();
+            player.notifyPlaybackCompleted();
+        }
+    }
+}
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaTestUtils.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaTestUtils.java
index 91f7776..d690928 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaTestUtils.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MediaTestUtils.java
@@ -22,18 +22,18 @@
 import static org.junit.Assert.assertTrue;
 
 import android.os.Bundle;
-import android.os.Parcelable;
 import android.util.Log;
 
 import androidx.media.MediaBrowserServiceCompat.BrowserRoot;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.ControllerInfo;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaUtils;
+import androidx.versionedparcelable.ParcelImpl;
 
 import java.io.FileDescriptor;
 import java.util.ArrayList;
@@ -54,14 +54,14 @@
 //     * @param id
 //     * @return
 //     */
-//    public static SessionToken2 getServiceToken(Context context, String id) {
+//    public static SessionToken getServiceToken(Context context, String id) {
 //        switch (id) {
 //            case MockMediaSessionService2.ID:
-//                return new SessionToken2(context, new ComponentName(
+//                return new SessionToken(context, new ComponentName(
 //                        context.getPackageName(), MockMediaSessionService2.class.getName()));
-//            case MockMediaLibraryService2.ID:
-//                return new SessionToken2(context, new ComponentName(
-//                        context.getPackageName(), MockMediaLibraryService2.class.getName()));
+//            case MockMediaLibraryService.ID:
+//                return new SessionToken(context, new ComponentName(
+//                        context.getPackageName(), MockMediaLibraryService.class.getName()));
 //        }
 //        fail("Unknown id=" + id);
 //        return null;
@@ -75,8 +75,8 @@
      * @param size list size
      * @return the newly created playlist
      */
-    public static List<MediaItem2> createPlaylist(int size) {
-        final List<MediaItem2> list = new ArrayList<>();
+    public static List<MediaItem> createPlaylist(int size) {
+        final List<MediaItem> list = new ArrayList<>();
         String caller = Thread.currentThread().getStackTrace()[1].getMethodName();
         for (int i = 0; i < size; i++) {
             list.add(createMediaItem(caller + "_item_" + (size + 1)));
@@ -84,13 +84,13 @@
         return list;
     }
 
-    public static MediaItem2 createMediaItem(String id) {
-        return new FileMediaItem2.Builder(new FileDescriptor())
-                .setMetadata(new MediaMetadata2.Builder()
-                        .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, id)
-                        .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE,
-                                MediaMetadata2.BROWSABLE_TYPE_NONE)
-                        .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+    public static MediaItem createMediaItem(String id) {
+        return new FileMediaItem.Builder(new FileDescriptor())
+                .setMetadata(new MediaMetadata.Builder()
+                        .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, id)
+                        .putLong(MediaMetadata.METADATA_KEY_BROWSABLE,
+                                MediaMetadata.BROWSABLE_TYPE_NONE)
+                        .putLong(MediaMetadata.METADATA_KEY_PLAYABLE, 1)
                         .build())
                 .build();
     }
@@ -110,8 +110,8 @@
      * @return the newly created media item
      * @see #createMetadata()
      */
-    public static MediaItem2 createMediaItemWithMetadata() {
-        return new FileMediaItem2.Builder(new FileDescriptor())
+    public static MediaItem createMediaItemWithMetadata() {
+        return new FileMediaItem.Builder(new FileDescriptor())
                 .setMetadata(createMetadata())
                 .build();
     }
@@ -123,58 +123,47 @@
      *
      * @return the newly created media item
      */
-    public static MediaMetadata2 createMetadata() {
+    public static MediaMetadata createMetadata() {
         String mediaId = Thread.currentThread().getStackTrace()[1].getMethodName();
-        return new MediaMetadata2.Builder()
-                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId)
-                .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE, MediaMetadata2.BROWSABLE_TYPE_NONE)
-                .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+        return new MediaMetadata.Builder()
+                .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId)
+                .putLong(MediaMetadata.METADATA_KEY_BROWSABLE, MediaMetadata.BROWSABLE_TYPE_NONE)
+                .putLong(MediaMetadata.METADATA_KEY_PLAYABLE, 1)
                 .build();
     }
 
-    public static List<MediaItem2> playlistFromParcelableList(List<Parcelable> parcelables,
+    public static List<MediaItem> convertToMediaItems(List<ParcelImpl> list,
             boolean createItem) {
-        if (parcelables == null) {
+        if (list == null) {
             return null;
         }
 
-        List<MediaItem2> result = new ArrayList<>();
+        List<MediaItem> result = new ArrayList<>();
         if (createItem) {
-            for (Parcelable itemBundle : parcelables) {
-                MediaItem2 item = MediaItem2.fromBundle((Bundle) itemBundle);
-                result.add(new FileMediaItem2.Builder(new FileDescriptor())
+            for (ParcelImpl parcel : list) {
+                MediaItem item = MediaUtils.fromParcelable(parcel);
+                result.add(new FileMediaItem.Builder(new FileDescriptor())
                         .setMetadata(item.getMetadata())
                         .build());
             }
         } else {
-            for (Parcelable itemBundle : parcelables) {
-                result.add(MediaItem2.fromBundle((Bundle) itemBundle));
+            for (ParcelImpl parcel : list) {
+                result.add((MediaItem) MediaUtils.fromParcelable(parcel));
             }
         }
         return result;
     }
 
-    public static List<CommandButton> buttonListFromBundleList(List<Bundle> bundleList) {
-        if (bundleList == null) {
+    public static ControllerInfo getTestControllerInfo(MediaSession session) {
+        if (session == null) {
             return null;
         }
-        List<CommandButton> result = new ArrayList<>();
-        for (int i = 0; i < bundleList.size(); i++) {
-            result.add(CommandButton.fromBundle(bundleList.get(i)));
-        }
-        return result;
-    }
-
-    public static ControllerInfo getTestControllerInfo(MediaSession2 session2) {
-        if (session2 == null) {
-            return null;
-        }
-        for (ControllerInfo info : session2.getConnectedControllers()) {
+        for (ControllerInfo info : session.getConnectedControllers()) {
             if (CLIENT_PACKAGE_NAME.equals(info.getPackageName())) {
                 return info;
             }
         }
-        Log.e(TAG, "Test controller was not found in connected controllers. session=" + session2);
+        Log.e(TAG, "Test controller was not found in connected controllers. session=" + session);
         return null;
     }
 
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaLibraryService2.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaLibraryService.java
similarity index 69%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaLibraryService2.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaLibraryService.java
index 780672b..1cc4c06 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaLibraryService2.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaLibraryService.java
@@ -18,44 +18,44 @@
 
 import static android.support.mediacompat.testlib.util.IntentUtil.CLIENT_PACKAGE_NAME;
 
-import static androidx.media.test.lib.MediaBrowser2Constants.CUSTOM_ACTION;
-import static androidx.media.test.lib.MediaBrowser2Constants.CUSTOM_ACTION_ASSERT_PARAMS;
-import static androidx.media.test.lib.MediaBrowser2Constants.CUSTOM_ACTION_EXTRAS;
-import static androidx.media.test.lib.MediaBrowser2Constants.GET_CHILDREN_RESULT;
-import static androidx.media.test.lib.MediaBrowser2Constants.LONG_LIST_COUNT;
-import static androidx.media.test.lib.MediaBrowser2Constants.MEDIA_ID_GET_INVALID_ITEM;
-import static androidx.media.test.lib.MediaBrowser2Constants.MEDIA_ID_GET_ITEM;
-import static androidx.media.test.lib.MediaBrowser2Constants.MEDIA_ID_GET_NULL_ITEM;
-import static androidx.media.test.lib.MediaBrowser2Constants.NOTIFY_CHILDREN_CHANGED_EXTRAS;
-import static androidx.media.test.lib.MediaBrowser2Constants.NOTIFY_CHILDREN_CHANGED_ITEM_COUNT;
-import static androidx.media.test.lib.MediaBrowser2Constants.PARENT_ID;
-import static androidx.media.test.lib.MediaBrowser2Constants.PARENT_ID_ERROR;
-import static androidx.media.test.lib.MediaBrowser2Constants.PARENT_ID_LONG_LIST;
-import static androidx.media.test.lib.MediaBrowser2Constants.ROOT_EXTRAS;
-import static androidx.media.test.lib.MediaBrowser2Constants.ROOT_ID;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY_EMPTY_RESULT;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY_LONG_LIST;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_QUERY_TAKES_TIME;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_RESULT;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_RESULT_COUNT;
-import static androidx.media.test.lib.MediaBrowser2Constants.SEARCH_TIME_IN_MS;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants.CUSTOM_ACTION;
+import static androidx.media.test.lib.MediaBrowserConstants.CUSTOM_ACTION_ASSERT_PARAMS;
+import static androidx.media.test.lib.MediaBrowserConstants.CUSTOM_ACTION_EXTRAS;
+import static androidx.media.test.lib.MediaBrowserConstants.GET_CHILDREN_RESULT;
+import static androidx.media.test.lib.MediaBrowserConstants.LONG_LIST_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.MEDIA_ID_GET_INVALID_ITEM;
+import static androidx.media.test.lib.MediaBrowserConstants.MEDIA_ID_GET_ITEM;
+import static androidx.media.test.lib.MediaBrowserConstants.MEDIA_ID_GET_NULL_ITEM;
+import static androidx.media.test.lib.MediaBrowserConstants.NOTIFY_CHILDREN_CHANGED_EXTRAS;
+import static androidx.media.test.lib.MediaBrowserConstants.NOTIFY_CHILDREN_CHANGED_ITEM_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.PARENT_ID;
+import static androidx.media.test.lib.MediaBrowserConstants.PARENT_ID_ERROR;
+import static androidx.media.test.lib.MediaBrowserConstants.PARENT_ID_LONG_LIST;
+import static androidx.media.test.lib.MediaBrowserConstants.ROOT_EXTRAS;
+import static androidx.media.test.lib.MediaBrowserConstants.ROOT_ID;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY_EMPTY_RESULT;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY_LONG_LIST;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_QUERY_TAKES_TIME;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_RESULT;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_RESULT_COUNT;
+import static androidx.media.test.lib.MediaBrowserConstants.SEARCH_TIME_IN_MS;
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL_WITH_NON_SUBSCRIBED_ID;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE;
-import static androidx.media.test.lib.MediaBrowser2Constants
+import static androidx.media.test.lib.MediaBrowserConstants
         .SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE_WITH_NON_SUBSCRIBED_ID;
 import static androidx.media.test.service.MediaTestUtils.assertEqualLibraryParams;
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaMetadata2.BROWSABLE_TYPE_MIXED;
-import static androidx.media2.MediaMetadata2.BROWSABLE_TYPE_NONE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_BROWSABLE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_MEDIA_ID;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_PLAYABLE;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_MIXED;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_NONE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_BROWSABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_ID;
+import static androidx.media2.MediaMetadata.METADATA_KEY_PLAYABLE;
 
 import android.app.Service;
 import android.content.Context;
@@ -67,14 +67,14 @@
 import androidx.annotation.GuardedBy;
 import androidx.media.test.lib.TestUtils;
 import androidx.media.test.lib.TestUtils.SyncHandler;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaLibraryService2;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaLibraryService;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
 import androidx.versionedparcelable.ParcelUtils;
 
 import java.util.ArrayList;
@@ -83,13 +83,13 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
-public class MockMediaLibraryService2 extends MediaLibraryService2 {
+public class MockMediaLibraryService extends MediaLibraryService {
     /**
      * ID of the session that this service will create.
      */
     public static final String ID = "TestLibrary";
-    public static final MediaItem2 ROOT_ITEM = new MediaItem2.Builder()
-            .setMetadata(new MediaMetadata2.Builder()
+    public static final MediaItem ROOT_ITEM = new MediaItem.Builder()
+            .setMetadata(new MediaMetadata.Builder()
                     .putString(METADATA_KEY_MEDIA_ID, ROOT_ID)
                     .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_MIXED)
                     .putLong(METADATA_KEY_PLAYABLE, 0)
@@ -101,9 +101,9 @@
 
     private static final String TAG = "MockMediaLibrarySvc2";
 
-    @GuardedBy("MockMediaLibraryService2.class")
+    @GuardedBy("MockMediaLibraryService.class")
     private static boolean sAssertLibraryParams;
-    @GuardedBy("MockMediaLibraryService2.class")
+    @GuardedBy("MockMediaLibraryService.class")
     private static LibraryParams sExpectedParams;
 
     MediaLibrarySession mSession;
@@ -122,7 +122,7 @@
     @Override
     public void onDestroy() {
         super.onDestroy();
-        synchronized (MockMediaLibraryService2.class) {
+        synchronized (MockMediaLibraryService.class) {
             sAssertLibraryParams = false;
             sExpectedParams = null;
         }
@@ -153,7 +153,7 @@
         };
 
         MediaLibrarySessionCallback callback = registry.getSessionCallback();
-        mSession = new MediaLibrarySession.Builder(MockMediaLibraryService2.this, player, executor,
+        mSession = new MediaLibrarySession.Builder(MockMediaLibraryService.this, player, executor,
                 callback != null ? callback : new TestLibrarySessionCallback())
                 .setId(ID)
                 .build();
@@ -170,7 +170,7 @@
     }
 
     public static void setAssertLibraryParams(LibraryParams expectedParams) {
-        synchronized (MockMediaLibraryService2.class) {
+        synchronized (MockMediaLibraryService.class) {
             sAssertLibraryParams = true;
             sExpectedParams = expectedParams;
         }
@@ -179,14 +179,14 @@
     private class TestLibrarySessionCallback extends MediaLibrarySessionCallback {
 
         @Override
-        public SessionCommandGroup2 onConnect(MediaSession2 session,
+        public SessionCommandGroup onConnect(MediaSession session,
                 ControllerInfo controller) {
             if (!CLIENT_PACKAGE_NAME.equals(controller.getPackageName())) {
                 return null;
             }
-            SessionCommandGroup2 group = super.onConnect(session, controller);
-            group.addCommand(new SessionCommand2(CUSTOM_ACTION, null));
-            group.addCommand(new SessionCommand2(CUSTOM_ACTION_ASSERT_PARAMS, null));
+            SessionCommandGroup group = super.onConnect(session, controller);
+            group.addCommand(new SessionCommand(CUSTOM_ACTION, null));
+            group.addCommand(new SessionCommand(CUSTOM_ACTION_ASSERT_PARAMS, null));
             return group;
         }
 
@@ -207,12 +207,12 @@
                     return new LibraryResult(RESULT_CODE_SUCCESS);
                 case MEDIA_ID_GET_INVALID_ITEM:
                     // No browsable
-                    MediaMetadata2 metadata =  new MediaMetadata2.Builder()
-                            .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId)
-                            .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+                    MediaMetadata metadata =  new MediaMetadata.Builder()
+                            .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId)
+                            .putLong(MediaMetadata.METADATA_KEY_PLAYABLE, 1)
                             .build();
                     return new LibraryResult(RESULT_CODE_SUCCESS,
-                            new MediaItem2.Builder().setMetadata(metadata).build(), null);
+                            new MediaItem.Builder().setMetadata(metadata).build(), null);
             }
             return new LibraryResult(RESULT_CODE_BAD_VALUE);
         }
@@ -226,16 +226,16 @@
                 return new LibraryResult(RESULT_CODE_SUCCESS,
                         getPaginatedResult(GET_CHILDREN_RESULT, page, pageSize), null);
             } else if (PARENT_ID_LONG_LIST.equals(parentId)) {
-                List<MediaItem2> list = new ArrayList<>(LONG_LIST_COUNT);
-                MediaItem2.Builder builder = new MediaItem2.Builder();
+                List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
+                MediaItem.Builder builder = new MediaItem.Builder();
                 for (int i = 0; i < LONG_LIST_COUNT; i++) {
                     list.add(builder
-                            .setMetadata(new MediaMetadata2.Builder()
-                                    .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID,
+                            .setMetadata(new MediaMetadata.Builder()
+                                    .putString(MediaMetadata.METADATA_KEY_MEDIA_ID,
                                             TestUtils.getMediaIdInDummyList(i))
-                                    .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE,
-                                            MediaMetadata2.BROWSABLE_TYPE_NONE)
-                                    .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+                                    .putLong(MediaMetadata.METADATA_KEY_BROWSABLE,
+                                            MediaMetadata.BROWSABLE_TYPE_NONE)
+                                    .putLong(MediaMetadata.METADATA_KEY_PLAYABLE, 1)
                                     .build())
                             .build());
                 }
@@ -244,7 +244,7 @@
                 return new LibraryResult(RESULT_CODE_BAD_VALUE);
             }
             // Includes the case of PARENT_ID_NO_CHILDREN.
-            return new LibraryResult(RESULT_CODE_SUCCESS, new ArrayList<MediaItem2>(), null);
+            return new LibraryResult(RESULT_CODE_SUCCESS, new ArrayList<MediaItem>(), null);
         }
 
         @Override
@@ -282,14 +282,14 @@
                 return new LibraryResult(RESULT_CODE_SUCCESS,
                         getPaginatedResult(SEARCH_RESULT, page, pageSize), null);
             } else if (SEARCH_QUERY_LONG_LIST.equals(query)) {
-                List<MediaItem2> list = new ArrayList<>(LONG_LIST_COUNT);
-                MediaItem2.Builder builder = new MediaItem2.Builder();
+                List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
+                MediaItem.Builder builder = new MediaItem.Builder();
                 for (int i = 0; i < LONG_LIST_COUNT; i++) {
                     list.add(createMediaItem(TestUtils.getMediaIdInDummyList(i)));
                 }
                 return new LibraryResult(RESULT_CODE_SUCCESS, list, null);
             } else if (SEARCH_QUERY_EMPTY_RESULT.equals(query)) {
-                return new LibraryResult(RESULT_CODE_SUCCESS, new ArrayList<MediaItem2>(), null);
+                return new LibraryResult(RESULT_CODE_SUCCESS, new ArrayList<MediaItem>(), null);
             } else {
                 // SEARCH_QUERY_ERROR will be handled here.
                 return new LibraryResult(RESULT_CODE_BAD_VALUE);
@@ -333,23 +333,23 @@
         }
 
         @Override
-        public MediaSession2.SessionResult onCustomCommand(MediaSession2 session,
-                ControllerInfo controller, SessionCommand2 customCommand, Bundle args) {
+        public MediaSession.SessionResult onCustomCommand(MediaSession session,
+                ControllerInfo controller, SessionCommand customCommand, Bundle args) {
             switch (customCommand.getCustomCommand()) {
                 case CUSTOM_ACTION:
-                    return new MediaSession2.SessionResult(
+                    return new MediaSession.SessionResult(
                             RESULT_CODE_SUCCESS, CUSTOM_ACTION_EXTRAS);
                 case CUSTOM_ACTION_ASSERT_PARAMS:
                     LibraryParams params = ParcelUtils.getVersionedParcelable(args,
                             CUSTOM_ACTION_ASSERT_PARAMS);
                     setAssertLibraryParams(params);
-                    return new MediaSession2.SessionResult(RESULT_CODE_SUCCESS, null);
+                    return new MediaSession.SessionResult(RESULT_CODE_SUCCESS, null);
             }
-            return new MediaSession2.SessionResult(RESULT_CODE_BAD_VALUE, null);
+            return new MediaSession.SessionResult(RESULT_CODE_BAD_VALUE, null);
         }
 
         private void assertLibraryParams(LibraryParams params) {
-            synchronized (MockMediaLibraryService2.class) {
+            synchronized (MockMediaLibraryService.class) {
                 if (sAssertLibraryParams) {
                     assertEqualLibraryParams(sExpectedParams, params);
                 }
@@ -357,7 +357,7 @@
         }
     }
 
-    private List<MediaItem2> getPaginatedResult(List<String> items, int page, int pageSize) {
+    private List<MediaItem> getPaginatedResult(List<String> items, int page, int pageSize) {
         if (items == null) {
             return null;
         } else if (items.size() == 0) {
@@ -377,21 +377,21 @@
                     + totalItemCount + ", page=" + page + ", pageSize=" + pageSize, ex);
         }
 
-        // Create a list of MediaItem2 from the list of media IDs.
-        List<MediaItem2> result = new ArrayList<>();
+        // Create a list of MediaItem from the list of media IDs.
+        List<MediaItem> result = new ArrayList<>();
         for (int i = 0; i < paginatedMediaIdList.size(); i++) {
             result.add(createMediaItem(paginatedMediaIdList.get(i)));
         }
         return result;
     }
 
-    private MediaItem2 createMediaItem(String mediaId) {
-        MediaMetadata2 metadata =  new MediaMetadata2.Builder()
-                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId)
-                .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
-                .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+    private MediaItem createMediaItem(String mediaId) {
+        MediaMetadata metadata =  new MediaMetadata.Builder()
+                .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId)
+                .putLong(MediaMetadata.METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
+                .putLong(MediaMetadata.METADATA_KEY_PLAYABLE, 1)
                 .build();
-        return new MediaItem2.Builder()
+        return new MediaItem.Builder()
                 .setMetadata(metadata)
                 .build();
     }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaSessionService2.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaSessionService.java
similarity index 75%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaSessionService2.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaSessionService.java
index 1d83ad3..d870664 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaSessionService2.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockMediaSessionService.java
@@ -20,18 +20,18 @@
 
 import android.text.TextUtils;
 
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSessionService2;
-import androidx.media2.SessionCommandGroup2;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSessionService;
+import androidx.media2.SessionCommandGroup;
 
 import java.util.concurrent.Executors;
 
-public class MockMediaSessionService2 extends MediaSessionService2 {
+public class MockMediaSessionService extends MediaSessionService {
     /**
      * ID of the session that this service will create.
      */
     public static final String ID = "TestSession";
-    public MediaSession2 mSession2;
+    public MediaSession mSession2;
 
     @Override
     public void onCreate() {
@@ -46,7 +46,7 @@
     }
 
     @Override
-    public MediaSession2 onGetSession() {
+    public MediaSession onGetSession() {
         TestServiceRegistry registry = TestServiceRegistry.getInstance();
         TestServiceRegistry.OnGetSessionHandler onGetSessionHandler =
                 registry.getOnGetSessionHandler();
@@ -55,8 +55,8 @@
         }
 
         if (mSession2 == null) {
-            MediaSession2.SessionCallback callback = registry.getSessionCallback();
-            mSession2 = new MediaSession2.Builder(MockMediaSessionService2.this, new MockPlayer(0))
+            MediaSession.SessionCallback callback = registry.getSessionCallback();
+            mSession2 = new MediaSession.Builder(MockMediaSessionService.this, new MockPlayer(0))
                     .setId(ID)
                     .setSessionCallback(Executors.newSingleThreadExecutor(),
                             callback != null ? callback : new TestSessionCallback())
@@ -65,10 +65,10 @@
         return mSession2;
     }
 
-    private class TestSessionCallback extends MediaSession2.SessionCallback {
+    private class TestSessionCallback extends MediaSession.SessionCallback {
         @Override
-        public SessionCommandGroup2 onConnect(MediaSession2 session,
-                MediaSession2.ControllerInfo controller) {
+        public SessionCommandGroup onConnect(MediaSession session,
+                MediaSession.ControllerInfo controller) {
             if (TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName())) {
                 return super.onConnect(session, controller);
             }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockPlayer.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockPlayer.java
index faada20..b5f3583 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockPlayer.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockPlayer.java
@@ -18,9 +18,9 @@
 
 import androidx.core.util.Pair;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.SessionPlayer2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.SessionPlayer;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -30,9 +30,9 @@
 import java.util.concurrent.Executor;
 
 /**
- * A mock implementation of {@link SessionPlayer2} for testing.
+ * A mock implementation of {@link SessionPlayer} for testing.
  */
-public class MockPlayer extends SessionPlayer2 {
+public class MockPlayer extends SessionPlayer {
     public final CountDownLatch mCountDownLatch;
     public final boolean mChangePlayerStateWithTransportControl;
 
@@ -49,10 +49,10 @@
     public @BuffState int mLastBufferingState;
     public long mDuration;
 
-    public List<MediaItem2> mPlaylist;
-    public MediaMetadata2 mMetadata;
-    public MediaItem2 mCurrentMediaItem;
-    public MediaItem2 mItem;
+    public List<MediaItem> mPlaylist;
+    public MediaMetadata mMetadata;
+    public MediaItem mCurrentMediaItem;
+    public MediaItem mItem;
     public int mIndex = -1;
     public @RepeatMode int mRepeatMode = -1;
     public @ShuffleMode int mShuffleMode = -1;
@@ -81,7 +81,7 @@
     private MockPlayer(int count, boolean changePlayerStateWithTransportControl) {
         mCountDownLatch = (count > 0) ? new CountDownLatch(count) : null;
         mChangePlayerStateWithTransportControl = changePlayerStateWithTransportControl;
-        // This prevents MS2#play() from triggering SessionPlayer2#prepare().
+        // This prevents MS2#play() from triggering SessionPlayer#prepare().
         mLastPlayerState = PLAYER_STATE_PAUSED;
 
         // Sets default audio attributes to prevent setVolume() from being called with the play().
@@ -185,7 +185,7 @@
         }
     }
 
-    public void notifyCurrentMediaItemChanged(final MediaItem2 item) {
+    public void notifyCurrentMediaItemChanged(final MediaItem item) {
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
             final PlayerCallback callback = pair.first;
@@ -198,7 +198,7 @@
         }
     }
 
-    public void notifyBufferingStateChanged(final MediaItem2 item,
+    public void notifyBufferingStateChanged(final MediaItem item,
             final @BuffState int buffState) {
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
@@ -277,12 +277,12 @@
     /////////////////////////////////////////////////////////////////////////////////
 
     @Override
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         return mPlaylist;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setMediaItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(MediaItem item) {
         mItem = item;
         ArrayList list = new ArrayList<>();
         list.add(item);
@@ -291,7 +291,7 @@
 
     @Override
     public ListenableFuture<PlayerResult> setPlaylist(
-            List<MediaItem2> list, MediaMetadata2 metadata) {
+            List<MediaItem> list, MediaMetadata metadata) {
         mSetPlaylistCalled = true;
         mPlaylist = list;
         mMetadata = metadata;
@@ -300,12 +300,12 @@
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         return mMetadata;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata metadata) {
         mUpdatePlaylistMetadataCalled = true;
         mMetadata = metadata;
         mCountDownLatch.countDown();
@@ -313,12 +313,12 @@
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return mCurrentMediaItem;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem item) {
         mAddPlaylistItemCalled = true;
         mIndex = index;
         mItem = item;
@@ -327,7 +327,7 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem item) {
         mRemovePlaylistItemCalled = true;
         mItem = item;
         mCountDownLatch.countDown();
@@ -335,7 +335,7 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem item) {
         mReplacePlaylistItemCalled = true;
         mIndex = index;
         mItem = item;
@@ -344,7 +344,7 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem item) {
         mSkipToPlaylistItemCalled = true;
         mItem = item;
         mCountDownLatch.countDown();
@@ -433,8 +433,8 @@
     }
 
     public void notifyPlaylistChanged() {
-        final List<MediaItem2> list = mPlaylist;
-        final MediaMetadata2 metadata = mMetadata;
+        final List<MediaItem> list = mPlaylist;
+        final MediaMetadata metadata = mMetadata;
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
             final PlayerCallback callback = pair.first;
@@ -448,7 +448,7 @@
     }
 
     public void notifyPlaylistMetadataChanged() {
-        final MediaMetadata2 metadata = mMetadata;
+        final MediaMetadata metadata = mMetadata;
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
             final PlayerCallback callback = pair.first;
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockRemotePlayer.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockRemotePlayer.java
index 2aff58e..191fea1 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockRemotePlayer.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/MockRemotePlayer.java
@@ -17,9 +17,9 @@
 package androidx.media.test.service;
 
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.RemoteSessionPlayer2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.RemoteSessionPlayer;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -27,9 +27,9 @@
 import java.util.concurrent.CountDownLatch;
 
 /**
- * Mock implementation of {@link RemoteSessionPlayer2}.
+ * Mock implementation of {@link RemoteSessionPlayer}.
  */
-public class MockRemotePlayer extends RemoteSessionPlayer2 {
+public class MockRemotePlayer extends RemoteSessionPlayer {
     public final CountDownLatch mLatch = new CountDownLatch(1);
     public boolean mSetVolumeToCalled;
     public boolean mAdjustVolumeCalled;
@@ -138,8 +138,8 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setPlaylist(List<MediaItem2> list,
-            MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> setPlaylist(List<MediaItem> list,
+            MediaMetadata metadata) {
         return null;
     }
 
@@ -149,22 +149,22 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setMediaItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem item) {
         return null;
     }
 
@@ -179,12 +179,12 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata metadata) {
         return null;
     }
 
@@ -199,12 +199,12 @@
     }
 
     @Override
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         return null;
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         return null;
     }
 
@@ -219,7 +219,7 @@
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return null;
     }
 
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaBrowser2.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaBrowser.java
similarity index 76%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaBrowser2.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaBrowser.java
index a81a4d75..03e2030 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaBrowser2.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaBrowser.java
@@ -22,35 +22,35 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.media2.MediaBrowser2;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaUtils2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaBrowser;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaUtils;
+import androidx.media2.SessionToken;
 
 /**
- * Represents remote {@link MediaBrowser2} the client app's MediaController2Service.
- * Users can run {@link MediaBrowser2} methods remotely with this object.
+ * Represents remote {@link MediaBrowser} the client app's MediaControllerService.
+ * Users can run {@link MediaBrowser} methods remotely with this object.
  */
-public class RemoteMediaBrowser2 extends RemoteMediaController2 {
+public class RemoteMediaBrowser extends RemoteMediaController {
 
     /**
-     * Create a {@link MediaBrowser2} in the client app.
+     * Create a {@link MediaBrowser} in the client app.
      * Should NOT be called main thread.
      *
      * @param waitForConnection true if the remote browser needs to wait for the connection,
      *                          false otherwise.
      */
-    public RemoteMediaBrowser2(Context context, SessionToken2 token, boolean waitForConnection) {
+    public RemoteMediaBrowser(Context context, SessionToken token, boolean waitForConnection) {
         super(context, token, waitForConnection);
     }
 
     /**
-     * {@link MediaBrowser2} methods.
+     * {@link MediaBrowser} methods.
      */
 
     public void getLibraryRoot(@Nullable LibraryParams params) {
         try {
-            mBinder.getLibraryRoot(mControllerId, MediaUtils2.toParcelable(params));
+            mBinder.getLibraryRoot(mControllerId, MediaUtils.toParcelable(params));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call getLibraryRoot()");
         }
@@ -58,7 +58,7 @@
 
     public void subscribe(@NonNull String parentId, @Nullable LibraryParams params) {
         try {
-            mBinder.subscribe(mControllerId, parentId, MediaUtils2.toParcelable(params));
+            mBinder.subscribe(mControllerId, parentId, MediaUtils.toParcelable(params));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call subscribe()");
         }
@@ -76,7 +76,7 @@
             @Nullable LibraryParams params) {
         try {
             mBinder.getChildren(mControllerId, parentId, page, pageSize,
-                    MediaUtils2.toParcelable(params));
+                    MediaUtils.toParcelable(params));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call getChildren()");
         }
@@ -92,7 +92,7 @@
 
     public void search(@NonNull String query, @Nullable LibraryParams params) {
         try {
-            mBinder.search(mControllerId, query, MediaUtils2.toParcelable(params));
+            mBinder.search(mControllerId, query, MediaUtils.toParcelable(params));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call search()");
         }
@@ -102,7 +102,7 @@
             @Nullable LibraryParams params) {
         try {
             mBinder.getSearchResult(mControllerId, query, page, pageSize,
-                    MediaUtils2.toParcelable(params));
+                    MediaUtils.toParcelable(params));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call getSearchResult()");
         }
@@ -113,16 +113,16 @@
     ////////////////////////////////////////////////////////////////////////////////
 
     /**
-     * Create a {@link MediaBrowser2} in the client app.
+     * Create a {@link MediaBrowser} in the client app.
      * Should be used after successful connection through {@link #connect()}.
      *
      * @param waitForConnection true if this method needs to wait for the connection,
      *                          false otherwise.
      */
-    void create(SessionToken2 token, boolean waitForConnection) {
+    void create(SessionToken token, boolean waitForConnection) {
         try {
             mBinder.create(true /* isBrowser */, mControllerId,
-                    MediaUtils2.toParcelable(token), waitForConnection);
+                    MediaUtils.toParcelable(token), waitForConnection);
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to create default browser with given token.");
         }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaController2.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaController.java
similarity index 81%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaController2.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaController.java
index 6781f63..c4b35db 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaController2.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaController.java
@@ -30,18 +30,18 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.support.mediacompat.testlib.IRemoteMediaController2;
+import android.support.mediacompat.testlib.IRemoteMediaController;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaUtils2;
-import androidx.media2.Rating2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaController;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaUtils;
+import androidx.media2.Rating;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionToken;
 
 import java.util.List;
 import java.util.UUID;
@@ -49,33 +49,33 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Represents remote {@link MediaController2} the client app's MediaController2ProviderService.
- * Users can run {@link MediaController2} methods remotely with this object.
+ * Represents remote {@link MediaController} the client app's MediaControllerProviderService.
+ * Users can run {@link MediaController} methods remotely with this object.
  */
-public class RemoteMediaController2 {
-    static final String TAG = "RemoteMediaController2";
+public class RemoteMediaController {
+    static final String TAG = "RemoteMediaController";
 
     final String mControllerId;
     final Context mContext;
     final CountDownLatch mCountDownLatch;
 
     ServiceConnection mServiceConnection;
-    IRemoteMediaController2 mBinder;
+    IRemoteMediaController mBinder;
 
     /**
-     * Create a {@link MediaController2} in the client app.
+     * Create a {@link MediaController} in the client app.
      * Should NOT be called main thread.
      *
      * @param waitForConnection true if the remote controller needs to wait for the connection,
      *                          false otherwise.
      */
-    public RemoteMediaController2(Context context, SessionToken2 token, boolean waitForConnection) {
+    public RemoteMediaController(Context context, SessionToken token, boolean waitForConnection) {
         mContext = context;
         mControllerId = UUID.randomUUID().toString();
         mCountDownLatch = new CountDownLatch(1);
         mServiceConnection = new MyServiceConnection();
         if (!connect()) {
-            fail("Failed to connect to the MediaController2ProviderService.");
+            fail("Failed to connect to the MediaControllerProviderService.");
         }
         create(token, waitForConnection);
     }
@@ -86,12 +86,12 @@
     }
 
     ////////////////////////////////////////////////////////////////////////////////
-    // MediaController2 methods
+    // MediaController methods
     ////////////////////////////////////////////////////////////////////////////////
 
-    public SessionToken2 getConnectedSessionToken() {
+    public SessionToken getConnectedSessionToken() {
         try {
-            return MediaUtils2.fromParcelable(mBinder.getConnectedSessionToken(mControllerId));
+            return MediaUtils.fromParcelable(mBinder.getConnectedSessionToken(mControllerId));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call getConnectedSessionToken()");
             return null;
@@ -138,9 +138,9 @@
         }
     }
 
-    public void setPlaylist(@NonNull List<String> list, @Nullable MediaMetadata2 metadata) {
+    public void setPlaylist(@NonNull List<String> list, @Nullable MediaMetadata metadata) {
         try {
-            mBinder.setPlaylist(mControllerId, list, MediaUtils2.toParcelable(metadata));
+            mBinder.setPlaylist(mControllerId, list, MediaUtils.toParcelable(metadata));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call setPlaylist()");
         }
@@ -148,14 +148,14 @@
 
     /**
      * Client app will automatically create a playlist of size {@param size},
-     * and call MediaController2#setPlaylist() with the list.
+     * and call MediaController#setPlaylist() with the list.
      *
      * Each item's media ID will be {@link TestUtils#getMediaIdInDummyList(int)}.
      */
-    public void createAndSetDummyPlaylist(int size, @Nullable MediaMetadata2 metadata) {
+    public void createAndSetDummyPlaylist(int size, @Nullable MediaMetadata metadata) {
         try {
             mBinder.createAndSetDummyPlaylist(mControllerId, size,
-                    MediaUtils2.toParcelable(metadata));
+                    MediaUtils.toParcelable(metadata));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call createAndSetDummyPlaylist()");
         }
@@ -169,9 +169,9 @@
         }
     }
 
-    public void updatePlaylistMetadata(@Nullable MediaMetadata2 metadata) {
+    public void updatePlaylistMetadata(@Nullable MediaMetadata metadata) {
         try {
-            mBinder.updatePlaylistMetadata(mControllerId, MediaUtils2.toParcelable(metadata));
+            mBinder.updatePlaylistMetadata(mControllerId, MediaUtils.toParcelable(metadata));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call updatePlaylistMetadata()");
         }
@@ -257,9 +257,9 @@
         }
     }
 
-    public void sendCustomCommand(@NonNull SessionCommand2 command, @Nullable Bundle args) {
+    public void sendCustomCommand(@NonNull SessionCommand command, @Nullable Bundle args) {
         try {
-            mBinder.sendCustomCommand(mControllerId, command.toBundle(), args);
+            mBinder.sendCustomCommand(mControllerId, MediaUtils.toParcelable(command), args);
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call sendCustomCommand()");
         }
@@ -345,38 +345,14 @@
         }
     }
 
-    public void setRating(@NonNull String mediaId, @NonNull Rating2 rating) {
+    public void setRating(@NonNull String mediaId, @NonNull Rating rating) {
         try {
-            mBinder.setRating(mControllerId, mediaId, MediaUtils2.toParcelable(rating));
+            mBinder.setRating(mControllerId, mediaId, MediaUtils.toParcelable(rating));
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to call setRating()");
         }
     }
 
-    public void subscribeRoutesInfo() {
-        try {
-            mBinder.subscribeRoutesInfo(mControllerId);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call subscribeRoutesInfo()");
-        }
-    }
-
-    public void unsubscribeRoutesInfo() {
-        try {
-            mBinder.unsubscribeRoutesInfo(mControllerId);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call unsubscribeRoutesInfo()");
-        }
-    }
-
-    public void selectRoute(@NonNull Bundle route) {
-        try {
-            mBinder.selectRoute(mControllerId, route);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to call selectRoute()");
-        }
-    }
-
     public void close() {
         try {
             mBinder.close(mControllerId);
@@ -390,7 +366,7 @@
     ////////////////////////////////////////////////////////////////////////////////
 
     /**
-     * Connects to client app's MediaController2ProviderService.
+     * Connects to client app's MediaControllerProviderService.
      * Should NOT be called main thread.
      *
      * @return true if connected successfully, false if failed to connect.
@@ -403,7 +379,7 @@
         try {
             bound = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
         } catch (Exception ex) {
-            Log.e(TAG, "Failed to bind to the MediaController2ProviderService.");
+            Log.e(TAG, "Failed to bind to the MediaControllerProviderService.");
         }
 
         if (bound) {
@@ -417,7 +393,7 @@
     }
 
     /**
-     * Disconnects from client app's MediaController2ProviderService.
+     * Disconnects from client app's MediaControllerProviderService.
      */
     private void disconnect() {
         if (mServiceConnection != null) {
@@ -427,16 +403,16 @@
     }
 
     /**
-     * Create a {@link MediaController2} in the client app.
+     * Create a {@link MediaController} in the client app.
      * Should be used after successful connection through {@link #connect()}.
      *
      * @param waitForConnection true if this method needs to wait for the connection,
      *                          false otherwise.
      */
-    void create(SessionToken2 token, boolean waitForConnection) {
+    void create(SessionToken token, boolean waitForConnection) {
         try {
             mBinder.create(false /* isBrowser */, mControllerId,
-                    MediaUtils2.toParcelable(token), waitForConnection);
+                    MediaUtils.toParcelable(token), waitForConnection);
         } catch (RemoteException ex) {
             Log.e(TAG, "Failed to create default controller with given token.");
         }
@@ -445,14 +421,14 @@
     class MyServiceConnection implements ServiceConnection {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
-            Log.d(TAG, "Connected to client app's MediaController2ProviderService.");
-            mBinder = IRemoteMediaController2.Stub.asInterface(service);
+            Log.d(TAG, "Connected to client app's MediaControllerProviderService.");
+            mBinder = IRemoteMediaController.Stub.asInterface(service);
             mCountDownLatch.countDown();
         }
 
         @Override
         public void onServiceDisconnected(ComponentName name) {
-            Log.d(TAG, "Disconnected from client app's MediaController2ProviderService.");
+            Log.d(TAG, "Disconnected from client app's MediaControllerProviderService.");
         }
     }
 }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/SyncListenableFuture.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/SyncListenableFuture.java
index 4c21a89..7cf1c3a 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/SyncListenableFuture.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/SyncListenableFuture.java
@@ -16,10 +16,10 @@
 
 package androidx.media.test.service;
 
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_SUCCESS;
 
-import androidx.media2.MediaItem2;
-import androidx.media2.SessionPlayer2;
+import androidx.media2.MediaItem;
+import androidx.media2.SessionPlayer;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -31,11 +31,11 @@
 /**
  * Implements {@link ListenableFuture} for synchrous calls.
  */
-public class SyncListenableFuture implements ListenableFuture<SessionPlayer2.PlayerResult> {
-    private final SessionPlayer2.PlayerResult mResult;
+public class SyncListenableFuture implements ListenableFuture<SessionPlayer.PlayerResult> {
+    private final SessionPlayer.PlayerResult mResult;
 
-    SyncListenableFuture(MediaItem2 item) {
-        mResult = new SessionPlayer2.PlayerResult(RESULT_CODE_SUCCESS, item);
+    SyncListenableFuture(MediaItem item) {
+        mResult = new SessionPlayer.PlayerResult(RESULT_CODE_SUCCESS, item);
     }
 
     @Override
@@ -59,12 +59,12 @@
     }
 
     @Override
-    public SessionPlayer2.PlayerResult get() throws InterruptedException, ExecutionException {
+    public SessionPlayer.PlayerResult get() throws InterruptedException, ExecutionException {
         return mResult;
     }
 
     @Override
-    public SessionPlayer2.PlayerResult get(long l, TimeUnit timeUnit)
+    public SessionPlayer.PlayerResult get(long l, TimeUnit timeUnit)
             throws InterruptedException, ExecutionException, TimeoutException {
         return mResult;
     }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/TestServiceRegistry.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/TestServiceRegistry.java
index 55953f0..1dbc473 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/TestServiceRegistry.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/TestServiceRegistry.java
@@ -23,14 +23,14 @@
 
 import androidx.annotation.GuardedBy;
 import androidx.media.test.lib.TestUtils.SyncHandler;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSessionService2;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSessionService;
 
 import java.util.List;
 
 /**
- * Keeps the instance of currently running {@link MockMediaSessionService2}. And also provides
+ * Keeps the instance of currently running {@link MockMediaSessionService}. And also provides
  * a way to control them in one place.
  * <p>
  * It only support only one service at a time.
@@ -42,7 +42,7 @@
     @GuardedBy("TestServiceRegistry.class")
     private static TestServiceRegistry sInstance;
     @GuardedBy("TestServiceRegistry.class")
-    private MediaSessionService2 mService;
+    private MediaSessionService mService;
     @GuardedBy("TestServiceRegistry.class")
     private SyncHandler mHandler;
     @GuardedBy("TestServiceRegistry.class")
@@ -111,7 +111,7 @@
         }
     }
 
-    public void setServiceInstance(MediaSessionService2 service) {
+    public void setServiceInstance(MediaSessionService service) {
         synchronized (TestServiceRegistry.class) {
             if (mService != null) {
                 fail("Previous service instance is still running. Clean up manually to ensure"
@@ -122,7 +122,7 @@
                 if (service != null) {
                     Log.d(TAG, "setServiceInstance(): service=" + service + ", session size="
                             + service.getSessions().size());
-                    for (MediaSession2 session : service.getSessions()) {
+                    for (MediaSession session : service.getSessions()) {
                         Log.d(TAG, "   session id=" + session.getId());
                     }
                 } else {
@@ -136,7 +136,7 @@
         }
     }
 
-    public MediaSessionService2 getServiceInstance() {
+    public MediaSessionService getServiceInstance() {
         synchronized (TestServiceRegistry.class) {
             return mService;
         }
@@ -148,12 +148,12 @@
                 if (DEBUG) {
                     Log.d(TAG, "cleanUp(): service=" + mService + ", session size="
                             + mService.getSessions().size());
-                    for (MediaSession2 session : mService.getSessions()) {
+                    for (MediaSession session : mService.getSessions()) {
                         Log.d(TAG, "   session id=" + session.getId());
                     }
                 }
                 // TODO(jaewan): Remove this, and override SessionService#onDestroy() to do this
-                List<MediaSession2> sessions = mService.getSessions();
+                List<MediaSession> sessions = mService.getSessions();
                 for (int i = 0; i < sessions.size(); i++) {
                     sessions.get(i).close();
                 }
@@ -178,6 +178,6 @@
     }
 
     public interface OnGetSessionHandler {
-        MediaSession2 onGetSession();
+        MediaSession onGetSession();
     }
 }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaBrowserServiceCompatCallbackTestWithMediaBrowser2.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaBrowserServiceCompatCallbackTestWithMediaBrowser.java
similarity index 85%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaBrowserServiceCompatCallbackTestWithMediaBrowser2.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaBrowserServiceCompatCallbackTestWithMediaBrowser.java
index acee00e..7837849 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaBrowserServiceCompatCallbackTestWithMediaBrowser2.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaBrowserServiceCompatCallbackTestWithMediaBrowser.java
@@ -18,9 +18,6 @@
 
 import static android.support.mediacompat.testlib.util.IntentUtil.CLIENT_PACKAGE_NAME;
 
-import static androidx.media.test.service.MediaTestUtils.assertEqualLibraryParams;
-import static androidx.media.test.service.MediaTestUtils.createLibraryParams;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -34,12 +31,13 @@
 import androidx.media.MediaBrowserServiceCompat;
 import androidx.media.MediaBrowserServiceCompat.BrowserRoot;
 import androidx.media.MediaBrowserServiceCompat.Result;
+import androidx.media.test.service.MediaTestUtils;
 import androidx.media.test.service.MockMediaBrowserServiceCompat;
 import androidx.media.test.service.MockMediaBrowserServiceCompat.Proxy;
-import androidx.media.test.service.RemoteMediaBrowser2;
-import androidx.media2.MediaBrowser2;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.SessionToken2;
+import androidx.media.test.service.RemoteMediaBrowser;
+import androidx.media2.MediaBrowser;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.SessionToken;
 import androidx.test.filters.SmallTest;
 
 import org.junit.After;
@@ -52,17 +50,17 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests {@link MediaBrowser2} with {@link MediaBrowserServiceCompat}.
+ * Tests {@link MediaBrowser} with {@link MediaBrowserServiceCompat}.
  */
 @SmallTest
-public class MediaBrowserServiceCompatCallbackTestWithMediaBrowser2 extends MediaSession2TestBase {
-    private SessionToken2 mToken;
+public class MediaBrowserServiceCompatCallbackTestWithMediaBrowser extends MediaSessionTestBase {
+    private SessionToken mToken;
 
     @Before
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        mToken = new SessionToken2(mContext, new ComponentName(
+        mToken = new SessionToken(mContext, new ComponentName(
                 mContext, MockMediaBrowserServiceCompat.class));
     }
 
@@ -88,7 +86,7 @@
                     Bundle rootHints) {
                 assertEquals(CLIENT_PACKAGE_NAME, clientPackageName);
                 if (rootHints.keySet().contains(testMediaId)) {
-                    assertEqualLibraryParams(testParams, rootHints);
+                    MediaTestUtils.assertEqualLibraryParams(testParams, rootHints);
                     // This should happen because getLibraryRoot() is called with testExtras.
                     latch.countDown();
                 }
@@ -97,7 +95,7 @@
             }
         });
 
-        RemoteMediaBrowser2 browser = new RemoteMediaBrowser2(mContext, mToken, true);
+        RemoteMediaBrowser browser = new RemoteMediaBrowser(mContext, mToken, true);
         browser.getLibraryRoot(testParams);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -117,7 +115,7 @@
             }
         });
 
-        RemoteMediaBrowser2 browser = new RemoteMediaBrowser2(mContext, mToken, true);
+        RemoteMediaBrowser browser = new RemoteMediaBrowser(mContext, mToken, true);
         browser.getItem(testMediaId);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -139,7 +137,7 @@
                 latch.countDown();
             }
         });
-        RemoteMediaBrowser2 browser = new RemoteMediaBrowser2(mContext, mToken, true);
+        RemoteMediaBrowser browser = new RemoteMediaBrowser(mContext, mToken, true);
         browser.getChildren(testParentId, testPage, testPageSize, null);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -169,7 +167,7 @@
                 latch.countDown();
             }
         });
-        RemoteMediaBrowser2 browser = new RemoteMediaBrowser2(mContext, mToken, true);
+        RemoteMediaBrowser browser = new RemoteMediaBrowser(mContext, mToken, true);
         browser.getChildren(testParentId, testPage, testPageSize, null);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -178,19 +176,19 @@
     public void testOnLoadChildrenCalledBySubscribe() throws InterruptedException {
         prepareLooper();
         final String testParentId = "testOnLoadChildrenCalledBySubscribe";
-        final LibraryParams testParams = createLibraryParams();
+        final LibraryParams testParams = MediaTestUtils.createLibraryParams();
         final CountDownLatch subscribeLatch = new CountDownLatch(1);
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
             public void onLoadChildren(String parentId, Result<List<MediaItem>> result,
                     Bundle option) {
                 assertEquals(testParentId, parentId);
-                assertEqualLibraryParams(testParams, option);
+                MediaTestUtils.assertEqualLibraryParams(testParams, option);
                 result.sendResult(null);
                 subscribeLatch.countDown();
             }
         });
-        RemoteMediaBrowser2 browser = new RemoteMediaBrowser2(mContext, mToken, true);
+        RemoteMediaBrowser browser = new RemoteMediaBrowser(mContext, mToken, true);
         browser.subscribe(testParentId, testParams);
         assertTrue(subscribeLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -201,7 +199,7 @@
         final String testQuery = "search_query";
         final int testPage = 2;
         final int testPageSize = 4;
-        final LibraryParams testParams = createLibraryParams();
+        final LibraryParams testParams = MediaTestUtils.createLibraryParams();
         final List<MediaItem> testFullSearchResult = createMediaItems(
                 (testPage + 1) * testPageSize + 3);
 
@@ -210,13 +208,13 @@
             @Override
             public void onSearch(String query, Bundle extras, Result<List<MediaItem>> result) {
                 assertEquals(testQuery, query);
-                assertEqualLibraryParams(testParams, extras);
+                MediaTestUtils.assertEqualLibraryParams(testParams, extras);
                 result.sendResult(testFullSearchResult);
                 latch.countDown();
             }
         });
 
-        RemoteMediaBrowser2 browser = new RemoteMediaBrowser2(mContext, mToken, true);
+        RemoteMediaBrowser browser = new RemoteMediaBrowser(mContext, mToken, true);
         browser.search(testQuery, testParams);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -227,14 +225,14 @@
         final String testQuery = "search_query";
         final int testPage = 2;
         final int testPageSize = 4;
-        final LibraryParams testParams = createLibraryParams();
+        final LibraryParams testParams = MediaTestUtils.createLibraryParams();
 
         final CountDownLatch latch = new CountDownLatch(1);
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
             public void onSearch(String query, Bundle extras, Result<List<MediaItem>> result) {
                 assertEquals(testQuery, query);
-                assertEqualLibraryParams(testParams, extras);
+                MediaTestUtils.assertEqualLibraryParams(testParams, extras);
                 assertEquals(testPage, extras.getInt(MediaBrowserCompat.EXTRA_PAGE));
                 assertEquals(testPageSize, extras.getInt(MediaBrowserCompat.EXTRA_PAGE_SIZE));
                 result.sendResult(null);
@@ -242,7 +240,7 @@
             }
         });
 
-        RemoteMediaBrowser2 browser = new RemoteMediaBrowser2(mContext, mToken, true);
+        RemoteMediaBrowser browser = new RemoteMediaBrowser(mContext, mToken, true);
         browser.getSearchResult(testQuery, testPage, testPageSize, testParams);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaLibrarySessionCallbackTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaLibrarySessionCallbackTest.java
index fab1480..18d5ed8 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaLibrarySessionCallbackTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaLibrarySessionCallbackTest.java
@@ -16,8 +16,7 @@
 
 package androidx.media.test.service.tests;
 
-import static androidx.media.test.service.MediaTestUtils.assertEqualLibraryParams;
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_SUCCESS;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -25,12 +24,12 @@
 import android.os.Build;
 
 import androidx.media.test.service.MediaTestUtils;
-import androidx.media.test.service.MockMediaLibraryService2;
+import androidx.media.test.service.MockMediaLibraryService;
 import androidx.media.test.service.MockPlayer;
-import androidx.media.test.service.RemoteMediaBrowser2;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession;
-import androidx.media2.MediaSession2;
+import androidx.media.test.service.RemoteMediaBrowser;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.MediaLibrarySession;
+import androidx.media2.MediaSession;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -46,13 +45,13 @@
 /**
  * Tests {@link MediaLibrarySession.MediaLibrarySessionCallback}.
  *
- * TODO: Make this class extend MediaSession2CallbackTest.
- * TODO: Create MediaLibrarySessionTest which extends MediaSession2Test.
+ * TODO: Make this class extend MediaSessionCallbackTest.
+ * TODO: Create MediaLibrarySessionTest which extends MediaSessionTest.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaLibrarySessionCallbackTest extends MediaSession2TestBase {
+public class MediaLibrarySessionCallbackTest extends MediaSessionTestBase {
 
     MockPlayer mPlayer;
 
@@ -80,23 +79,23 @@
                 new MediaLibrarySession.MediaLibrarySessionCallback() {
                     @Override
                     public int onSubscribe(MediaLibrarySession session,
-                            MediaSession2.ControllerInfo controller, String parentId,
+                            MediaSession.ControllerInfo controller, String parentId,
                             LibraryParams params) {
                         assertEquals(testParentId, parentId);
-                        assertEqualLibraryParams(testParams, params);
+                        MediaTestUtils.assertEqualLibraryParams(testParams, params);
                         latch.countDown();
                         return RESULT_CODE_SUCCESS;
                     }
         };
 
-        MockMediaLibraryService2 service = new MockMediaLibraryService2();
+        MockMediaLibraryService service = new MockMediaLibraryService();
         service.attachBaseContext(mContext);
 
         try (MediaLibrarySession session = new MediaLibrarySession.Builder(
                 service, mPlayer, sHandlerExecutor, sessionCallback)
                 .setId("testOnSubscribe")
                 .build()) {
-            RemoteMediaBrowser2 browser = createRemoteBrowser2(session.getToken());
+            RemoteMediaBrowser browser = createRemoteBrowser2(session.getToken());
             browser.subscribe(testParentId, testParams);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -112,21 +111,21 @@
                 new MediaLibrarySession.MediaLibrarySessionCallback() {
                     @Override
                     public int onUnsubscribe(MediaLibrarySession session,
-                            MediaSession2.ControllerInfo controller, String parentId) {
+                            MediaSession.ControllerInfo controller, String parentId) {
                         assertEquals(testParentId, parentId);
                         latch.countDown();
                         return RESULT_CODE_SUCCESS;
                     }
                 };
 
-        MockMediaLibraryService2 service = new MockMediaLibraryService2();
+        MockMediaLibraryService service = new MockMediaLibraryService();
         service.attachBaseContext(mContext);
 
         try (MediaLibrarySession session = new MediaLibrarySession.Builder(
                 service, mPlayer, sHandlerExecutor, sessionCallback)
                 .setId("testOnUnsubscribe")
                 .build()) {
-            RemoteMediaBrowser2 browser = createRemoteBrowser2(session.getToken());
+            RemoteMediaBrowser browser = createRemoteBrowser2(session.getToken());
             browser.unsubscribe(testParentId);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaMetadata2Test.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaMetadata2Test.java
deleted file mode 100644
index 0db3899..0000000
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaMetadata2Test.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media.test.service.tests;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertTrue;
-
-import static org.junit.Assert.fail;
-
-import android.os.Build;
-import android.os.Bundle;
-
-import androidx.media.test.lib.TestUtils;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaMetadata2.Builder;
-import androidx.media2.Rating2;
-import androidx.media2.ThumbRating2;
-import androidx.test.filters.SdkSuppress;
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class MediaMetadata2Test {
-    @Test
-    public void testBuilder() {
-        final String title = "title";
-        final long discNumber = 10;
-        final Rating2 rating = new ThumbRating2(true);
-
-        Builder builder = new Builder();
-        builder.putString(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, title);
-        builder.putLong(MediaMetadata2.METADATA_KEY_DISC_NUMBER, discNumber);
-        builder.putRating(MediaMetadata2.METADATA_KEY_USER_RATING, rating);
-
-        MediaMetadata2 metadata = builder.build();
-        assertEquals(title, metadata.getString(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE));
-        assertEquals(discNumber, metadata.getLong(MediaMetadata2.METADATA_KEY_DISC_NUMBER));
-        assertEquals(rating, metadata.getRating(MediaMetadata2.METADATA_KEY_USER_RATING));
-    }
-
-    @Test
-    public void testSetExtra() {
-        final Bundle extras = new Bundle();
-        extras.putString("MediaMetadata2Test", "testBuilder");
-
-        Builder builder = new Builder();
-        try {
-            builder.putLong(MediaMetadata2.METADATA_KEY_EXTRAS, 1);
-            fail();
-        } catch (IllegalArgumentException e) {
-            // expected
-        }
-        builder.setExtras(extras);
-        MediaMetadata2 metadata = builder.build();
-        assertTrue(TestUtils.equals(extras, metadata.getExtras()));
-    }
-}
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaMetadataTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaMetadataTest.java
new file mode 100644
index 0000000..ae97664
--- /dev/null
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaMetadataTest.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media.test.service.tests;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import android.graphics.Bitmap;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Parcel;
+
+import androidx.media.test.lib.TestUtils;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaMetadata.Builder;
+import androidx.media2.Rating;
+import androidx.media2.ThumbRating;
+import androidx.test.filters.SdkSuppress;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+import androidx.versionedparcelable.ParcelImpl;
+import androidx.versionedparcelable.ParcelUtils;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class MediaMetadataTest {
+    @Test
+    public void testBuilder() {
+        final String title = "title";
+        final long discNumber = 10;
+        final Rating rating = new ThumbRating(true);
+
+        Builder builder = new Builder();
+        builder.putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, title);
+        builder.putLong(MediaMetadata.METADATA_KEY_DISC_NUMBER, discNumber);
+        builder.putRating(MediaMetadata.METADATA_KEY_USER_RATING, rating);
+
+        MediaMetadata metadata = builder.build();
+        assertEquals(title, metadata.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE));
+        assertEquals(discNumber, metadata.getLong(MediaMetadata.METADATA_KEY_DISC_NUMBER));
+        assertEquals(rating, metadata.getRating(MediaMetadata.METADATA_KEY_USER_RATING));
+    }
+
+    @Test
+    public void testSetExtra() {
+        final Bundle extras = new Bundle();
+        extras.putString("MediaMetadataTest", "testBuilder");
+
+        Builder builder = new Builder();
+        try {
+            builder.putLong(MediaMetadata.METADATA_KEY_EXTRAS, 1);
+            fail();
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+        builder.setExtras(extras);
+        MediaMetadata metadata = builder.build();
+        assertTrue(TestUtils.equals(extras, metadata.getExtras()));
+    }
+
+    @Test
+    public void testParcelingWithSmallBitmaps() {
+        final int bitmapCount = 100;
+        final List<String> keyList = new ArrayList<>(bitmapCount);
+        final String bitmapKeyPrefix = "bitmap_";
+        for (int i = 0; i < bitmapCount; i++) {
+            keyList.add(bitmapKeyPrefix + i);
+        }
+
+        // A small bitmap about 160kB.
+        final int originalWidth = 200;
+        final int originalHeight = 200;
+        Bitmap testBitmap = Bitmap.createBitmap(
+                originalWidth, originalHeight, Bitmap.Config.ARGB_8888);
+
+        Builder builder = new Builder();
+        for (int i = 0; i < keyList.size(); i++) {
+            builder.putBitmap(keyList.get(i), testBitmap);
+        }
+
+        MediaMetadata metadata = builder.build();
+        ParcelImpl parcelImpl = (ParcelImpl) ParcelUtils.toParcelable(metadata);
+
+        // Bitmaps will not be scaled down since they are small.
+        Parcel parcel = Parcel.obtain();
+        parcelImpl.writeToParcel(parcel, 0 /* flags */);
+        parcel.setDataPosition(0);
+
+        MediaMetadata metadataFromParcel =
+                ParcelUtils.fromParcelable(ParcelImpl.CREATOR.createFromParcel(parcel));
+
+        // Check the bitmap list from the metadata.
+        Set<String> keySet = metadataFromParcel.keySet();
+        assertTrue(keySet.containsAll(keyList));
+        assertTrue(keyList.containsAll(keySet));
+
+        for (String key : keySet) {
+            Bitmap bitmap = metadataFromParcel.getBitmap(key);
+            assertNotNull(bitmap);
+            int newWidth = bitmap.getWidth();
+            int newHeight = bitmap.getHeight();
+            // The bitmaps should not have been scaled down.
+            assertEquals(newWidth, originalWidth);
+            assertEquals(newHeight, originalHeight);
+        }
+    }
+
+    @Test
+    public void testParcelingWithLargeBitmaps() {
+        final int bitmapCount = 100;
+        final List<String> keyList = new ArrayList<>(bitmapCount);
+        final String bitmapKeyPrefix = "bitmap_";
+        for (int i = 0; i < bitmapCount; i++) {
+            keyList.add(bitmapKeyPrefix + i);
+        }
+
+        // A large bitmap (64MB) which exceeds the binder limit.
+        final int originalWidth = 4096;
+        final int originalHeight = 4096;
+        Bitmap testBitmap = Bitmap.createBitmap(
+                originalWidth, originalHeight, Bitmap.Config.ARGB_8888);
+
+        Builder builder = new Builder();
+        for (int i = 0; i < keyList.size(); i++) {
+            builder.putBitmap(keyList.get(i), testBitmap);
+        }
+
+        MediaMetadata metadata = builder.build();
+        ParcelImpl parcelImpl = (ParcelImpl) ParcelUtils.toParcelable(metadata);
+
+        // Bitmaps will be scaled down when the metadata is written to parcel.
+        Parcel parcel = Parcel.obtain();
+        parcelImpl.writeToParcel(parcel, 0 /* flags */);
+        parcel.setDataPosition(0);
+
+        MediaMetadata metadataFromParcel =
+                ParcelUtils.fromParcelable(ParcelImpl.CREATOR.createFromParcel(parcel));
+
+        // Check the bitmap list from the metadata.
+        Set<String> keySet = metadataFromParcel.keySet();
+        assertTrue(keySet.containsAll(keyList));
+        assertTrue(keyList.containsAll(keySet));
+
+        for (String key : keySet) {
+            Bitmap bitmap = metadataFromParcel.getBitmap(key);
+            assertNotNull(bitmap);
+            int newWidth = bitmap.getWidth();
+            int newHeight = bitmap.getHeight();
+            assertTrue("Resulting bitmap (size=" + newWidth + "x" + newHeight + ") was not "
+                            + "scaled down. ",
+                    newWidth < originalWidth && newHeight < originalHeight);
+        }
+    }
+}
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2CallbackTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCallbackTest.java
similarity index 61%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2CallbackTest.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCallbackTest.java
index c5437b7..6157816 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2CallbackTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCallbackTest.java
@@ -18,8 +18,8 @@
 
 import static android.support.mediacompat.testlib.util.IntentUtil.CLIENT_PACKAGE_NAME;
 
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -34,15 +34,15 @@
 import androidx.media.test.lib.TestUtils;
 import androidx.media.test.service.MediaTestUtils;
 import androidx.media.test.service.MockPlayer;
-import androidx.media.test.service.RemoteMediaController2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.Rating2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.StarRating2;
+import androidx.media.test.service.RemoteMediaController;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.Rating;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.StarRating;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -59,13 +59,13 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests {@link MediaSession2.SessionCallback}.
+ * Tests {@link MediaSession.SessionCallback}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaSession2CallbackTest extends MediaSession2TestBase {
-    private static final String TAG = "MediaSession2CallbackTest";
+public class MediaSessionCallbackTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaSessionCallbackTest";
 
     MockPlayer mPlayer;
 
@@ -88,17 +88,17 @@
         mPlayer = new MockPlayer(1);
 
         final MockOnCommandCallback callback = new MockOnCommandCallback();
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnCommandRequest")
                 .build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.pause();
             assertFalse(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
             assertFalse(mPlayer.mPauseCalled);
             assertEquals(1, callback.commands.size());
-            assertEquals(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE,
+            assertEquals(SessionCommand.COMMAND_CODE_PLAYER_PAUSE,
                     (long) callback.commands.get(0).getCommandCode());
 
             controller.play();
@@ -106,7 +106,7 @@
             assertTrue(mPlayer.mPlayCalled);
             assertFalse(mPlayer.mPauseCalled);
             assertEquals(2, callback.commands.size());
-            assertEquals(SessionCommand2.COMMAND_CODE_PLAYER_PLAY,
+            assertEquals(SessionCommand.COMMAND_CODE_PLAYER_PLAY,
                     (long) callback.commands.get(1).getCommandCode());
         }
     }
@@ -118,11 +118,11 @@
         mPlayer = new MockPlayer(1);
 
         final List<String> list = MediaTestUtils.createMediaIds(3);
-        final List<MediaItem2> convertedList = MediaTestUtils.createPlaylist(list.size());
+        final List<MediaItem> convertedList = MediaTestUtils.createPlaylist(list.size());
 
         final MockOnCommandCallback callback = new MockOnCommandCallback() {
             @Override
-            public MediaItem2 onCreateMediaItem(MediaSession2 session,
+            public MediaItem onCreateMediaItem(MediaSession session,
                     ControllerInfo controller, String mediaId) {
                 for (int i = 0; i < list.size(); i++) {
                     if (Objects.equals(mediaId, list.get(i))) {
@@ -133,22 +133,22 @@
                 return null;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnCreateMediaItem")
                 .build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.setPlaylist(list, null);
             assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
-            List<MediaItem2> playerList = mPlayer.getPlaylist();
+            List<MediaItem> playerList = mPlayer.getPlaylist();
             assertEquals(convertedList.size(), playerList.size());
             for (int i = 0; i < playerList.size(); i++) {
                 String expected = convertedList.get(i).getMetadata().getString(
-                        MediaMetadata2.METADATA_KEY_MEDIA_ID);
+                        MediaMetadata.METADATA_KEY_MEDIA_ID);
                 String actual = playerList.get(i).getMetadata().getString(
-                        MediaMetadata2.METADATA_KEY_MEDIA_ID);
+                        MediaMetadata.METADATA_KEY_MEDIA_ID);
                 assertEquals(expected, actual);
             }
         }
@@ -158,39 +158,39 @@
     public void testOnCustomCommand() throws InterruptedException {
         prepareLooper();
         // TODO(jaewan): Need to revisit with the permission.
-        final SessionCommand2 testCommand = new SessionCommand2("testCustomCommand", null);
+        final SessionCommand testCommand = new SessionCommand("testCustomCommand", null);
         final Bundle testArgs = new Bundle();
         testArgs.putString("args", "testOnCustomCommand");
 
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
+            public SessionCommandGroup onConnect(@NonNull MediaSession session,
                     @NonNull ControllerInfo controller) {
-                SessionCommandGroup2 commands = new SessionCommandGroup2.Builder()
-                        .addAllPredefinedCommands(SessionCommand2.COMMAND_VERSION_1)
+                SessionCommandGroup commands = new SessionCommandGroup.Builder()
+                        .addAllPredefinedCommands(SessionCommand.COMMAND_VERSION_1)
                         .addCommand(testCommand)
                         .build();
                 return commands;
             }
 
             @Override
-            public MediaSession2.SessionResult onCustomCommand(MediaSession2 session,
-                    MediaSession2.ControllerInfo controller, SessionCommand2 customCommand,
+            public MediaSession.SessionResult onCustomCommand(MediaSession session,
+                    MediaSession.ControllerInfo controller, SessionCommand customCommand,
                     Bundle args) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testCommand, customCommand);
                 assertTrue(TestUtils.equals(testArgs, args));
                 latch.countDown();
-                return new MediaSession2.SessionResult(RESULT_CODE_SUCCESS, null);
+                return new MediaSession.SessionResult(RESULT_CODE_SUCCESS, null);
             }
         };
 
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnCustomCommand")
                 .build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
             controller.sendCustomCommand(testCommand, testArgs);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -200,18 +200,18 @@
     public void testOnFastForward() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onFastForward(MediaSession2 session, ControllerInfo controller) {
+            public int onFastForward(MediaSession session, ControllerInfo controller) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnFastForward").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
             controller.fastForward();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -221,18 +221,18 @@
     public void testOnRewind() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onRewind(MediaSession2 session, ControllerInfo controller) {
+            public int onRewind(MediaSession session, ControllerInfo controller) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnRewind").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
             controller.rewind();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -242,18 +242,18 @@
     public void testOnSkipForward() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onSkipForward(MediaSession2 session, ControllerInfo controller) {
+            public int onSkipForward(MediaSession session, ControllerInfo controller) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnSkipForward").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
             controller.skipForward();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -263,18 +263,18 @@
     public void testOnSkipBackward() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onSkipBackward(MediaSession2 session, ControllerInfo controller) {
+            public int onSkipBackward(MediaSession session, ControllerInfo controller) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnSkipBackward").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
             controller.skipBackward();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -286,9 +286,9 @@
         final String testQuery = "random query";
         final Bundle testExtras = TestUtils.createTestBundle();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onPlayFromSearch(MediaSession2 session, ControllerInfo controller,
+            public int onPlayFromSearch(MediaSession session, ControllerInfo controller,
                     String query, Bundle extras) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testQuery, query);
@@ -297,10 +297,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnPlayFromSearch").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.playFromSearch(testQuery, testExtras);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -313,9 +313,9 @@
         final Uri testUri = Uri.parse("foo://boo");
         final Bundle testExtras = TestUtils.createTestBundle();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onPlayFromUri(MediaSession2 session, ControllerInfo controller, Uri uri,
+            public int onPlayFromUri(MediaSession session, ControllerInfo controller, Uri uri,
                     Bundle extras) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testUri, uri);
@@ -324,11 +324,11 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnPlayFromUri")
                 .build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.playFromUri(testUri, testExtras);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -341,9 +341,9 @@
         final String testMediaId = "media_id";
         final Bundle testExtras = TestUtils.createTestBundle();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onPlayFromMediaId(MediaSession2 session, ControllerInfo controller,
+            public int onPlayFromMediaId(MediaSession session, ControllerInfo controller,
                     String mediaId, Bundle extras) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(mediaId, mediaId);
@@ -352,10 +352,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnPlayFromMediaId").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.playFromMediaId(testMediaId, testExtras);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -368,9 +368,9 @@
         final String testQuery = "random query";
         final Bundle testExtras = TestUtils.createTestBundle();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onPrepareFromSearch(MediaSession2 session, ControllerInfo controller,
+            public int onPrepareFromSearch(MediaSession session, ControllerInfo controller,
                     String query, Bundle extras) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testQuery, query);
@@ -379,10 +379,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnPrepareFromSearch").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.prepareFromSearch(testQuery, testExtras);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -395,9 +395,9 @@
         final Uri testUri = Uri.parse("foo://boo");
         final Bundle testExtras = TestUtils.createTestBundle();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onPrepareFromUri(MediaSession2 session, ControllerInfo controller, Uri uri,
+            public int onPrepareFromUri(MediaSession session, ControllerInfo controller, Uri uri,
                     Bundle extras) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testUri, uri);
@@ -406,10 +406,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnPrepareFromUri").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.prepareFromUri(testUri, testExtras);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -422,9 +422,9 @@
         final String testMediaId = "media_id";
         final Bundle testExtras = TestUtils.createTestBundle();
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onPrepareFromMediaId(MediaSession2 session, ControllerInfo controller,
+            public int onPrepareFromMediaId(MediaSession session, ControllerInfo controller,
                     String mediaId, Bundle extras) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testMediaId, mediaId);
@@ -433,10 +433,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnPrepareFromMediaId").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.prepareFromMediaId(testMediaId, testExtras);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -447,14 +447,14 @@
     public void testOnSetRating() throws InterruptedException {
         prepareLooper();
         final float ratingValue = 3.5f;
-        final Rating2 testRating = new StarRating2(5, ratingValue);
+        final Rating testRating = new StarRating(5, ratingValue);
         final String testMediaId = "media_id";
 
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaSession2.SessionCallback callback = new MediaSession2.SessionCallback() {
+        final MediaSession.SessionCallback callback = new MediaSession.SessionCallback() {
             @Override
-            public int onSetRating(MediaSession2 session, ControllerInfo controller,
-                    String mediaId, Rating2 rating) {
+            public int onSetRating(MediaSession session, ControllerInfo controller,
+                    String mediaId, Rating rating) {
                 assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testMediaId, mediaId);
                 assertEquals(testRating, rating);
@@ -463,10 +463,10 @@
             }
         };
 
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testOnSetRating").build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
 
             controller.setRating(testMediaId, testRating);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -474,88 +474,14 @@
     }
 
     @Test
-    public void testOnSubscribeRoutesInfo() throws InterruptedException {
-        prepareLooper();
-        final TestSessionCallback callback = new TestSessionCallback() {
-            @Override
-            public int onSubscribeRoutesInfo(@NonNull MediaSession2 session,
-                    @NonNull ControllerInfo controller) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                mLatch.countDown();
-                return RESULT_CODE_SUCCESS;
-            }
-        };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnSubscribeRoutesInfo")
-                .build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
-
-            callback.resetLatchCount(1);
-            controller.subscribeRoutesInfo();
-            assertTrue(callback.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    public void testOnUnsubscribeRoutesInfo() throws InterruptedException {
-        prepareLooper();
-        final TestSessionCallback callback = new TestSessionCallback() {
-            @Override
-            public int onUnsubscribeRoutesInfo(@NonNull MediaSession2 session,
-                    @NonNull ControllerInfo controller) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                mLatch.countDown();
-                return RESULT_CODE_SUCCESS;
-            }
-        };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnUnsubscribeRoutesInfo")
-                .build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
-
-            callback.resetLatchCount(1);
-            controller.unsubscribeRoutesInfo();
-            assertTrue(callback.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
-    public void testOnSelectRoute() throws InterruptedException {
-        prepareLooper();
-        final Bundle testRoute = TestUtils.createTestBundle();
-        final TestSessionCallback callback = new TestSessionCallback() {
-            @Override
-            public int onSelectRoute(@NonNull MediaSession2 session,
-                    @NonNull ControllerInfo controller, @NonNull Bundle route) {
-                assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
-                assertTrue(TestUtils.equals(testRoute, route));
-                mLatch.countDown();
-                return RESULT_CODE_SUCCESS;
-            }
-        };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback)
-                .setId("testOnSelectRoute")
-                .build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
-
-            callback.resetLatchCount(1);
-            controller.selectRoute(testRoute);
-            assertTrue(callback.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Test
     public void testOnConnect() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setId("testOnConnect")
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() {
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
+                    public SessionCommandGroup onConnect(MediaSession session,
                             ControllerInfo controller) {
                         // TODO: Get uid of client app's and compare.
                         if (!CLIENT_PACKAGE_NAME.equals(controller.getPackageName())) {
@@ -565,7 +491,7 @@
                         return super.onConnect(session, controller);
                     }
                 }).build()) {
-            RemoteMediaController2 controller = createRemoteController2(
+            RemoteMediaController controller = createRemoteController(
                     session.getToken(), false /* waitForConnection */);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -575,18 +501,18 @@
     public void testOnDisconnected() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setId("testOnDisconnected")
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() {
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() {
                     @Override
-                    public void onDisconnected(MediaSession2 session,
+                    public void onDisconnected(MediaSession session,
                             ControllerInfo controller) {
                         assertEquals(CLIENT_PACKAGE_NAME, controller.getPackageName());
                         // TODO: Get uid of client app's and compare.
                         latch.countDown();
                     }
                 }).build()) {
-            RemoteMediaController2 controller = createRemoteController2(session.getToken());
+            RemoteMediaController controller = createRemoteController(session.getToken());
             controller.close();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -595,7 +521,7 @@
 
     // TODO(jaewan): Add test for service connect rejection, when we differentiate session
     //               active/inactive and connection accept/refuse
-    class TestSessionCallback extends MediaSession2.SessionCallback {
+    class TestSessionCallback extends MediaSession.SessionCallback {
         CountDownLatch mLatch;
 
         void resetLatchCount(int count) {
@@ -603,17 +529,17 @@
         }
     }
 
-    public class MockOnCommandCallback extends MediaSession2.SessionCallback {
-        public final ArrayList<SessionCommand2> commands = new ArrayList<>();
+    public class MockOnCommandCallback extends MediaSession.SessionCallback {
+        public final ArrayList<SessionCommand> commands = new ArrayList<>();
 
         @Override
-        public int onCommandRequest(MediaSession2 session, ControllerInfo controllerInfo,
-                SessionCommand2 command) {
+        public int onCommandRequest(MediaSession session, ControllerInfo controllerInfo,
+                SessionCommand command) {
             // TODO: Get uid of client app's and compare.
             assertEquals(CLIENT_PACKAGE_NAME, controllerInfo.getPackageName());
             assertFalse(controllerInfo.isTrusted());
             commands.add(command);
-            if (command.getCommandCode() == SessionCommand2.COMMAND_CODE_PLAYER_PAUSE) {
+            if (command.getCommandCode() == SessionCommand.COMMAND_CODE_PLAYER_PAUSE) {
                 return RESULT_CODE_INVALID_STATE;
             }
             return RESULT_CODE_SUCCESS;
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCompatCallbackTestWithMediaController2.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
similarity index 86%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCompatCallbackTestWithMediaController2.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
index 0998f10..7123add 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCompatCallbackTestWithMediaController2.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionCompatCallbackTestWithMediaController.java
@@ -42,15 +42,15 @@
 import androidx.media.test.lib.MockActivity;
 import androidx.media.test.lib.TestUtils;
 import androidx.media.test.service.MediaTestUtils;
-import androidx.media.test.service.RemoteMediaController2;
-import androidx.media2.MediaController2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaUtils2;
-import androidx.media2.Rating2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.SessionToken2;
-import androidx.media2.StarRating2;
+import androidx.media.test.service.RemoteMediaController;
+import androidx.media2.MediaController;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaUtils;
+import androidx.media2.Rating;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionPlayer;
+import androidx.media2.SessionToken;
+import androidx.media2.StarRating;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -66,13 +66,13 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaController2}.
+ * Tests {@link MediaController}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaSessionCompatCallbackTestWithMediaController2 extends MediaSession2TestBase {
-    private static final String TAG = "MediaController2Test";
+public class MediaSessionCompatCallbackTestWithMediaController extends MediaSessionTestBase {
+    private static final String TAG = "MediaControllerTest";
 
     // The maximum time to wait for an operation.
     private static final long TIME_OUT_MS = 3000L;
@@ -87,7 +87,7 @@
     public void setUp() throws Exception {
         super.setUp();
         final Intent sessionActivity = new Intent(mContext, MockActivity.class);
-        // Create this test specific MediaSession2 to use our own Handler.
+        // Create this test specific MediaSession to use our own Handler.
         mIntent = PendingIntent.getActivity(mContext, 0, sessionActivity, 0);
 
         mSessionCallback = new MediaSessionCallback();
@@ -109,27 +109,27 @@
         }
     }
 
-    private RemoteMediaController2 createControllerAndWaitConnection() throws Exception {
+    private RemoteMediaController createControllerAndWaitConnection() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
-        final AtomicReference<SessionToken2> sessionToken2 = new AtomicReference<>();
-        SessionToken2.createSessionToken2(mContext, mSession.getSessionToken(),
-                sHandlerExecutor, new SessionToken2.OnSessionToken2CreatedListener() {
+        final AtomicReference<SessionToken> sessionToken2 = new AtomicReference<>();
+        SessionToken.createSessionToken(mContext, mSession.getSessionToken(),
+                sHandlerExecutor, new SessionToken.OnSessionTokenCreatedListener() {
                     @Override
-                    public void onSessionToken2Created(
-                            MediaSessionCompat.Token token, SessionToken2 token2) {
+                    public void onSessionTokenCreated(
+                            MediaSessionCompat.Token token, SessionToken token2) {
                         assertTrue(token2.isLegacySession());
                         sessionToken2.set(token2);
                         latch.countDown();
                     }
                 });
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        return createRemoteController2(sessionToken2.get(), true);
+        return createRemoteController(sessionToken2.get(), true);
     }
 
     @Test
     public void testPlay() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.play();
@@ -140,7 +140,7 @@
     @Test
     public void testPause() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.pause();
@@ -151,7 +151,7 @@
     @Test
     public void testPrepare() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.prepare();
@@ -162,7 +162,7 @@
     @Test
     public void testSeekTo() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         final long seekPosition = 12125L;
@@ -175,13 +175,13 @@
     @Test
     public void testAddPlaylistItem() throws Exception {
         prepareLooper();
-        final List<MediaItem2> testList = MediaTestUtils.createPlaylist(2);
-        final List<QueueItem> testQueue = MediaUtils2.convertToQueueItemList(testList);
+        final List<MediaItem> testList = MediaTestUtils.createPlaylist(2);
+        final List<QueueItem> testQueue = MediaUtils.convertToQueueItemList(testList);
         final String testMediaId = "testAddPlaylistItem";
 
         mSession.setQueue(testQueue);
         mSession.setFlags(FLAG_HANDLES_QUEUE_COMMANDS);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
 
         final int testIndex = 1;
         controller.addPlaylistItem(testIndex, testMediaId);
@@ -196,14 +196,14 @@
     @Test
     public void testRemovePlaylistItem() throws Exception {
         prepareLooper();
-        final List<MediaItem2> testList = MediaTestUtils.createPlaylist(2);
-        final List<QueueItem> testQueue = MediaUtils2.convertToQueueItemList(testList);
+        final List<MediaItem> testList = MediaTestUtils.createPlaylist(2);
+        final List<QueueItem> testQueue = MediaUtils.convertToQueueItemList(testList);
 
         mSession.setQueue(testQueue);
         mSession.setFlags(FLAG_HANDLES_QUEUE_COMMANDS);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
 
-        final MediaItem2 itemToRemove = testList.get(1);
+        final MediaItem itemToRemove = testList.get(1);
         controller.removePlaylistItem(1);
         assertTrue(mSessionCallback.await(TIMEOUT_MS));
         assertTrue(mSessionCallback.mOnRemoveQueueItemCalled);
@@ -218,13 +218,13 @@
         prepareLooper();
         final int testReplaceIndex = 1;
         // replace = remove + add
-        final List<MediaItem2> testList = MediaTestUtils.createPlaylist(2);
-        final List<QueueItem> testQueue = MediaUtils2.convertToQueueItemList(testList);
+        final List<MediaItem> testList = MediaTestUtils.createPlaylist(2);
+        final List<QueueItem> testQueue = MediaUtils.convertToQueueItemList(testList);
         final String testMediaId = "testReplacePlaylistItem";
 
         mSession.setQueue(testQueue);
         mSession.setFlags(FLAG_HANDLES_QUEUE_COMMANDS);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
 
         mSessionCallback.reset(2);
         controller.replacePlaylistItem(testReplaceIndex, testMediaId);
@@ -243,7 +243,7 @@
     @Test
     public void testSkipToPreviousItem() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.skipToPreviousItem();
@@ -254,7 +254,7 @@
     @Test
     public void testSkipToNextItem() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.skipToNextItem();
@@ -267,12 +267,12 @@
         prepareLooper();
 
         final int testSkipToIndex = 1;
-        final List<MediaItem2> testList = MediaTestUtils.createPlaylist(2);
-        final List<QueueItem> testQueue = MediaUtils2.convertToQueueItemList(testList);
+        final List<MediaItem> testList = MediaTestUtils.createPlaylist(2);
+        final List<QueueItem> testQueue = MediaUtils.convertToQueueItemList(testList);
 
         mSession.setQueue(testQueue);
         mSession.setFlags(FLAG_HANDLES_QUEUE_COMMANDS);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
 
         mSessionCallback.reset(1);
         controller.skipToPlaylistItem(testSkipToIndex);
@@ -284,10 +284,10 @@
     @Test
     public void testSetShuffleMode() throws Exception {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
 
         mSession.setShuffleMode(PlaybackStateCompat.SHUFFLE_MODE_NONE);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.setShuffleMode(testShuffleMode);
@@ -299,10 +299,10 @@
     @Test
     public void testSetRepeatMode() throws Exception {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_ALL;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_ALL;
 
         mSession.setRepeatMode(PlaybackStateCompat.REPEAT_MODE_NONE);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.setRepeatMode(testRepeatMode);
@@ -320,7 +320,7 @@
         TestVolumeProvider volumeProvider =
                 new TestVolumeProvider(volumeControlType, maxVolume, currentVolume);
         mSession.setPlaybackToRemote(volumeProvider);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
 
         final int targetVolume = 50;
         controller.setVolumeTo(targetVolume, 0 /* flags */);
@@ -338,7 +338,7 @@
         TestVolumeProvider volumeProvider =
                 new TestVolumeProvider(volumeControlType, maxVolume, currentVolume);
         mSession.setPlaybackToRemote(volumeProvider);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
 
         final int direction = AudioManager.ADJUST_RAISE;
         controller.adjustVolume(direction, 0 /* flags */);
@@ -365,7 +365,7 @@
         }
         // Set stream of the session.
         mSession.setPlaybackToLocal(stream);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         final int originalVolume = mAudioManager.getStreamVolume(stream);
         final int targetVolume = originalVolume == minVolume
                 ? originalVolume + 1 : originalVolume - 1;
@@ -400,7 +400,7 @@
         }
         // Set stream of the session.
         mSession.setPlaybackToLocal(stream);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
 
         final int originalVolume = mAudioManager.getStreamVolume(stream);
         final int direction = originalVolume == minVolume
@@ -425,8 +425,8 @@
         final String command = "test_custom_command";
         final Bundle testArgs = new Bundle();
         testArgs.putString("args", "test_args");
-        final SessionCommand2 testCommand = new SessionCommand2(command, null);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        final SessionCommand testCommand = new SessionCommand(command, null);
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.sendCustomCommand(testCommand, testArgs);
@@ -439,7 +439,7 @@
     @Test
     public void testFastForward() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.fastForward();
@@ -450,7 +450,7 @@
     @Test
     public void testRewind() throws Exception {
         prepareLooper();
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.rewind();
@@ -464,7 +464,7 @@
         final String request = "random query";
         final Bundle bundle = new Bundle();
         bundle.putString("key", "value");
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.playFromSearch(request, bundle);
@@ -480,7 +480,7 @@
         final Uri request = Uri.parse("foo://boo");
         final Bundle bundle = new Bundle();
         bundle.putString("key", "value");
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.playFromUri(request, bundle);
@@ -496,7 +496,7 @@
         final String request = "media_id";
         final Bundle bundle = new Bundle();
         bundle.putString("key", "value");
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.playFromMediaId(request, bundle);
@@ -512,7 +512,7 @@
         final String request = "random query";
         final Bundle bundle = new Bundle();
         bundle.putString("key", "value");
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.prepareFromSearch(request, bundle);
@@ -528,7 +528,7 @@
         final Uri request = Uri.parse("foo://boo");
         final Bundle bundle = new Bundle();
         bundle.putString("key", "value");
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.prepareFromUri(request, bundle);
@@ -544,7 +544,7 @@
         final String request = "media_id";
         final Bundle bundle = new Bundle();
         bundle.putString("key", "value");
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.prepareFromMediaId(request, bundle);
@@ -558,18 +558,18 @@
     public void testSetRating() throws Exception {
         prepareLooper();
         final float ratingValue = 3.5f;
-        final Rating2 rating2 = new StarRating2(5, ratingValue);
+        final Rating rating2 = new StarRating(5, ratingValue);
         final String mediaId = "media_id";
         final MediaMetadataCompat metadata = new MediaMetadataCompat.Builder()
                 .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, mediaId).build();
         mSession.setMetadata(metadata);
-        RemoteMediaController2 controller = createControllerAndWaitConnection();
+        RemoteMediaController controller = createControllerAndWaitConnection();
         mSessionCallback.reset(1);
 
         controller.setRating(mediaId, rating2);
         assertTrue(mSessionCallback.await(TIME_OUT_MS));
         assertTrue(mSessionCallback.mOnSetRatingCalled);
-        assertEquals(rating2, MediaUtils2.convertToRating2(mSessionCallback.mRating));
+        assertEquals(rating2, MediaUtils.convertToRating(mSessionCallback.mRating));
     }
 
     private void setPlaybackState(int state) {
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2LegacyCallbackTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionLegacyCallbackTest.java
similarity index 87%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2LegacyCallbackTest.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionLegacyCallbackTest.java
index bc56b7d..c60db71 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2LegacyCallbackTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionLegacyCallbackTest.java
@@ -19,8 +19,8 @@
 import static android.support.mediacompat.testlib.util.IntentUtil.CLIENT_PACKAGE_NAME;
 
 import static androidx.media.MediaSessionManager.RemoteUserInfo.LEGACY_CONTROLLER;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -52,15 +52,15 @@
 import androidx.media.test.service.MockPlayer;
 import androidx.media.test.service.MockRemotePlayer;
 import androidx.media.test.service.RemoteMediaControllerCompat;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
-import androidx.media2.MediaUtils2;
-import androidx.media2.Rating2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionCallback;
+import androidx.media2.MediaUtils;
+import androidx.media2.Rating;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -80,15 +80,15 @@
  */
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaSession2LegacyCallbackTest extends MediaSession2TestBase {
-    private static final String TAG = "MediaSession2LegacyCallbackTest";
+public class MediaSessionLegacyCallbackTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaSessionLegacyCallbackTest";
 
     private static final String EXPECTED_CONTROLLER_PACKAGE_NAME =
             (Build.VERSION.SDK_INT < 21 || Build.VERSION.SDK_INT >= 24)
                     ? CLIENT_PACKAGE_NAME : LEGACY_CONTROLLER;
 
     PendingIntent mIntent;
-    MediaSession2 mSession;
+    MediaSession mSession;
     RemoteMediaControllerCompat mController;
     MockPlayer mPlayer;
     AudioManager mAudioManager;
@@ -98,15 +98,15 @@
     public void setUp() throws Exception {
         super.setUp();
         final Intent sessionActivity = new Intent(mContext, MockActivity.class);
-        // Create this test specific MediaSession2 to use our own Handler.
+        // Create this test specific MediaSession to use our own Handler.
         mIntent = PendingIntent.getActivity(mContext, 0, sessionActivity, 0);
 
         mPlayer = new MockPlayer(1);
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setId(TAG)
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
+                    public SessionCommandGroup onConnect(MediaSession session,
                             ControllerInfo controller) {
                         if (EXPECTED_CONTROLLER_PACKAGE_NAME.equals(controller.getPackageName())) {
                             return super.onConnect(session, controller);
@@ -115,7 +115,7 @@
                     }
 
                     @Override
-                    public MediaItem2 onCreateMediaItem(MediaSession2 session,
+                    public MediaItem onCreateMediaItem(MediaSession session,
                             ControllerInfo controller, String mediaId) {
                         return MediaTestUtils.createMediaItem(mediaId);
                     }
@@ -168,7 +168,7 @@
     public void testStop() {
         prepareLooper();
 
-        // MediaControllerCompat#stop() will call MediaSession2#pause() and MediaSession2#seekTo(0).
+        // MediaControllerCompat#stop() will call MediaSession#pause() and MediaSession#seekTo(0).
         // Therefore, the latch's initial count is 2.
         MockPlayer player = new MockPlayer(2);
         player.mCurrentPosition = 1530;
@@ -216,7 +216,7 @@
         prepareLooper();
         final int playlistSize = 10;
 
-        List<MediaItem2> playlist = MediaTestUtils.createPlaylist(playlistSize);
+        List<MediaItem> playlist = MediaTestUtils.createPlaylist(playlistSize);
         mPlayer.mPlaylist = playlist;
         mPlayer.notifyPlaylistChanged();
         // Wait some time for setting the playlist.
@@ -239,7 +239,7 @@
         prepareLooper();
         final int playlistSize = 10;
 
-        List<MediaItem2> playlist = MediaTestUtils.createPlaylist(playlistSize);
+        List<MediaItem> playlist = MediaTestUtils.createPlaylist(playlistSize);
         mPlayer.mPlaylist = playlist;
         mPlayer.notifyPlaylistChanged();
         // Wait some time for setting the playlist.
@@ -264,7 +264,7 @@
         prepareLooper();
         final int playlistSize = 10;
 
-        List<MediaItem2> playlist = MediaTestUtils.createPlaylist(playlistSize);
+        List<MediaItem> playlist = MediaTestUtils.createPlaylist(playlistSize);
         mPlayer.mPlaylist = playlist;
         mPlayer.notifyPlaylistChanged();
         // Wait some time for setting the playlist.
@@ -272,7 +272,7 @@
 
         // Select an item to remove.
         final int targetIndex = 3;
-        final MediaItem2 targetItem = playlist.get(targetIndex);
+        final MediaItem targetItem = playlist.get(targetIndex);
         MediaDescriptionCompat desc = new MediaDescriptionCompat.Builder()
                 .setMediaId(targetItem.getMediaId())
                 .build();
@@ -304,7 +304,7 @@
         prepareLooper();
         final int playlistSize = 10;
 
-        List<MediaItem2> playlist = MediaTestUtils.createPlaylist(playlistSize);
+        List<MediaItem> playlist = MediaTestUtils.createPlaylist(playlistSize);
         mPlayer.mPlaylist = playlist;
         mPlayer.notifyPlaylistChanged();
         // Wait some time for setting the playlist.
@@ -323,7 +323,7 @@
     @Test
     public void testSetShuffleMode() throws InterruptedException {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         mController.getTransportControls().setShuffleMode(testShuffleMode);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
@@ -334,7 +334,7 @@
     @Test
     public void testSetRepeatMode() throws InterruptedException {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         mController.getTransportControls().setRepeatMode(testRepeatMode);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
@@ -470,25 +470,25 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
+            public SessionCommandGroup onConnect(@NonNull MediaSession session,
                     @NonNull ControllerInfo controller) {
-                SessionCommandGroup2 commands = super.onConnect(session, controller);
-                commands.addCommand(new SessionCommand2(testCommand, null));
+                SessionCommandGroup commands = super.onConnect(session, controller);
+                commands.addCommand(new SessionCommand(testCommand, null));
                 return commands;
             }
 
             @Override
-            public MediaSession2.SessionResult onCustomCommand(MediaSession2 session,
-                    ControllerInfo controller, SessionCommand2 customCommand, Bundle args) {
+            public MediaSession.SessionResult onCustomCommand(MediaSession session,
+                    ControllerInfo controller, SessionCommand customCommand, Bundle args) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(testCommand, customCommand.getCustomCommand());
                 assertTrue(TestUtils.equals(testArgs, args));
                 latch.countDown();
-                return new MediaSession2.SessionResult(RESULT_CODE_SUCCESS, null);
+                return new MediaSession.SessionResult(RESULT_CODE_SUCCESS, null);
             }
         };
         mSession.close();
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback).setId(TAG).build();
         final RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
                 mContext, mSession.getSessionCompat().getSessionToken(), true);
@@ -501,7 +501,7 @@
         prepareLooper();
         final SessionCallback sessionCallback = new SessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(MediaSession2 session,
+            public SessionCommandGroup onConnect(MediaSession session,
                     ControllerInfo controller) {
                 return null;
             }
@@ -510,7 +510,7 @@
             @Override
             public void run() {
                 mSession.close();
-                mSession = new MediaSession2.Builder(mContext, mPlayer)
+                mSession = new MediaSession.Builder(mContext, mPlayer)
                         .setSessionCallback(sHandlerExecutor, sessionCallback).build();
             }
         });
@@ -528,13 +528,13 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onFastForward(MediaSession2 session, ControllerInfo controller) {
+            public int onFastForward(MediaSession session, ControllerInfo controller) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testFastForward").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -550,13 +550,13 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onRewind(MediaSession2 session, ControllerInfo controller) {
+            public int onRewind(MediaSession session, ControllerInfo controller) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testRewind").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -575,7 +575,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPlayFromSearch(MediaSession2 session, ControllerInfo controller,
+            public int onPlayFromSearch(MediaSession session, ControllerInfo controller,
                     String query, Bundle extras) {
                 super.onPlayFromSearch(session, controller, query, extras);
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
@@ -585,7 +585,7 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPlayFromSearch").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -604,7 +604,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPlayFromUri(MediaSession2 session, ControllerInfo controller, Uri uri,
+            public int onPlayFromUri(MediaSession session, ControllerInfo controller, Uri uri,
                     Bundle extras) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(request, uri);
@@ -613,7 +613,7 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPlayFromUri").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -632,7 +632,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPlayFromMediaId(MediaSession2 session, ControllerInfo controller,
+            public int onPlayFromMediaId(MediaSession session, ControllerInfo controller,
                     String mediaId, Bundle extras) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(request, mediaId);
@@ -641,7 +641,7 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPlayFromMediaId").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -660,7 +660,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPrepareFromSearch(MediaSession2 session, ControllerInfo controller,
+            public int onPrepareFromSearch(MediaSession session, ControllerInfo controller,
                     String query, Bundle extras) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(request, query);
@@ -669,7 +669,7 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPrepareFromSearch").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -688,7 +688,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPrepareFromUri(MediaSession2 session, ControllerInfo controller, Uri uri,
+            public int onPrepareFromUri(MediaSession session, ControllerInfo controller, Uri uri,
                     Bundle extras) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(request, uri);
@@ -697,7 +697,7 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPrepareFromUri").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -716,7 +716,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPrepareFromMediaId(MediaSession2 session, ControllerInfo controller,
+            public int onPrepareFromMediaId(MediaSession session, ControllerInfo controller,
                     String mediaId, Bundle extras) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(request, mediaId);
@@ -725,7 +725,7 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPrepareFromMediaId").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -746,18 +746,18 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onSetRating(MediaSession2 session, ControllerInfo controller,
-                    String mediaIdOut, Rating2 ratingOut) {
+            public int onSetRating(MediaSession session, ControllerInfo controller,
+                    String mediaIdOut, Rating ratingOut) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controller.getPackageName());
                 assertEquals(mediaId, mediaIdOut);
-                assertEquals(MediaUtils2.convertToRating2(rating), ratingOut);
+                assertEquals(MediaUtils.convertToRating(rating), ratingOut);
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
 
         mPlayer.mCurrentMediaItem = MediaTestUtils.createMediaItem(mediaId);
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testSetRating").build()) {
             RemoteMediaControllerCompat controller = new RemoteMediaControllerCompat(
@@ -770,16 +770,16 @@
     @Test
     public void testOnCommandCallback() throws InterruptedException {
         prepareLooper();
-        final ArrayList<SessionCommand2> commands = new ArrayList<>();
+        final ArrayList<SessionCommand> commands = new ArrayList<>();
         final CountDownLatch latchForPause = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onCommandRequest(MediaSession2 session, ControllerInfo controllerInfo,
-                    SessionCommand2 command) {
+            public int onCommandRequest(MediaSession session, ControllerInfo controllerInfo,
+                    SessionCommand command) {
                 assertEquals(EXPECTED_CONTROLLER_PACKAGE_NAME, controllerInfo.getPackageName());
                 assertFalse(controllerInfo.isTrusted());
                 commands.add(command);
-                if (command.getCommandCode() == SessionCommand2.COMMAND_CODE_PLAYER_PAUSE) {
+                if (command.getCommandCode() == SessionCommand.COMMAND_CODE_PLAYER_PAUSE) {
                     latchForPause.countDown();
                     return RESULT_CODE_INVALID_STATE;
                 }
@@ -792,7 +792,7 @@
             public void run() {
                 mSession.close();
                 mPlayer = new MockPlayer(1);
-                mSession = new MediaSession2.Builder(mContext, mPlayer)
+                mSession = new MediaSession.Builder(mContext, mPlayer)
                         .setSessionCallback(sHandlerExecutor, callback).build();
             }
         });
@@ -804,7 +804,7 @@
         assertFalse(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mPlayer.mPauseCalled);
         assertEquals(1, commands.size());
-        assertEquals(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE,
+        assertEquals(SessionCommand.COMMAND_CODE_PLAYER_PAUSE,
                 (long) commands.get(0).getCommandCode());
 
         controller.getTransportControls().play();
@@ -812,7 +812,7 @@
         assertTrue(mPlayer.mPlayCalled);
         assertFalse(mPlayer.mPauseCalled);
         assertEquals(2, commands.size());
-        assertEquals(SessionCommand2.COMMAND_CODE_PLAYER_PLAY,
+        assertEquals(SessionCommand.COMMAND_CODE_PLAYER_PLAY,
                 (long) commands.get(1).getCommandCode());
     }
 
@@ -844,7 +844,7 @@
             sessionHandler.postAndSync(new Runnable() {
                 @Override
                 public void run() {
-                    mSession = new MediaSession2.Builder(mContext, mPlayer)
+                    mSession = new MediaSession.Builder(mContext, mPlayer)
                             .setSessionCallback(sHandlerExecutor, new SessionCallback() {})
                             .setId("testDeadlock").build();
                 }
@@ -854,7 +854,7 @@
             testHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    final int state = SessionPlayer2.PLAYER_STATE_ERROR;
+                    final int state = SessionPlayer.PLAYER_STATE_ERROR;
                     for (int i = 0; i < 100; i++) {
                         // triggers call from session to controller.
                         player.notifyPlayerStateChanged(state);
@@ -908,7 +908,7 @@
         // Ensure that the controller cannot use newly create session with the same ID.
         // Recreated session has different session stub, so previously created controller
         // shouldn't be available.
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {})
                 .setId(TAG)
                 .build();
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionManager2Test.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionManagerTest.java
similarity index 84%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionManager2Test.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionManagerTest.java
index 78d0303..9ce2b6d 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionManager2Test.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionManagerTest.java
@@ -28,8 +28,8 @@
 import android.os.Build;
 
 import androidx.media.test.service.MockMediaBrowserServiceCompat;
-import androidx.media2.MediaSessionManager2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaSessionManager;
+import androidx.media2.SessionToken;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
@@ -42,12 +42,12 @@
 import java.util.Set;
 
 /**
- * Tests {@link MediaSessionManager2Test}.
+ * Tests {@link MediaSessionManagerTest}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaSessionManager2Test extends MediaTestBase {
+public class MediaSessionManagerTest extends MediaTestBase {
     private Context mContext;
 
     private static final ComponentName MOCK_BROWSER_SERVICE_COMPAT_NAME = new ComponentName(
@@ -64,10 +64,10 @@
         boolean hasMockBrowserServiceCompat = false;
         boolean hasMockSessionService2 = false;
         boolean hasMockLibraryService2 = false;
-        MediaSessionManager2 sessionManager2 = MediaSessionManager2.getInstance(mContext);
-        Set<SessionToken2> serviceTokens = sessionManager2.getSessionServiceTokens();
-        for (SessionToken2 token2 : serviceTokens) {
-            ComponentName componentName = token2.getComponentName();
+        MediaSessionManager sessionManager = MediaSessionManager.getInstance(mContext);
+        Set<SessionToken> serviceTokens = sessionManager.getSessionServiceTokens();
+        for (SessionToken token : serviceTokens) {
+            ComponentName componentName = token.getComponentName();
             if (MOCK_BROWSER_SERVICE_COMPAT_NAME.equals(componentName)) {
                 hasMockBrowserServiceCompat = true;
             } else if (MOCK_MEDIA_SESSION_SERVICE.equals(componentName)) {
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionService2NotificationTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionServiceNotificationTest.java
similarity index 64%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionService2NotificationTest.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionServiceNotificationTest.java
index f3347c3..41397d2 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionService2NotificationTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionServiceNotificationTest.java
@@ -19,6 +19,13 @@
 import static android.support.mediacompat.testlib.util.IntentUtil.CLIENT_PACKAGE_NAME;
 
 import static androidx.media.test.lib.CommonConstants.MOCK_MEDIA_SESSION_SERVICE;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_NONE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_ALBUM_ART;
+import static androidx.media2.MediaMetadata.METADATA_KEY_ARTIST;
+import static androidx.media2.MediaMetadata.METADATA_KEY_BROWSABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DISPLAY_TITLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_ID;
+import static androidx.media2.MediaMetadata.METADATA_KEY_PLAYABLE;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -26,16 +33,17 @@
 
 import androidx.annotation.NonNull;
 import androidx.media.test.service.MockPlayer;
-import androidx.media.test.service.RemoteMediaController2;
+import androidx.media.test.service.RemoteMediaController;
 import androidx.media.test.service.TestServiceRegistry;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSessionService;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
+import androidx.media2.SessionToken;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 
@@ -47,7 +55,7 @@
 import java.util.concurrent.CountDownLatch;
 
 /**
- * Manual test of {@link androidx.media2.MediaSessionService2} for showing/removing notification
+ * Manual test of {@link MediaSessionService} for showing/removing notification
  * when the playback is started/ended.
  * <p>
  * This test is a manual test, which means the one who runs this test should keep looking at the
@@ -56,10 +64,10 @@
 @LargeTest
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @Ignore("Comment out this line and manually run the test.")
-public class MediaSessionService2NotificationTest extends MediaSession2TestBase {
+public class MediaSessionServiceNotificationTest extends MediaSessionTestBase {
     private static final long NOTIFICATION_SHOW_TIME_MS = 15000;
 
-    MediaSession2 mSession;
+    MediaSession mSession;
     MockPlayer mPlayer;
 
     @Before
@@ -80,7 +88,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final MediaLibrarySessionCallback sessionCallback = new MediaLibrarySessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
+            public SessionCommandGroup onConnect(@NonNull MediaSession session,
                     @NonNull ControllerInfo controller) {
                 if (CLIENT_PACKAGE_NAME.equals(controller.getPackageName())) {
                     mSession = session;
@@ -94,29 +102,29 @@
         TestServiceRegistry.getInstance().setSessionCallback(sessionCallback);
 
         // Create a controller to start the service.
-        RemoteMediaController2 controller = createRemoteController2(
-                new SessionToken2(mContext, MOCK_MEDIA_SESSION_SERVICE), true);
+        RemoteMediaController controller = createRemoteController(
+                new SessionToken(mContext, MOCK_MEDIA_SESSION_SERVICE), true);
 
         // Set current media item.
         final String mediaId = "testMediaId";
         Bitmap albumArt = BitmapFactory.decodeResource(mContext.getResources(),
                 android.support.mediacompat.service.R.drawable.big_buck_bunny);
-        MediaMetadata2 metadata = new MediaMetadata2.Builder()
-                .putText(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId)
-                .putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, "Test Song Name")
-                .putText(MediaMetadata2.METADATA_KEY_ARTIST, "Test Artist Name")
-                .putBitmap(MediaMetadata2.METADATA_KEY_ALBUM_ART, albumArt)
-                .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE, MediaMetadata2.BROWSABLE_TYPE_NONE)
-                .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+        MediaMetadata metadata = new MediaMetadata.Builder()
+                .putText(METADATA_KEY_MEDIA_ID, mediaId)
+                .putText(METADATA_KEY_DISPLAY_TITLE, "Test Song Name")
+                .putText(METADATA_KEY_ARTIST, "Test Artist Name")
+                .putBitmap(METADATA_KEY_ALBUM_ART, albumArt)
+                .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
+                .putLong(METADATA_KEY_PLAYABLE, 1)
                 .build();
-        mPlayer.mCurrentMediaItem = new MediaItem2.Builder()
+        mPlayer.mCurrentMediaItem = new MediaItem.Builder()
                         .setMetadata(metadata)
                         .build();
 
         // Notification should be shown. Clicking play/pause button will change the player state.
         // When playing, the notification will not be removed by swiping horizontally.
         // When paused, the notification can be swiped away.
-        mPlayer.notifyPlayerStateChanged(SessionPlayer2.PLAYER_STATE_PLAYING);
+        mPlayer.notifyPlayerStateChanged(SessionPlayer.PLAYER_STATE_PLAYING);
         Thread.sleep(NOTIFICATION_SHOW_TIME_MS);
     }
 }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionService2Test.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionServiceTest.java
similarity index 71%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionService2Test.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionServiceTest.java
index fd1c313..fedb48e 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionService2Test.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionServiceTest.java
@@ -23,13 +23,13 @@
 
 import android.content.ComponentName;
 
-import androidx.media.test.service.MockMediaSessionService2;
+import androidx.media.test.service.MockMediaSessionService;
 import androidx.media.test.service.MockPlayer;
-import androidx.media.test.service.RemoteMediaController2;
+import androidx.media.test.service.RemoteMediaController;
 import androidx.media.test.service.TestServiceRegistry;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSessionService2;
-import androidx.media2.SessionToken2;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSessionService;
+import androidx.media2.SessionToken;
 import androidx.test.filters.SmallTest;
 
 import org.junit.After;
@@ -42,19 +42,19 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests {@link MediaSessionService2}.
+ * Tests {@link MediaSessionService}.
  */
 @SmallTest
-public class MediaSessionService2Test extends MediaSession2TestBase {
-    private SessionToken2 mToken;
+public class MediaSessionServiceTest extends MediaSessionTestBase {
+    private SessionToken mToken;
 
     @Override
     @Before
     public void setUp() throws Exception {
         super.setUp();
         TestServiceRegistry.getInstance().setHandler(sHandler);
-        mToken = new SessionToken2(mContext,
-                new ComponentName(mContext, MockMediaSessionService2.class));
+        mToken = new SessionToken(mContext,
+                new ComponentName(mContext, MockMediaSessionService.class));
     }
 
     @Override
@@ -67,23 +67,23 @@
     @Test
     public void testOnGetSession() throws InterruptedException {
         prepareLooper();
-        final List<SessionToken2> tokens = new ArrayList<>();
+        final List<SessionToken> tokens = new ArrayList<>();
         TestServiceRegistry.getInstance().setOnGetSessionHandler(
                 new TestServiceRegistry.OnGetSessionHandler() {
                     @Override
-                    public MediaSession2 onGetSession() {
+                    public MediaSession onGetSession() {
                         MockPlayer player = new MockPlayer(1);
-                        MediaSession2 session = new MediaSession2.Builder(mContext, player)
+                        MediaSession session = new MediaSession.Builder(mContext, player)
                                 .setSessionCallback(sHandlerExecutor,
-                                        new MediaSession2.SessionCallback() {})
+                                        new MediaSession.SessionCallback() {})
                                 .setId("testOnGetSession" + System.currentTimeMillis()).build();
                         tokens.add(session.getToken());
                         return session;
                     }
                 });
 
-        RemoteMediaController2 controller1 = createRemoteController2(mToken, true);
-        RemoteMediaController2 controller2 = createRemoteController2(mToken, true);
+        RemoteMediaController controller1 = createRemoteController(mToken, true);
+        RemoteMediaController controller2 = createRemoteController(mToken, true);
 
         assertNotEquals(controller1.getConnectedSessionToken(),
                 controller2.getConnectedSessionToken());
@@ -108,8 +108,8 @@
                     }
                 });
 
-        RemoteMediaController2 controller1 = createRemoteController2(mToken, true);
-        RemoteMediaController2 controller2 = createRemoteController2(mToken, true);
+        RemoteMediaController controller1 = createRemoteController(mToken, true);
+        RemoteMediaController controller2 = createRemoteController(mToken, true);
         controller1.close();
         controller2.close();
 
@@ -122,11 +122,11 @@
         TestServiceRegistry.getInstance().setOnGetSessionHandler(
                 new TestServiceRegistry.OnGetSessionHandler() {
                     @Override
-                    public MediaSession2 onGetSession() {
+                    public MediaSession onGetSession() {
                         MockPlayer player = new MockPlayer(1);
-                        MediaSession2 session = new MediaSession2.Builder(mContext, player)
+                        MediaSession session = new MediaSession.Builder(mContext, player)
                                 .setSessionCallback(sHandlerExecutor,
-                                        new MediaSession2.SessionCallback() {})
+                                        new MediaSession.SessionCallback() {})
                                 .setId("testAllControllersDisconnected"
                                         + System.currentTimeMillis()).build();
                         return session;
@@ -146,8 +146,8 @@
                     }
                 });
 
-        RemoteMediaController2 controller1 = createRemoteController2(mToken, true);
-        RemoteMediaController2 controller2 = createRemoteController2(mToken, true);
+        RemoteMediaController controller1 = createRemoteController(mToken, true);
+        RemoteMediaController controller2 = createRemoteController(mToken, true);
         controller1.close();
         controller2.close();
 
@@ -157,14 +157,14 @@
     @Test
     public void testGetSessions() throws InterruptedException {
         prepareLooper();
-        RemoteMediaController2 controller = createRemoteController2(mToken, true);
-        MediaSessionService2 service = TestServiceRegistry.getInstance().getServiceInstance();
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, new MockPlayer(0))
+        RemoteMediaController controller = createRemoteController(mToken, true);
+        MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance();
+        try (MediaSession session = new MediaSession.Builder(mContext, new MockPlayer(0))
                 .setId("testGetSessions")
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() { })
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() { })
                 .build()) {
             service.addSession(session);
-            List<MediaSession2> sessions = service.getSessions();
+            List<MediaSession> sessions = service.getSessions();
             assertTrue(sessions.contains(session));
             assertEquals(2, sessions.size());
 
@@ -177,14 +177,14 @@
     @Test
     public void testAddSessions_removedWhenClose() throws InterruptedException {
         prepareLooper();
-        RemoteMediaController2 controller = createRemoteController2(mToken, true);
-        MediaSessionService2 service = TestServiceRegistry.getInstance().getServiceInstance();
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, new MockPlayer(0))
+        RemoteMediaController controller = createRemoteController(mToken, true);
+        MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance();
+        try (MediaSession session = new MediaSession.Builder(mContext, new MockPlayer(0))
                 .setId("testAddSessions_removedWhenClose")
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() { })
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() { })
                 .build()) {
             service.addSession(session);
-            List<MediaSession2> sessions = service.getSessions();
+            List<MediaSession> sessions = service.getSessions();
             assertTrue(sessions.contains(session));
             assertEquals(2, sessions.size());
 
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2Test.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionTest.java
similarity index 83%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2Test.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionTest.java
index f1d331c..0a99846 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2Test.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionTest.java
@@ -30,13 +30,13 @@
 import androidx.media.test.lib.TestUtils.SyncHandler;
 import androidx.media.test.service.MediaTestUtils;
 import androidx.media.test.service.MockPlayer;
-import androidx.media.test.service.RemoteMediaController2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.SessionCallback;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
+import androidx.media.test.service.RemoteMediaController;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.SessionCallback;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
@@ -52,16 +52,16 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests {@link MediaSession2}.
+ * Tests {@link MediaSession}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaSession2Test extends MediaSession2TestBase {
+public class MediaSessionTest extends MediaSessionTestBase {
 
-    private static final String TAG = "MediaSession2Test";
+    private static final String TAG = "MediaSessionTest";
 
-    private MediaSession2 mSession;
+    private MediaSession mSession;
     private MockPlayer mPlayer;
 
     @Before
@@ -70,12 +70,12 @@
         super.setUp();
         mPlayer = new MockPlayer(1);
 
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setId(TAG)
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() {
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
-                            MediaSession2.ControllerInfo controller) {
+                    public SessionCommandGroup onConnect(MediaSession session,
+                            MediaSession.ControllerInfo controller) {
                         if (Process.myUid() == controller.getUid()) {
                             return super.onConnect(session, controller);
                         }
@@ -96,15 +96,15 @@
     @Test
     public void testBuilder() {
         prepareLooper();
-        MediaSession2.Builder builder;
+        MediaSession.Builder builder;
         try {
-            builder = new MediaSession2.Builder(mContext, null);
+            builder = new MediaSession.Builder(mContext, null);
             fail("null player shouldn't be allowed");
         } catch (IllegalArgumentException e) {
             // expected. pass-through
         }
         try {
-            builder = new MediaSession2.Builder(mContext, mPlayer);
+            builder = new MediaSession.Builder(mContext, mPlayer);
             builder.setId(null);
             fail("null id shouldn't be allowed");
         } catch (IllegalArgumentException e) {
@@ -116,7 +116,7 @@
     public void testGetDuration() throws Exception {
         prepareLooper();
         final long testDuration = 9999;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PAUSED;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PAUSED;
         mPlayer.mDuration = testDuration;
         assertEquals(testDuration, mSession.getPlayer().getDuration());
     }
@@ -125,7 +125,7 @@
     public void testGetPlaybackSpeed() throws Exception {
         prepareLooper();
         final float speed = 1.5f;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PAUSED;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PAUSED;
         mPlayer.setPlaybackSpeed(speed);
         assertEquals(speed, mSession.getPlayer().getPlaybackSpeed(), 0.0f);
     }
@@ -133,7 +133,7 @@
     @Test
     public void testGetPlayerState() {
         prepareLooper();
-        final int state = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int state = SessionPlayer.PLAYER_STATE_PLAYING;
         mPlayer.mLastPlayerState = state;
         assertEquals(state, mSession.getPlayer().getPlayerState());
     }
@@ -141,7 +141,7 @@
     @Test
     public void testGetBufferingState() {
         prepareLooper();
-        final int bufferingState = SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
+        final int bufferingState = SessionPlayer.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
         mPlayer.mLastBufferingState = bufferingState;
         assertEquals(bufferingState, mSession.getPlayer().getBufferingState());
     }
@@ -151,7 +151,7 @@
         prepareLooper();
         final long position = 150000;
         mPlayer.mCurrentPosition = position;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PAUSED;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PAUSED;
         assertEquals(position, mSession.getPlayer().getCurrentPosition());
     }
 
@@ -160,14 +160,14 @@
         prepareLooper();
         final long bufferedPosition = 900000;
         mPlayer.mBufferedPosition = bufferedPosition;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PAUSED;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PAUSED;
         assertEquals(bufferedPosition, mSession.getPlayer().getBufferedPosition());
     }
 
     @Test
     public void testGetCurrentMediaItem() {
         prepareLooper();
-        MediaItem2 item = MediaTestUtils.createMediaItemWithMetadata();
+        MediaItem item = MediaTestUtils.createMediaItemWithMetadata();
         mPlayer.mCurrentMediaItem = item;
         assertEquals(item, mSession.getPlayer().getCurrentMediaItem());
     }
@@ -175,7 +175,7 @@
     @Test
     public void testGetPlaylist() {
         prepareLooper();
-        final List<MediaItem2> list = MediaTestUtils.createPlaylist(2);
+        final List<MediaItem> list = MediaTestUtils.createPlaylist(2);
         mPlayer.mPlaylist = list;
         assertEquals(list, mSession.getPlayer().getPlaylist());
     }
@@ -183,7 +183,7 @@
     @Test
     public void testGetPlaylistMetadata() {
         prepareLooper();
-        final MediaMetadata2 testMetadata = MediaTestUtils.createMetadata();
+        final MediaMetadata testMetadata = MediaTestUtils.createMetadata();
         mPlayer.mMetadata = testMetadata;
         assertEquals(testMetadata, mSession.getPlayer().getPlaylistMetadata());
     }
@@ -191,7 +191,7 @@
     @Test
     public void testGetShuffleMode() throws InterruptedException {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         mPlayer.setShuffleMode(testShuffleMode);
         assertEquals(testShuffleMode, mSession.getPlayer().getShuffleMode());
     }
@@ -199,7 +199,7 @@
     @Test
     public void testGetRepeatMode() throws InterruptedException {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         mPlayer.setRepeatMode(testRepeatMode);
         assertEquals(testRepeatMode, mSession.getPlayer().getRepeatMode());
     }
@@ -245,16 +245,16 @@
             sessionHandler.postAndSync(new Runnable() {
                 @Override
                 public void run() {
-                    mSession = new MediaSession2.Builder(mContext, mPlayer)
+                    mSession = new MediaSession.Builder(mContext, mPlayer)
                             .setSessionCallback(sHandlerExecutor, new SessionCallback() {})
                             .setId("testDeadlock").build();
                 }
             });
-            final RemoteMediaController2 controller = createRemoteController2(mSession.getToken());
+            final RemoteMediaController controller = createRemoteController(mSession.getToken());
             testHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    final int state = SessionPlayer2.PLAYER_STATE_ERROR;
+                    final int state = SessionPlayer.PLAYER_STATE_ERROR;
                     for (int i = 0; i < 100; i++) {
                         Log.d(TAG, "testDeadlock for-loop started: index=" + i);
                         long startTime = SystemClock.elapsedRealtime();
@@ -342,16 +342,16 @@
     public void testCreatingTwoSessionWithSameId() {
         prepareLooper();
         final String sessionId = "testSessionId";
-        MediaSession2 session = new MediaSession2.Builder(mContext, new MockPlayer(0))
+        MediaSession session = new MediaSession.Builder(mContext, new MockPlayer(0))
                 .setId(sessionId)
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() {})
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() {})
                 .build();
 
-        MediaSession2.Builder builderWithSameId =
-                new MediaSession2.Builder(mContext, new MockPlayer(0));
+        MediaSession.Builder builderWithSameId =
+                new MediaSession.Builder(mContext, new MockPlayer(0));
         try {
             builderWithSameId.setId(sessionId)
-                    .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() {})
+                    .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() {})
                     .build();
             fail("Creating a new session with the same ID in a process should not be allowed");
         } catch (IllegalArgumentException e) {
@@ -360,7 +360,7 @@
 
         session.close();
         // Creating a new session with ID of the closed session is okay.
-        MediaSession2 sessionWithSameId = builderWithSameId.build();
+        MediaSession sessionWithSameId = builderWithSameId.build();
         sessionWithSameId.close();
     }
 }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2TestBase.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionTestBase.java
similarity index 75%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2TestBase.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionTestBase.java
index 064cb3e..214e719 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2TestBase.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSessionTestBase.java
@@ -24,9 +24,9 @@
 import androidx.annotation.CallSuper;
 import androidx.annotation.NonNull;
 import androidx.media.test.lib.TestUtils.SyncHandler;
-import androidx.media.test.service.RemoteMediaBrowser2;
-import androidx.media.test.service.RemoteMediaController2;
-import androidx.media2.SessionToken2;
+import androidx.media.test.service.RemoteMediaBrowser;
+import androidx.media.test.service.RemoteMediaController;
+import androidx.media2.SessionToken;
 import androidx.test.InstrumentationRegistry;
 
 import org.junit.AfterClass;
@@ -42,19 +42,19 @@
  * For all subclasses, all individual tests should begin with the {@link #prepareLooper()}. See
  * {@link #prepareLooper} for details.
  */
-abstract class MediaSession2TestBase extends MediaTestBase {
+abstract class MediaSessionTestBase extends MediaTestBase {
     static final int TIMEOUT_MS = 1000;
 
     static SyncHandler sHandler;
     static Executor sHandlerExecutor;
 
     Context mContext;
-    private List<RemoteMediaController2> mControllers = new ArrayList<>();
+    private List<RemoteMediaController> mControllers = new ArrayList<>();
 
     /**
      * All tests methods should start with this.
      * <p>
-     * MediaControllerCompat, which is wrapped by the MediaSession2, can be only created by the
+     * MediaControllerCompat, which is wrapped by the MediaSession, can be only created by the
      * thread whose Looper is prepared. However, when the presubmit tests runs on the server,
      * test runs with the {@link org.junit.internal.runners.statements.FailOnTimeout} which creates
      * dedicated thread for running test methods while methods annotated with @After or @Before
@@ -70,19 +70,19 @@
 
     @BeforeClass
     public static void setUpThread() {
-        synchronized (MediaSession2TestBase.class) {
+        synchronized (MediaSessionTestBase.class) {
             if (sHandler != null) {
                 return;
             }
             prepareLooper();
-            HandlerThread handlerThread = new HandlerThread("MediaSession2TestBase");
+            HandlerThread handlerThread = new HandlerThread("MediaSessionTestBase");
             handlerThread.start();
             sHandler = new SyncHandler(handlerThread.getLooper());
             sHandlerExecutor = new Executor() {
                 @Override
                 public void execute(Runnable runnable) {
                     SyncHandler handler;
-                    synchronized (MediaSession2TestBase.class) {
+                    synchronized (MediaSessionTestBase.class) {
                         handler = sHandler;
                     }
                     if (handler != null) {
@@ -95,7 +95,7 @@
 
     @AfterClass
     public static void cleanUpThread() {
-        synchronized (MediaSession2TestBase.class) {
+        synchronized (MediaSessionTestBase.class) {
             if (sHandler == null) {
                 return;
             }
@@ -121,24 +121,24 @@
         }
     }
 
-    final RemoteMediaController2 createRemoteController2(SessionToken2 token)
+    final RemoteMediaController createRemoteController(SessionToken token)
             throws InterruptedException {
-        return createRemoteController2(token, true);
+        return createRemoteController(token, true);
     }
 
-    final RemoteMediaController2 createRemoteController2(@NonNull SessionToken2 token,
+    final RemoteMediaController createRemoteController(@NonNull SessionToken token,
             boolean waitForConnection) throws InterruptedException {
-        RemoteMediaController2 controller2 =
-                new RemoteMediaController2(mContext, token, waitForConnection);
-        mControllers.add(controller2);
-        return controller2;
+        RemoteMediaController controller =
+                new RemoteMediaController(mContext, token, waitForConnection);
+        mControllers.add(controller);
+        return controller;
     }
 
-    final RemoteMediaBrowser2 createRemoteBrowser2(SessionToken2 token)
+    final RemoteMediaBrowser createRemoteBrowser2(SessionToken token)
             throws InterruptedException {
-        RemoteMediaBrowser2 browser2 =
-                new RemoteMediaBrowser2(mContext, token, true /* waitForConnection */);
-        mControllers.add(browser2);
-        return browser2;
+        RemoteMediaBrowser browser =
+                new RemoteMediaBrowser(mContext, token, true /* waitForConnection */);
+        mControllers.add(browser);
+        return browser;
     }
 }
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2_KeyEventTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession_KeyEventTest.java
similarity index 89%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2_KeyEventTest.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession_KeyEventTest.java
index b719ce5..121f2d7 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2_KeyEventTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession_KeyEventTest.java
@@ -19,7 +19,7 @@
 import static android.support.mediacompat.testlib.util.IntentUtil.SERVICE_PACKAGE_NAME;
 
 import static androidx.media.MediaSessionManager.RemoteUserInfo.LEGACY_CONTROLLER;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -33,10 +33,10 @@
 import android.view.KeyEvent;
 
 import androidx.media.test.service.MockPlayer;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -50,18 +50,18 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests {@link MediaSession2} whether it handles key events correctly.
+ * Tests {@link MediaSession} whether it handles key events correctly.
  * In order to get the media key events, the player state is set to 'Playing' before every test
  * method.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaSession2_KeyEventTest extends MediaSession2TestBase {
+public class MediaSession_KeyEventTest extends MediaSessionTestBase {
     private static String sExpectedControllerPackageName;
 
     private AudioManager mAudioManager;
-    private MediaSession2 mSession;
+    private MediaSession mSession;
     private MockPlayer mPlayer;
     private TestSessionCallback mSessionCallback;
 
@@ -83,16 +83,16 @@
         super.setUp();
         mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
         mPlayer = new MockPlayer(1);
-        mPlayer.notifyPlayerStateChanged(SessionPlayer2.PLAYER_STATE_PLAYING);
+        mPlayer.notifyPlayerStateChanged(SessionPlayer.PLAYER_STATE_PLAYING);
 
         mSessionCallback = new TestSessionCallback();
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, mSessionCallback)
                 .build();
 
         // Make this test to get priority for handling media key event
         // SDK < 26: Playback state should become *playing*
-        mPlayer.notifyPlayerStateChanged(SessionPlayer2.PLAYER_STATE_PLAYING);
+        mPlayer.notifyPlayerStateChanged(SessionPlayer.PLAYER_STATE_PLAYING);
 
         // SDK >= 26: Play a media item in the same process of the session.
         // Target raw resource should be short enough to finish within the time limit of @SmallTest.
@@ -193,7 +193,7 @@
     @Test
     public void testPlayPauseKeyEvent_play() throws Exception {
         prepareLooper();
-        mPlayer.notifyPlayerStateChanged(SessionPlayer2.PLAYER_STATE_PAUSED);
+        mPlayer.notifyPlayerStateChanged(SessionPlayer.PLAYER_STATE_PAUSED);
         dispatchMediaKeyEvent(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, false);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mPlayer.mPlayCalled);
@@ -217,13 +217,13 @@
         assertFalse(mPlayer.mPauseCalled);
     }
 
-    private static class TestSessionCallback extends MediaSession2.SessionCallback {
+    private static class TestSessionCallback extends MediaSession.SessionCallback {
         final CountDownLatch mCountDownLatch = new CountDownLatch(1);
         boolean mFastForwardCalled;
         boolean mRewindCalled;
 
         @Override
-        public SessionCommandGroup2 onConnect(MediaSession2 session, ControllerInfo controller) {
+        public SessionCommandGroup onConnect(MediaSession session, ControllerInfo controller) {
             if (sExpectedControllerPackageName.equals(controller.getPackageName())) {
                 return super.onConnect(session, controller);
             }
@@ -231,14 +231,14 @@
         }
 
         @Override
-        public int onFastForward(MediaSession2 session, ControllerInfo controller) {
+        public int onFastForward(MediaSession session, ControllerInfo controller) {
             mFastForwardCalled = true;
             mCountDownLatch.countDown();
             return RESULT_CODE_SUCCESS;
         }
 
         @Override
-        public int onRewind(MediaSession2 session, ControllerInfo controller) {
+        public int onRewind(MediaSession session, ControllerInfo controller) {
             mRewindCalled = true;
             mCountDownLatch.countDown();
             return RESULT_CODE_SUCCESS;
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2_PermissionTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession_PermissionTest.java
similarity index 74%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2_PermissionTest.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession_PermissionTest.java
index d361b6a..1793248 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession2_PermissionTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaSession_PermissionTest.java
@@ -18,32 +18,32 @@
 
 import static android.support.mediacompat.testlib.util.IntentUtil.CLIENT_PACKAGE_NAME;
 
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_PAUSE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_PLAY;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_MEDIA_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_PLAYLIST;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_FAST_FORWARD;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_URI;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_URI;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_REWIND;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SET_RATING;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SKIP_BACKWARD;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SKIP_FORWARD;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_VOLUME_ADJUST_VOLUME;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_VOLUME_SET_VOLUME;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_PAUSE;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_PLAY;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_MEDIA_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_PLAYLIST;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_REWIND;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_SET_RATING;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_SKIP_BACKWARD;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_SKIP_FORWARD;
+import static androidx.media2.SessionCommand.COMMAND_CODE_VOLUME_ADJUST_VOLUME;
+import static androidx.media2.SessionCommand.COMMAND_CODE_VOLUME_SET_VOLUME;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -60,14 +60,14 @@
 import androidx.annotation.NonNull;
 import androidx.media.test.service.MediaTestUtils;
 import androidx.media.test.service.MockPlayer;
-import androidx.media.test.service.RemoteMediaController2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.Rating2;
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.StarRating2;
+import androidx.media.test.service.RemoteMediaController;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.Rating;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.StarRating;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.runner.AndroidJUnit4;
@@ -82,16 +82,16 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests whether {@link MediaSession2} receives commands that hasn't allowed.
+ * Tests whether {@link MediaSession} receives commands that hasn't allowed.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @MediumTest
-public class MediaSession2_PermissionTest extends MediaSession2TestBase {
-    private static final String SESSION_ID = "MediaSession2Test_permission";
+public class MediaSession_PermissionTest extends MediaSessionTestBase {
+    private static final String SESSION_ID = "MediaSessionTest_permission";
 
     private MockPlayer mPlayer;
-    private MediaSession2 mSession;
+    private MediaSession mSession;
     private MySessionCallback mCallback;
 
     @Before
@@ -112,37 +112,37 @@
         mCallback = null;
     }
 
-    private MediaSession2 createSessionWithAllowedActions(final SessionCommandGroup2 commands) {
+    private MediaSession createSessionWithAllowedActions(final SessionCommandGroup commands) {
         mPlayer = new MockPlayer(1);
         mCallback = new MySessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(MediaSession2 session,
+            public SessionCommandGroup onConnect(MediaSession session,
                     ControllerInfo controller) {
                 if (!TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName())) {
                     return null;
                 }
-                return commands == null ? new SessionCommandGroup2() : commands;
+                return commands == null ? new SessionCommandGroup() : commands;
             }
         };
         if (mSession != null) {
             mSession.close();
         }
-        mSession = new MediaSession2.Builder(mContext, mPlayer).setId(SESSION_ID)
+        mSession = new MediaSession.Builder(mContext, mPlayer).setId(SESSION_ID)
                 .setSessionCallback(sHandlerExecutor, mCallback).build();
         return mSession;
     }
 
-    private SessionCommandGroup2 createCommandGroupWith(int commandCode) {
-        SessionCommandGroup2 commands = new SessionCommandGroup2.Builder()
-                .addCommand(new SessionCommand2(commandCode))
+    private SessionCommandGroup createCommandGroupWith(int commandCode) {
+        SessionCommandGroup commands = new SessionCommandGroup.Builder()
+                .addCommand(new SessionCommand(commandCode))
                 .build();
         return commands;
     }
 
-    private SessionCommandGroup2 createCommandGroupWithout(int commandCode) {
-        SessionCommandGroup2 commands = new SessionCommandGroup2.Builder()
-                .addAllPredefinedCommands(SessionCommand2.COMMAND_VERSION_1)
-                .removeCommand(new SessionCommand2(commandCode))
+    private SessionCommandGroup createCommandGroupWithout(int commandCode) {
+        SessionCommandGroup commands = new SessionCommandGroup.Builder()
+                .addAllPredefinedCommands(SessionCommand.COMMAND_VERSION_1)
+                .removeCommand(new SessionCommand(commandCode))
                 .build();
         return commands;
     }
@@ -150,14 +150,14 @@
     private void testOnCommandRequest(int commandCode, PermissionTestTask runnable)
             throws InterruptedException {
         createSessionWithAllowedActions(createCommandGroupWith(commandCode));
-        runnable.run(createRemoteController2(mSession.getToken()));
+        runnable.run(createRemoteController(mSession.getToken()));
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnCommandRequestCalled);
         assertEquals(commandCode, mCallback.mCommand.getCommandCode());
 
         createSessionWithAllowedActions(createCommandGroupWithout(commandCode));
-        runnable.run(createRemoteController2(mSession.getToken()));
+        runnable.run(createRemoteController(mSession.getToken()));
 
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnCommandRequestCalled);
@@ -168,7 +168,7 @@
         prepareLooper();
         testOnCommandRequest(COMMAND_CODE_PLAYER_PLAY, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.play();
             }
         });
@@ -179,7 +179,7 @@
         prepareLooper();
         testOnCommandRequest(COMMAND_CODE_PLAYER_PAUSE, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.pause();
             }
         });
@@ -191,7 +191,7 @@
         final long position = 10;
         testOnCommandRequest(COMMAND_CODE_PLAYER_SEEK_TO, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.seekTo(position);
             }
         });
@@ -203,7 +203,7 @@
         testOnCommandRequest(COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM,
                 new PermissionTestTask() {
                     @Override
-                    public void run(RemoteMediaController2 controller) {
+                    public void run(RemoteMediaController controller) {
                         controller.skipToNextItem();
                     }
                 });
@@ -215,7 +215,7 @@
         testOnCommandRequest(COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM,
                 new PermissionTestTask() {
                     @Override
-                    public void run(RemoteMediaController2 controller) {
+                    public void run(RemoteMediaController controller) {
                         controller.skipToPreviousItem();
                     }
                 });
@@ -228,7 +228,7 @@
                 COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM,
                 new PermissionTestTask() {
                     @Override
-                    public void run(RemoteMediaController2 controller) {
+                    public void run(RemoteMediaController controller) {
                         controller.skipToPlaylistItem(0);
                     }
                 });
@@ -240,7 +240,7 @@
         final List<String> list = MediaTestUtils.createMediaIds(2);
         testOnCommandRequest(COMMAND_CODE_PLAYER_SET_PLAYLIST, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.setPlaylist(list, null);
             }
         });
@@ -252,7 +252,7 @@
         final String testMediaId = "testSetMediaItem";
         testOnCommandRequest(COMMAND_CODE_PLAYER_SET_MEDIA_ITEM, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.setMediaItem(testMediaId);
             }
         });
@@ -264,7 +264,7 @@
         testOnCommandRequest(COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA,
                 new PermissionTestTask() {
                     @Override
-                    public void run(RemoteMediaController2 controller) {
+                    public void run(RemoteMediaController controller) {
                         controller.updatePlaylistMetadata(null);
                     }
                 });
@@ -276,7 +276,7 @@
         final String testMediaId = "testAddPlaylistItem";
         testOnCommandRequest(COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.addPlaylistItem(0, testMediaId);
             }
         });
@@ -285,11 +285,11 @@
     @Test
     public void testRemovePlaylistItem() throws InterruptedException {
         prepareLooper();
-        final MediaItem2 testItem = MediaTestUtils.createMediaItemWithMetadata();
+        final MediaItem testItem = MediaTestUtils.createMediaItemWithMetadata();
         testOnCommandRequest(COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
                 new PermissionTestTask() {
                     @Override
-                    public void run(RemoteMediaController2 controller) {
+                    public void run(RemoteMediaController controller) {
                         controller.removePlaylistItem(0);
                     }
                 });
@@ -302,7 +302,7 @@
         testOnCommandRequest(COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM,
                 new PermissionTestTask() {
                     @Override
-                    public void run(RemoteMediaController2 controller) {
+                    public void run(RemoteMediaController controller) {
                         controller.replacePlaylistItem(0, testMediaId);
                     }
                 });
@@ -313,7 +313,7 @@
         prepareLooper();
         testOnCommandRequest(COMMAND_CODE_VOLUME_SET_VOLUME, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.setVolumeTo(0, 0);
             }
         });
@@ -324,7 +324,7 @@
         prepareLooper();
         testOnCommandRequest(COMMAND_CODE_VOLUME_ADJUST_VOLUME, new PermissionTestTask() {
             @Override
-            public void run(RemoteMediaController2 controller) {
+            public void run(RemoteMediaController controller) {
                 controller.adjustVolume(0, 0);
             }
         });
@@ -335,14 +335,14 @@
         prepareLooper();
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_FAST_FORWARD));
-        createRemoteController2(mSession.getToken()).fastForward();
+        createRemoteController(mSession.getToken()).fastForward();
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnFastForwardCalled);
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_FAST_FORWARD));
-        createRemoteController2(mSession.getToken()).fastForward();
+        createRemoteController(mSession.getToken()).fastForward();
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnFastForwardCalled);
     }
@@ -352,14 +352,14 @@
         prepareLooper();
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_REWIND));
-        createRemoteController2(mSession.getToken()).rewind();
+        createRemoteController(mSession.getToken()).rewind();
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnRewindCalled);
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_REWIND));
-        createRemoteController2(mSession.getToken()).rewind();
+        createRemoteController(mSession.getToken()).rewind();
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnRewindCalled);
     }
@@ -369,14 +369,14 @@
         prepareLooper();
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_SKIP_FORWARD));
-        createRemoteController2(mSession.getToken()).skipForward();
+        createRemoteController(mSession.getToken()).skipForward();
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnSkipForwardCalled);
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_SKIP_FORWARD));
-        createRemoteController2(mSession.getToken()).skipForward();
+        createRemoteController(mSession.getToken()).skipForward();
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnSkipForwardCalled);
     }
@@ -386,14 +386,14 @@
         prepareLooper();
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_SKIP_BACKWARD));
-        createRemoteController2(mSession.getToken()).skipBackward();
+        createRemoteController(mSession.getToken()).skipBackward();
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnSkipBackwardCalled);
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_SKIP_BACKWARD));
-        createRemoteController2(mSession.getToken()).skipBackward();
+        createRemoteController(mSession.getToken()).skipBackward();
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnSkipBackwardCalled);
     }
@@ -404,7 +404,7 @@
         final String mediaId = "testPlayFromMediaId";
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID));
-        createRemoteController2(mSession.getToken()).playFromMediaId(mediaId, null);
+        createRemoteController(mSession.getToken()).playFromMediaId(mediaId, null);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnPlayFromMediaIdCalled);
@@ -413,7 +413,7 @@
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID));
-        createRemoteController2(mSession.getToken()).playFromMediaId(mediaId, null);
+        createRemoteController(mSession.getToken()).playFromMediaId(mediaId, null);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnPlayFromMediaIdCalled);
     }
@@ -424,7 +424,7 @@
         final Uri uri = Uri.parse("play://from.uri");
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_URI));
-        createRemoteController2(mSession.getToken()).playFromUri(uri, null);
+        createRemoteController(mSession.getToken()).playFromUri(uri, null);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnPlayFromUriCalled);
@@ -433,7 +433,7 @@
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_URI));
-        createRemoteController2(mSession.getToken()).playFromUri(uri, null);
+        createRemoteController(mSession.getToken()).playFromUri(uri, null);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnPlayFromUriCalled);
     }
@@ -444,7 +444,7 @@
         final String query = "testPlayFromSearch";
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH));
-        createRemoteController2(mSession.getToken()).playFromSearch(query, null);
+        createRemoteController(mSession.getToken()).playFromSearch(query, null);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnPlayFromSearchCalled);
@@ -453,7 +453,7 @@
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH));
-        createRemoteController2(mSession.getToken()).playFromSearch(query, null);
+        createRemoteController(mSession.getToken()).playFromSearch(query, null);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnPlayFromSearchCalled);
     }
@@ -464,7 +464,7 @@
         final String mediaId = "testPrepareFromMediaId";
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID));
-        createRemoteController2(mSession.getToken()).prepareFromMediaId(mediaId, null);
+        createRemoteController(mSession.getToken()).prepareFromMediaId(mediaId, null);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnPrepareFromMediaIdCalled);
@@ -473,7 +473,7 @@
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID));
-        createRemoteController2(mSession.getToken()).prepareFromMediaId(mediaId, null);
+        createRemoteController(mSession.getToken()).prepareFromMediaId(mediaId, null);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnPrepareFromMediaIdCalled);
     }
@@ -484,7 +484,7 @@
         final Uri uri = Uri.parse("prepare://from.uri");
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_URI));
-        createRemoteController2(mSession.getToken()).prepareFromUri(uri, null);
+        createRemoteController(mSession.getToken()).prepareFromUri(uri, null);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnPrepareFromUriCalled);
@@ -493,7 +493,7 @@
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_URI));
-        createRemoteController2(mSession.getToken()).prepareFromUri(uri, null);
+        createRemoteController(mSession.getToken()).prepareFromUri(uri, null);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnPrepareFromUriCalled);
     }
@@ -504,7 +504,7 @@
         final String query = "testPrepareFromSearch";
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
-        createRemoteController2(mSession.getToken()).prepareFromSearch(query, null);
+        createRemoteController(mSession.getToken()).prepareFromSearch(query, null);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnPrepareFromSearchCalled);
@@ -513,7 +513,7 @@
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
-        createRemoteController2(mSession.getToken()).prepareFromSearch(query, null);
+        createRemoteController(mSession.getToken()).prepareFromSearch(query, null);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnPrepareFromSearchCalled);
     }
@@ -522,10 +522,10 @@
     public void testSetRating() throws InterruptedException {
         prepareLooper();
         final String mediaId = "testSetRating";
-        final Rating2 rating = new StarRating2(5, 3.5f);
+        final Rating rating = new StarRating(5, 3.5f);
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_SET_RATING));
-        createRemoteController2(mSession.getToken()).setRating(mediaId, rating);
+        createRemoteController(mSession.getToken()).setRating(mediaId, rating);
 
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mCallback.mOnSetRatingCalled);
@@ -534,7 +534,7 @@
 
         createSessionWithAllowedActions(
                 createCommandGroupWithout(COMMAND_CODE_SESSION_SET_RATING));
-        createRemoteController2(mSession.getToken()).setRating(mediaId, rating);
+        createRemoteController(mSession.getToken()).setRating(mediaId, rating);
         assertFalse(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mCallback.mOnSetRatingCalled);
     }
@@ -545,7 +545,7 @@
         final String query = "testChangingPermissionWithSetAllowedCommands";
         createSessionWithAllowedActions(
                 createCommandGroupWith(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH));
-        RemoteMediaController2 controller = createRemoteController2(mSession.getToken());
+        RemoteMediaController controller = createRemoteController(mSession.getToken());
 
         controller.prepareFromSearch(query, null);
         assertTrue(mCallback.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -577,18 +577,18 @@
 
     @FunctionalInterface
     private interface PermissionTestTask {
-        void run(@NonNull RemoteMediaController2 controller);
+        void run(@NonNull RemoteMediaController controller);
     }
 
-    public class MySessionCallback extends MediaSession2.SessionCallback {
+    public class MySessionCallback extends MediaSession.SessionCallback {
         public CountDownLatch mCountDownLatch;
 
-        public SessionCommand2 mCommand;
+        public SessionCommand mCommand;
         public String mMediaId;
         public String mQuery;
         public Uri mUri;
         public Bundle mExtras;
-        public Rating2 mRating;
+        public Rating mRating;
 
         public boolean mOnCommandRequestCalled;
         public boolean mOnPlayFromMediaIdCalled;
@@ -630,8 +630,8 @@
         }
 
         @Override
-        public int onCommandRequest(MediaSession2 session, ControllerInfo controller,
-                SessionCommand2 command) {
+        public int onCommandRequest(MediaSession session, ControllerInfo controller,
+                SessionCommand command) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnCommandRequestCalled = true;
             mCommand = command;
@@ -640,7 +640,7 @@
         }
 
         @Override
-        public int onFastForward(MediaSession2 session, ControllerInfo controller) {
+        public int onFastForward(MediaSession session, ControllerInfo controller) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnFastForwardCalled = true;
             mCountDownLatch.countDown();
@@ -648,7 +648,7 @@
         }
 
         @Override
-        public int onRewind(MediaSession2 session, ControllerInfo controller) {
+        public int onRewind(MediaSession session, ControllerInfo controller) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnRewindCalled = true;
             mCountDownLatch.countDown();
@@ -656,7 +656,7 @@
         }
 
         @Override
-        public int onSkipForward(MediaSession2 session, ControllerInfo controller) {
+        public int onSkipForward(MediaSession session, ControllerInfo controller) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnSkipForwardCalled = true;
             mCountDownLatch.countDown();
@@ -664,7 +664,7 @@
         }
 
         @Override
-        public int onSkipBackward(MediaSession2 session, ControllerInfo controller) {
+        public int onSkipBackward(MediaSession session, ControllerInfo controller) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnSkipBackwardCalled = true;
             mCountDownLatch.countDown();
@@ -672,7 +672,7 @@
         }
 
         @Override
-        public int onPlayFromMediaId(MediaSession2 session, ControllerInfo controller,
+        public int onPlayFromMediaId(MediaSession session, ControllerInfo controller,
                 String mediaId, Bundle extras) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnPlayFromMediaIdCalled = true;
@@ -683,7 +683,7 @@
         }
 
         @Override
-        public int onPlayFromSearch(MediaSession2 session, ControllerInfo controller,
+        public int onPlayFromSearch(MediaSession session, ControllerInfo controller,
                 String query, Bundle extras) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnPlayFromSearchCalled = true;
@@ -694,7 +694,7 @@
         }
 
         @Override
-        public int onPlayFromUri(MediaSession2 session, ControllerInfo controller,
+        public int onPlayFromUri(MediaSession session, ControllerInfo controller,
                 Uri uri, Bundle extras) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnPlayFromUriCalled = true;
@@ -705,7 +705,7 @@
         }
 
         @Override
-        public int onPrepareFromMediaId(MediaSession2 session, ControllerInfo controller,
+        public int onPrepareFromMediaId(MediaSession session, ControllerInfo controller,
                 String mediaId, Bundle extras) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnPrepareFromMediaIdCalled = true;
@@ -716,7 +716,7 @@
         }
 
         @Override
-        public int onPrepareFromSearch(MediaSession2 session, ControllerInfo controller,
+        public int onPrepareFromSearch(MediaSession session, ControllerInfo controller,
                 String query, Bundle extras) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnPrepareFromSearchCalled = true;
@@ -727,7 +727,7 @@
         }
 
         @Override
-        public int onPrepareFromUri(MediaSession2 session, ControllerInfo controller,
+        public int onPrepareFromUri(MediaSession session, ControllerInfo controller,
                 Uri uri, Bundle extras) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnPrepareFromUriCalled = true;
@@ -738,8 +738,8 @@
         }
 
         @Override
-        public int onSetRating(MediaSession2 session, ControllerInfo controller,
-                String mediaId, Rating2 rating) {
+        public int onSetRating(MediaSession session, ControllerInfo controller,
+                String mediaId, Rating rating) {
             assertTrue(TextUtils.equals(CLIENT_PACKAGE_NAME, controller.getPackageName()));
             mOnSetRatingCalled = true;
             mMediaId = mediaId;
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaTestBase.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaTestBase.java
index 5999ee8..8d3839e 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaTestBase.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/MediaTestBase.java
@@ -31,7 +31,7 @@
     /**
      * All tests methods should start with this.
      * <p>
-     * MediaControllerCompat, which is wrapped by the MediaSession2, can be only created by the
+     * MediaControllerCompat, which is wrapped by the MediaSession, can be only created by the
      * thread whose Looper is prepared. However, when the presubmit test runs on the server,
      * test runs with the {@link org.junit.internal.runners.statements.FailOnTimeout} which creates
      * dedicated thread for running test methods while methods annotated with @After or @Before
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaBrowserCompatTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaBrowserCompatTest.java
index 070090c..64c8db1 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaBrowserCompatTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaBrowserCompatTest.java
@@ -34,7 +34,7 @@
 
 /** Test {@link RemoteMediaBrowserCompat}. */
 @RunWith(AndroidJUnit4.class)
-public class RemoteMediaBrowserCompatTest extends MediaSession2TestBase {
+public class RemoteMediaBrowserCompatTest extends MediaSessionTestBase {
     private Context mContext;
     private RemoteMediaBrowserCompat mRemoteBrowserCompat;
 
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaControllerCompatTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaControllerCompatTest.java
index 1c4ab47..cb5519e 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaControllerCompatTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteMediaControllerCompatTest.java
@@ -38,7 +38,7 @@
 
 /** Test {@link RemoteMediaControllerCompat}. */
 @RunWith(AndroidJUnit4.class)
-public class RemoteMediaControllerCompatTest extends MediaSession2TestBase {
+public class RemoteMediaControllerCompatTest extends MediaSessionTestBase {
     private Context mContext;
     private MediaSessionCompat mSessionCompat;
     private RemoteMediaControllerCompat mRemoteControllerCompat;
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteSessionPlayerTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteSessionPlayerTest.java
index 084ed46..7a1d96c 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteSessionPlayerTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/RemoteSessionPlayerTest.java
@@ -26,10 +26,10 @@
 
 import androidx.media.test.service.MockPlayer;
 import androidx.media.test.service.MockRemotePlayer;
-import androidx.media.test.service.RemoteMediaController2;
-import androidx.media2.MediaSession2;
-import androidx.media2.RemoteSessionPlayer2;
-import androidx.media2.SessionCommandGroup2;
+import androidx.media.test.service.RemoteMediaController;
+import androidx.media2.MediaSession;
+import androidx.media2.RemoteSessionPlayer;
+import androidx.media2.SessionCommandGroup;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -42,35 +42,35 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests whether the methods of {@link androidx.media2.RemoteSessionPlayer2} are triggered by the
+ * Tests whether the methods of {@link androidx.media2.RemoteSessionPlayer} are triggered by the
  * controller.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class RemoteSessionPlayerTest extends MediaSession2TestBase {
+public class RemoteSessionPlayerTest extends MediaSessionTestBase {
 
-    MediaSession2 mSession;
-    RemoteMediaController2 mController2;
+    MediaSession mSession;
+    RemoteMediaController mController;
 
     @Before
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        // Create this test specific MediaSession2 to use our own Handler.
-        mSession = new MediaSession2.Builder(mContext, new MockPlayer(1))
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() {
+        // Create this test specific MediaSession to use our own Handler.
+        mSession = new MediaSession.Builder(mContext, new MockPlayer(1))
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
-                            MediaSession2.ControllerInfo controller) {
+                    public SessionCommandGroup onConnect(MediaSession session,
+                            MediaSession.ControllerInfo controller) {
                         if (CLIENT_PACKAGE_NAME.equals(controller.getPackageName())) {
                             return super.onConnect(session, controller);
                         }
                         return null;
                     }
                 }).build();
-        // Create a default MediaController2 in client app.
-        mController2 = createRemoteController2(mSession.getToken());
+        // Create a default MediaController in client app.
+        mController = createRemoteController(mSession.getToken());
     }
 
     @After
@@ -87,14 +87,14 @@
         prepareLooper();
         final int maxVolume = 100;
         final int currentVolume = 23;
-        final int volumeControlType = RemoteSessionPlayer2.VOLUME_CONTROL_ABSOLUTE;
+        final int volumeControlType = RemoteSessionPlayer.VOLUME_CONTROL_ABSOLUTE;
         MockRemotePlayer remotePlayer = new MockRemotePlayer(
                 volumeControlType, maxVolume, currentVolume);
 
         mSession.updatePlayer(remotePlayer);
 
         final int targetVolume = 50;
-        mController2.setVolumeTo(targetVolume, 0 /* flags */);
+        mController.setVolumeTo(targetVolume, 0 /* flags */);
 
         assertTrue(remotePlayer.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(remotePlayer.mSetVolumeToCalled);
@@ -106,7 +106,7 @@
         prepareLooper();
         final int maxVolume = 100;
         final int currentVolume = 23;
-        final int volumeControlType = RemoteSessionPlayer2.VOLUME_CONTROL_ABSOLUTE;
+        final int volumeControlType = RemoteSessionPlayer.VOLUME_CONTROL_ABSOLUTE;
 
         MockRemotePlayer remotePlayer = new MockRemotePlayer(
                 volumeControlType, maxVolume, currentVolume);
@@ -114,7 +114,7 @@
         mSession.updatePlayer(remotePlayer);
 
         final int direction = AudioManager.ADJUST_RAISE;
-        mController2.adjustVolume(direction, 0 /* flags */);
+        mController.adjustVolume(direction, 0 /* flags */);
 
         assertTrue(remotePlayer.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(remotePlayer.mAdjustVolumeCalled);
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionCommand2Test.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionCommandTest.java
similarity index 94%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionCommand2Test.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionCommandTest.java
index 3afe270..b3420d7 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionCommand2Test.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionCommandTest.java
@@ -22,8 +22,8 @@
 
 import android.os.Build;
 
-import androidx.media2.SessionCommand2;
-import androidx.media2.SessionCommandGroup2;
+import androidx.media2.SessionCommand;
+import androidx.media2.SessionCommandGroup;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -41,12 +41,12 @@
 import java.util.Set;
 
 /**
- * Tests {@link SessionCommand2} and {@link SessionCommandGroup2}.
+ * Tests {@link SessionCommand} and {@link SessionCommandGroup}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class SessionCommand2Test {
+public class SessionCommandTest {
     // Prefix for all command codes
     private static final String PREFIX_COMMAND_CODE = "COMMAND_CODE_";
 
@@ -120,7 +120,7 @@
 
     private static List<Field> getSessionCommandsFields(String prefix) {
         final List<Field> list = new ArrayList<>();
-        final Field[] fields = SessionCommand2.class.getFields();
+        final Field[] fields = SessionCommand.class.getFields();
         if (fields != null) {
             for (int i = 0; i < fields.length; i++) {
                 if (isPublicStaticFinalInt(fields[i])
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionPlayerTest.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionPlayerTest.java
index fab65a6..a32c1c1 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionPlayerTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionPlayerTest.java
@@ -30,13 +30,13 @@
 import androidx.media.test.lib.TestUtils;
 import androidx.media.test.service.MediaTestUtils;
 import androidx.media.test.service.MockPlayer;
-import androidx.media.test.service.RemoteMediaController2;
-import androidx.media2.MediaItem2;
-import androidx.media2.MediaMetadata2;
-import androidx.media2.MediaSession2;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.SessionCommandGroup2;
-import androidx.media2.SessionPlayer2;
+import androidx.media.test.service.RemoteMediaController;
+import androidx.media2.MediaItem;
+import androidx.media2.MediaMetadata;
+import androidx.media2.MediaSession;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.SessionCommandGroup;
+import androidx.media2.SessionPlayer;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
@@ -51,28 +51,28 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests whether the methods of {@link SessionPlayer2} are triggered by the
+ * Tests whether the methods of {@link SessionPlayer} are triggered by the
  * session/controller.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class SessionPlayerTest extends MediaSession2TestBase {
+public class SessionPlayerTest extends MediaSessionTestBase {
 
-    MediaSession2 mSession;
+    MediaSession mSession;
     MockPlayer mPlayer;
-    RemoteMediaController2 mController2;
+    RemoteMediaController mController;
 
     @Before
     @Override
     public void setUp() throws Exception {
         super.setUp();
         mPlayer = new MockPlayer(1);
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, new MediaSession2.SessionCallback() {
+        mSession = new MediaSession.Builder(mContext, mPlayer)
+                .setSessionCallback(sHandlerExecutor, new MediaSession.SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
-                            MediaSession2.ControllerInfo controller) {
+                    public SessionCommandGroup onConnect(MediaSession session,
+                            MediaSession.ControllerInfo controller) {
                         if (CLIENT_PACKAGE_NAME.equals(controller.getPackageName())) {
                             return super.onConnect(session, controller);
                         }
@@ -80,14 +80,14 @@
                     }
 
                     @Override
-                    public MediaItem2 onCreateMediaItem(MediaSession2 session,
+                    public MediaItem onCreateMediaItem(MediaSession session,
                             ControllerInfo controller, String mediaId) {
                         return MediaTestUtils.createMediaItem(mediaId);
                     }
                 }).build();
 
-        // Create a default MediaController2 in client app.
-        mController2 = createRemoteController2(mSession.getToken());
+        // Create a default MediaController in client app.
+        mController = createRemoteController(mSession.getToken());
     }
 
     @After
@@ -108,7 +108,7 @@
 
     @Test
     public void testPlayByController() {
-        mController2.play();
+        mController.play();
         try {
             assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } catch (InterruptedException e) {
@@ -126,7 +126,7 @@
 
     @Test
     public void testPauseByController() {
-        mController2.pause();
+        mController.pause();
         try {
             assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } catch (InterruptedException e) {
@@ -144,7 +144,7 @@
 
     @Test
     public void testPrepareByController() {
-        mController2.prepare();
+        mController.prepare();
         try {
             assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } catch (InterruptedException e) {
@@ -165,7 +165,7 @@
     @Test
     public void testSeekToByController() {
         final long seekPosition = 12125L;
-        mController2.seekTo(seekPosition);
+        mController.seekTo(seekPosition);
         try {
             assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } catch (InterruptedException e) {
@@ -187,7 +187,7 @@
     @Test
     public void testSetPlaybackSpeedByController() throws Exception {
         final float speed = 1.5f;
-        mController2.setPlaybackSpeed(speed);
+        mController.setPlaybackSpeed(speed);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertEquals(speed, mPlayer.mPlaybackSpeed, 0.0f);
     }
@@ -195,7 +195,7 @@
     @Test
     public void testSetPlaylistBySession() {
         prepareLooper();
-        final List<MediaItem2> list = MediaTestUtils.createPlaylist(2);
+        final List<MediaItem> list = MediaTestUtils.createPlaylist(2);
         mSession.getPlayer().setPlaylist(list, null);
         assertTrue(mPlayer.mSetPlaylistCalled);
         assertSame(list, mPlayer.mPlaylist);
@@ -205,7 +205,7 @@
     @Test
     public void testSetPlaylistByController() throws InterruptedException {
         final List<String> list = MediaTestUtils.createMediaIds(2);
-        mController2.setPlaylist(list, null /* metadata */);
+        mController.setPlaylist(list, null /* metadata */);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mSetPlaylistCalled);
@@ -223,7 +223,7 @@
     public void testSetPlaylistByControllerWithLongPlaylist() throws InterruptedException {
         final int listSize = 5000;
         // Make client app to generate a long list, and call setPlaylist() with it.
-        mController2.createAndSetDummyPlaylist(listSize, null /* metadata */);
+        mController.createAndSetDummyPlaylist(listSize, null /* metadata */);
         assertTrue(mPlayer.mCountDownLatch.await(10, TimeUnit.SECONDS));
 
         assertTrue(mPlayer.mSetPlaylistCalled);
@@ -240,7 +240,7 @@
     @Test
     public void testUpdatePlaylistMetadataBySession() {
         prepareLooper();
-        final MediaMetadata2 testMetadata = MediaTestUtils.createMetadata();
+        final MediaMetadata testMetadata = MediaTestUtils.createMetadata();
         mSession.getPlayer().updatePlaylistMetadata(testMetadata);
         assertTrue(mPlayer.mUpdatePlaylistMetadataCalled);
         assertSame(testMetadata, mPlayer.mMetadata);
@@ -248,8 +248,8 @@
 
     @Test
     public void testUpdatePlaylistMetadataByController() throws InterruptedException {
-        final MediaMetadata2 testMetadata = MediaTestUtils.createMetadata();
-        mController2.updatePlaylistMetadata(testMetadata);
+        final MediaMetadata testMetadata = MediaTestUtils.createMetadata();
+        mController.updatePlaylistMetadata(testMetadata);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mUpdatePlaylistMetadataCalled);
@@ -261,7 +261,7 @@
     public void testAddPlaylistItemBySession() {
         prepareLooper();
         final int testIndex = 12;
-        final MediaItem2 testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().addPlaylistItem(testIndex, testMediaItem);
         assertTrue(mPlayer.mAddPlaylistItemCalled);
         assertEquals(testIndex, mPlayer.mIndex);
@@ -273,19 +273,19 @@
         final int testIndex = 12;
         final String testMediaId = "testAddPlaylistItemByController";
 
-        mController2.addPlaylistItem(testIndex, testMediaId);
+        mController.addPlaylistItem(testIndex, testMediaId);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mAddPlaylistItemCalled);
         assertEquals(testIndex, mPlayer.mIndex);
-        // MediaController2.addPlaylistItem does not ensure the equality of the items.
+        // MediaController.addPlaylistItem does not ensure the equality of the items.
         assertEquals(testMediaId, mPlayer.mItem.getMediaId());
     }
 
     @Test
     public void testRemovePlaylistItemBySession() {
         prepareLooper();
-        final MediaItem2 testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().removePlaylistItem(testMediaItem);
         assertTrue(mPlayer.mRemovePlaylistItemCalled);
         assertSame(testMediaItem, mPlayer.mItem);
@@ -294,9 +294,9 @@
     @Test
     public void testRemovePlaylistItemByController() throws InterruptedException {
         mPlayer.mPlaylist = MediaTestUtils.createPlaylist(2);
-        MediaItem2 targetItem = mPlayer.mPlaylist.get(0);
+        MediaItem targetItem = mPlayer.mPlaylist.get(0);
 
-        mController2.removePlaylistItem(0);
+        mController.removePlaylistItem(0);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mRemovePlaylistItemCalled);
@@ -307,7 +307,7 @@
     public void testReplacePlaylistItemBySession() throws InterruptedException {
         prepareLooper();
         final int testIndex = 12;
-        final MediaItem2 testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().replacePlaylistItem(testIndex, testMediaItem);
         assertTrue(mPlayer.mReplacePlaylistItemCalled);
         assertEquals(testIndex, mPlayer.mIndex);
@@ -319,11 +319,11 @@
         final int testIndex = 12;
         final String testMediaId = "testReplacePlaylistItemByController";
 
-        mController2.replacePlaylistItem(testIndex, testMediaId);
+        mController.replacePlaylistItem(testIndex, testMediaId);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mReplacePlaylistItemCalled);
-        // MediaController2.replacePlaylistItem does not ensure the equality of the items.
+        // MediaController.replacePlaylistItem does not ensure the equality of the items.
         assertEquals(testMediaId, mPlayer.mItem.getMediaId());
     }
 
@@ -336,7 +336,7 @@
 
     @Test
     public void testSkipToPreviousItemByController() throws InterruptedException {
-        mController2.skipToPreviousItem();
+        mController.skipToPreviousItem();
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mPlayer.mSkipToPreviousItemCalled);
     }
@@ -350,7 +350,7 @@
 
     @Test
     public void testSkipToNextItemByController() throws InterruptedException {
-        mController2.skipToNextItem();
+        mController.skipToNextItem();
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mPlayer.mSkipToNextItemCalled);
     }
@@ -358,7 +358,7 @@
     @Test
     public void testSkipToPlaylistItemBySession() throws Exception {
         prepareLooper();
-        final MediaItem2 testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = MediaTestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().skipToPlaylistItem(testMediaItem);
         assertTrue(mPlayer.mSkipToPlaylistItemCalled);
         assertSame(testMediaItem, mPlayer.mItem);
@@ -368,7 +368,7 @@
     public void testSkipToPlaylistItemByController() throws InterruptedException {
         mPlayer.mPlaylist = MediaTestUtils.createPlaylist(3);
 
-        mController2.skipToPlaylistItem(2);
+        mController.skipToPlaylistItem(2);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mSkipToPlaylistItemCalled);
@@ -378,7 +378,7 @@
     @Test
     public void testSetShuffleModeBySession() {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         mSession.getPlayer().setShuffleMode(testShuffleMode);
         assertTrue(mPlayer.mSetShuffleModeCalled);
         assertEquals(testShuffleMode, mPlayer.mShuffleMode);
@@ -386,8 +386,8 @@
 
     @Test
     public void testSetShuffleModeByController() throws InterruptedException {
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
-        mController2.setShuffleMode(testShuffleMode);
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
+        mController.setShuffleMode(testShuffleMode);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mSetShuffleModeCalled);
@@ -397,7 +397,7 @@
     @Test
     public void testSetRepeatModeBySession() {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         mSession.getPlayer().setRepeatMode(testRepeatMode);
         assertTrue(mPlayer.mSetRepeatModeCalled);
         assertEquals(testRepeatMode, mPlayer.mRepeatMode);
@@ -405,8 +405,8 @@
 
     @Test
     public void testSetRepeatModeByController() throws InterruptedException {
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
-        mController2.setRepeatMode(testRepeatMode);
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
+        mController.setRepeatMode(testRepeatMode);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mSetRepeatModeCalled);
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionToken2Test.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionTokenTest.java
similarity index 73%
rename from media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionToken2Test.java
rename to media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionTokenTest.java
index 96d8a93..4d83728 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionToken2Test.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/tests/SessionTokenTest.java
@@ -23,9 +23,9 @@
 import android.os.Build;
 import android.os.Process;
 
-import androidx.media.test.service.MockMediaLibraryService2;
-import androidx.media.test.service.MockMediaSessionService2;
-import androidx.media2.SessionToken2;
+import androidx.media.test.service.MockMediaLibraryService;
+import androidx.media.test.service.MockMediaSessionService;
+import androidx.media2.SessionToken;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
@@ -36,12 +36,12 @@
 import org.junit.runner.RunWith;
 
 /**
- * Tests {@link SessionToken2}.
+ * Tests {@link SessionToken}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class SessionToken2Test {
+public class SessionTokenTest {
     private Context mContext;
 
     @Before
@@ -51,21 +51,21 @@
 
     @Test
     public void testConstructor_sessionService() {
-        SessionToken2 token = new SessionToken2(mContext, new ComponentName(
+        SessionToken token = new SessionToken(mContext, new ComponentName(
                 mContext.getPackageName(),
-                MockMediaSessionService2.class.getCanonicalName()));
+                MockMediaSessionService.class.getCanonicalName()));
         assertEquals(mContext.getPackageName(), token.getPackageName());
         assertEquals(Process.myUid(), token.getUid());
-        assertEquals(SessionToken2.TYPE_SESSION_SERVICE, token.getType());
+        assertEquals(SessionToken.TYPE_SESSION_SERVICE, token.getType());
     }
 
     @Test
     public void testConstructor_libraryService() {
-        SessionToken2 token = new SessionToken2(mContext, new ComponentName(
+        SessionToken token = new SessionToken(mContext, new ComponentName(
                 mContext.getPackageName(),
-                MockMediaLibraryService2.class.getCanonicalName()));
+                MockMediaLibraryService.class.getCanonicalName()));
         assertEquals(mContext.getPackageName(), token.getPackageName());
         assertEquals(Process.myUid(), token.getUid());
-        assertEquals(SessionToken2.TYPE_LIBRARY_SERVICE, token.getType());
+        assertEquals(SessionToken.TYPE_LIBRARY_SERVICE, token.getType());
     }
 }
diff --git a/media/version-compat-tests/current/service/src/main/res/drawable/big_buck_bunny.jpg b/media/version-compat-tests/current/service/src/main/res/drawable/big_buck_bunny.jpg
new file mode 100644
index 0000000..58de31d
--- /dev/null
+++ b/media/version-compat-tests/current/service/src/main/res/drawable/big_buck_bunny.jpg
Binary files differ
diff --git a/media/version-compat-tests/current/service/src/main/res/drawable/big_buck_bunny.png b/media/version-compat-tests/current/service/src/main/res/drawable/big_buck_bunny.png
deleted file mode 100644
index 282d5cc..0000000
--- a/media/version-compat-tests/current/service/src/main/res/drawable/big_buck_bunny.png
+++ /dev/null
Binary files differ
diff --git a/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaController2.aidl b/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaController.aidl
similarity index 90%
rename from media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaController2.aidl
rename to media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaController.aidl
index ab82b66..231c612 100644
--- a/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaController2.aidl
+++ b/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaController.aidl
@@ -21,12 +21,12 @@
 
 import androidx.versionedparcelable.ParcelImpl;
 
-interface IRemoteMediaController2 {
+interface IRemoteMediaController {
 
     void create(boolean isBrowser, String controllerId, in ParcelImpl token,
             boolean waitForConnection);
 
-    // MediaController2 Methods
+    // MediaController Methods
     ParcelImpl getConnectedSessionToken(String controllerId);
     void play(String controllerId);
     void pause(String controllerId);
@@ -47,7 +47,7 @@
     void setRepeatMode(String controllerId, int repeatMode);
     void setVolumeTo(String controllerId, int value, int flags);
     void adjustVolume(String controllerId, int direction, int flags);
-    void sendCustomCommand(String controllerId, in Bundle command, in Bundle args);
+    void sendCustomCommand(String controllerId, in ParcelImpl command, in Bundle args);
     void fastForward(String controllerId);
     void rewind(String controllerId);
     void skipForward(String controllerId);
@@ -59,12 +59,9 @@
     void prepareFromSearch(String controllerId, String query, in Bundle extras);
     void prepareFromUri(String controllerId, in Uri uri, in Bundle extras);
     void setRating(String controllerId, String mediaId, in ParcelImpl rating);
-    void subscribeRoutesInfo(String controllerId);
-    void unsubscribeRoutesInfo(String controllerId);
-    void selectRoute(String controllerId, in Bundle route);
     void close(String controllerId);
 
-    // MediaBrowser2 methods
+    // MediaBrowser methods
     void getLibraryRoot(String controllerId, in ParcelImpl libraryParams);
     void subscribe(String controllerId, String parentId, in ParcelImpl libraryParams);
     void unsubscribe(String controllerId, String parentId);
diff --git a/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession2.aidl b/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession.aidl
similarity index 80%
rename from media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession2.aidl
rename to media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession.aidl
index c73a319..88e5335 100644
--- a/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession2.aidl
+++ b/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession.aidl
@@ -21,23 +21,22 @@
 
 import androidx.versionedparcelable.ParcelImpl;
 
-interface IRemoteMediaSession2 {
+interface IRemoteMediaSession {
 
     void create(String sessionId);
 
-    // MediaSession2 Methods
+    // MediaSession Methods
     ParcelImpl getToken(String sessionId);
     Bundle getCompatToken(String sessionId);
     void updatePlayer(String sessionId, in Bundle playerBundle);
-    void broadcastCustomCommand(String sessionId, in Bundle command, in Bundle args);
-    void sendCustomCommand(String sessionId, in Bundle controller, in Bundle command,
+    void broadcastCustomCommand(String sessionId, in ParcelImpl command, in Bundle args);
+    void sendCustomCommand(String sessionId, in Bundle controller, in ParcelImpl command,
             in Bundle args);
     void close(String sessionId);
-    void setAllowedCommands(String sessionId, in Bundle controller, in Bundle commands);
-    void notifyRoutesInfoChanged(String sessionId, in Bundle controller, in List<Bundle> routes);
-    void setCustomLayout(String sessionId, in Bundle controller, in List<Bundle> layout);
+    void setAllowedCommands(String sessionId, in Bundle controller, in ParcelImpl commands);
+    void setCustomLayout(String sessionId, in Bundle controller, in List<ParcelImpl> layout);
 
-    // SessionPlayer2 Methods
+    // SessionPlayer Methods
     void setPlayerState(String sessionId, int state);
     void setCurrentPosition(String sessionId, long pos);
     void setBufferedPosition(String sessionId, long pos);
@@ -50,10 +49,11 @@
     void notifyCurrentMediaItemChanged(String sessionId, int index);
     void notifyAudioAttributesChanged(String sessionId, in Bundle attrs);
 
-    void setPlaylist(String sessionId, in List<Bundle> playlist);
+    void setPlaylist(String sessionId, in List<ParcelImpl> playlist);
     void createAndSetDummyPlaylist(String sessionId, int size);
-    void setPlaylistWithDummyItem(String sessionId, in List<Bundle> playlist);
-    void setPlaylistMetadata(String sessionId, in Bundle metadata);
+    void setPlaylistWithDummyItem(String sessionId, in List<ParcelImpl> playlist);
+    void setPlaylistMetadata(String sessionId, in ParcelImpl metadata);
+    void setPlaylistMetadataWithLargeBitmaps(String sessionId, int count, int width, int height);
     void setShuffleMode(String sessionId, int shuffleMode);
     void setRepeatMode(String sessionId, int repeatMode);
     void setCurrentMediaItem(String sessionId, int index);
diff --git a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java
index 8a01722..c9572fb 100644
--- a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java
+++ b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java
@@ -23,10 +23,10 @@
 
     public static final ComponentName MEDIA_SESSION2_PROVIDER_SERVICE = new ComponentName(
             IntentUtil.SERVICE_PACKAGE_NAME,
-            "androidx.media.test.service.MediaSession2ProviderService");
+            "androidx.media.test.service.MediaSessionProviderService");
     public static final ComponentName MEDIA_CONTROLLER2_PROVIDER_SERVICE = new ComponentName(
             IntentUtil.CLIENT_PACKAGE_NAME,
-            "androidx.media.test.client.MediaController2ProviderService");
+            "androidx.media.test.client.MediaControllerProviderService");
     public static final ComponentName MEDIA_SESSION_COMPAT_PROVIDER_SERVICE = new ComponentName(
             IntentUtil.SERVICE_PACKAGE_NAME,
             "androidx.media.test.service.MediaSessionCompatProviderService");
@@ -39,10 +39,10 @@
 
     public static final ComponentName MOCK_MEDIA_SESSION_SERVICE = new ComponentName(
             IntentUtil.SERVICE_PACKAGE_NAME,
-            "androidx.media.test.service.MockMediaSessionService2");
+            "androidx.media.test.service.MockMediaSessionService");
     public static final ComponentName MOCK_MEDIA_LIBRARY_SERVICE = new ComponentName(
             IntentUtil.SERVICE_PACKAGE_NAME,
-            "androidx.media.test.service.MockMediaLibraryService2");
+            "androidx.media.test.service.MockMediaLibraryService");
 
     public static final String ACTION_MEDIA_SESSION2 = "androidx.media.test.action.MEDIA_SESSION2";
     public static final String ACTION_MEDIA_CONTROLLER2 =
diff --git a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaBrowser2Constants.java b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaBrowserConstants.java
similarity index 96%
rename from media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaBrowser2Constants.java
rename to media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaBrowserConstants.java
index 84775709..d47fb99 100644
--- a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaBrowser2Constants.java
+++ b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaBrowserConstants.java
@@ -22,9 +22,9 @@
 import java.util.List;
 
 /**
- * Constants for calling MediaBrowser2 methods.
+ * Constants for calling MediaBrowser methods.
  */
-public class MediaBrowser2Constants {
+public class MediaBrowserConstants {
 
     public static final String ROOT_ID = "rootId";
     public static final Bundle ROOT_EXTRAS = new Bundle();
@@ -87,6 +87,6 @@
         }
     }
 
-    private MediaBrowser2Constants() {
+    private MediaBrowserConstants() {
     }
 }
diff --git a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSession2Constants.java b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSessionConstants.java
similarity index 89%
rename from media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSession2Constants.java
rename to media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSessionConstants.java
index c7af76f..608775a 100644
--- a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSession2Constants.java
+++ b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSessionConstants.java
@@ -17,9 +17,9 @@
 package androidx.media.test.lib;
 
 /**
- * Constants for calling MediaSession2 methods.
+ * Constants for calling MediaSession methods.
  */
-public class MediaSession2Constants {
+public class MediaSessionConstants {
 
     // Test method names
     public static final String TEST_GET_SESSION_ACTIVITY = "testGetSessionActivity";
@@ -28,6 +28,6 @@
     public static final String TEST_ON_PLAYLIST_METADATA_CHANGED_SESSION_SET_PLAYLIST =
             "testOnPlaylistMetadataChanged_sessionSetPlaylist";
 
-    private MediaSession2Constants() {
+    private MediaSessionConstants() {
     }
 }
diff --git a/media/version-compat-tests/runtest.sh b/media/version-compat-tests/runtest.sh
index 9a58d56..a63a3e36 100755
--- a/media/version-compat-tests/runtest.sh
+++ b/media/version-compat-tests/runtest.sh
@@ -78,7 +78,7 @@
     elif [[ $OPTION_TEST_TARGET == *"service"* ]]; then
       ${test_command} $OPTION_TEST_TARGET ${service_test_runner}
     else
-      # Since there is no MediaSession2 APIs in previous support library, don't run the test.
+      # Since there is no MediaSession APIs in previous support library, don't run the test.
       # Instead, only run mediacompat tests.
       if [[ $CLIENT_VERSION != "tot" || $SERVICE_VERSION != "tot" ]]; then
         ${test_command} "-e package $MEDIA_COMPAT_CLIENT_TEST_JAVA_PACKAGE" ${client_test_runner}
diff --git a/media2/api/1.0.0-alpha03.txt b/media2/api/1.0.0-alpha03.txt
index 82d51ca..eafeed5 100644
--- a/media2/api/1.0.0-alpha03.txt
+++ b/media2/api/1.0.0-alpha03.txt
@@ -1,69 +1,69 @@
 // Signature format: 2.0
 package androidx.media2 {
 
-  public class CallbackMediaItem2 extends androidx.media2.MediaItem2 {
-    method public androidx.media2.DataSourceCallback2 getDataSourceCallback2();
+  public class CallbackMediaItem extends androidx.media2.MediaItem {
+    method public androidx.media2.DataSourceCallback getDataSourceCallback();
   }
 
-  public static final class CallbackMediaItem2.Builder {
-    ctor public CallbackMediaItem2.Builder(androidx.media2.DataSourceCallback2);
-    method public androidx.media2.CallbackMediaItem2 build();
-    method public androidx.media2.CallbackMediaItem2.Builder! setEndPosition(long);
-    method public androidx.media2.CallbackMediaItem2.Builder! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.CallbackMediaItem2.Builder! setStartPosition(long);
+  public static final class CallbackMediaItem.Builder {
+    ctor public CallbackMediaItem.Builder(androidx.media2.DataSourceCallback);
+    method public androidx.media2.CallbackMediaItem build();
+    method public androidx.media2.CallbackMediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.CallbackMediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.CallbackMediaItem.Builder! setStartPosition(long);
   }
 
-  public abstract class DataSourceCallback2 implements java.io.Closeable {
-    ctor public DataSourceCallback2();
+  public abstract class DataSourceCallback implements java.io.Closeable {
+    ctor public DataSourceCallback();
     method public abstract long getSize() throws java.io.IOException;
     method public abstract int readAt(long, byte[], int, int) throws java.io.IOException;
   }
 
-  public class FileMediaItem2 extends androidx.media2.MediaItem2 {
+  public class FileMediaItem extends androidx.media2.MediaItem {
     method public java.io.FileDescriptor getFileDescriptor();
     method public long getFileDescriptorLength();
     method public long getFileDescriptorOffset();
     field public static final long FD_LENGTH_UNKNOWN = 576460752303423487L; // 0x7ffffffffffffffL
   }
 
-  public static final class FileMediaItem2.Builder {
-    ctor public FileMediaItem2.Builder(java.io.FileDescriptor);
-    ctor public FileMediaItem2.Builder(java.io.FileDescriptor, long, long);
-    method public androidx.media2.FileMediaItem2 build();
-    method public androidx.media2.FileMediaItem2.Builder! setEndPosition(long);
-    method public androidx.media2.FileMediaItem2.Builder! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.FileMediaItem2.Builder! setStartPosition(long);
+  public static final class FileMediaItem.Builder {
+    ctor public FileMediaItem.Builder(java.io.FileDescriptor);
+    ctor public FileMediaItem.Builder(java.io.FileDescriptor, long, long);
+    method public androidx.media2.FileMediaItem build();
+    method public androidx.media2.FileMediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.FileMediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.FileMediaItem.Builder! setStartPosition(long);
   }
 
-  public final class HeartRating2 implements androidx.media2.Rating2 {
-    ctor public HeartRating2();
-    ctor public HeartRating2(boolean);
+  public final class HeartRating implements androidx.media2.Rating {
+    ctor public HeartRating();
+    ctor public HeartRating(boolean);
     method public boolean hasHeart();
     method public boolean isRated();
   }
 
-  public class MediaBrowser2 extends androidx.media2.MediaController2 {
-    ctor public MediaBrowser2(android.content.Context, androidx.media2.SessionToken2, java.util.concurrent.Executor, androidx.media2.MediaBrowser2.BrowserCallback);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getChildren(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getItem(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getLibraryRoot(androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getSearchResult(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> search(String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> subscribe(String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> unsubscribe(String);
+  public class MediaBrowser extends androidx.media2.MediaController {
+    ctor public MediaBrowser(android.content.Context, androidx.media2.SessionToken, java.util.concurrent.Executor, androidx.media2.MediaBrowser.BrowserCallback);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getChildren(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getItem(String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getLibraryRoot(androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getSearchResult(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> search(String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> subscribe(String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> unsubscribe(String);
   }
 
-  public static class MediaBrowser2.BrowserCallback extends androidx.media2.MediaController2.ControllerCallback {
-    ctor public MediaBrowser2.BrowserCallback();
-    method public void onChildrenChanged(androidx.media2.MediaBrowser2, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public void onSearchResultChanged(androidx.media2.MediaBrowser2, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
+  public static class MediaBrowser.BrowserCallback extends androidx.media2.MediaController.ControllerCallback {
+    ctor public MediaBrowser.BrowserCallback();
+    method public void onChildrenChanged(androidx.media2.MediaBrowser, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public void onSearchResultChanged(androidx.media2.MediaBrowser, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
   }
 
-  public static class MediaBrowser2.BrowserResult extends androidx.versionedparcelable.CustomVersionedParcelable {
+  public static class MediaBrowser.BrowserResult extends androidx.versionedparcelable.CustomVersionedParcelable {
     method public long getCompletionTime();
-    method public androidx.media2.MediaLibraryService2.LibraryParams? getLibraryParams();
-    method public androidx.media2.MediaItem2? getMediaItem();
-    method public java.util.List<androidx.media2.MediaItem2>? getMediaItems();
+    method public androidx.media2.MediaLibraryService.LibraryParams? getLibraryParams();
+    method public androidx.media2.MediaItem? getMediaItem();
+    method public java.util.List<androidx.media2.MediaItem>? getMediaItems();
     method public int getResultCode();
     field public static final int RESULT_CODE_AUTHENTICATION_EXPIRED = -102; // 0xffffff9a
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
@@ -83,76 +83,76 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public class MediaController2 implements java.lang.AutoCloseable {
-    ctor public MediaController2(android.content.Context, androidx.media2.SessionToken2, java.util.concurrent.Executor, androidx.media2.MediaController2.ControllerCallback);
-    ctor public MediaController2(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token, java.util.concurrent.Executor, androidx.media2.MediaController2.ControllerCallback);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> addPlaylistItem(@IntRange(from=0) int, String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> adjustVolume(int, int);
+  public class MediaController implements java.lang.AutoCloseable {
+    ctor public MediaController(android.content.Context, androidx.media2.SessionToken, java.util.concurrent.Executor, androidx.media2.MediaController.ControllerCallback);
+    ctor public MediaController(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token, java.util.concurrent.Executor, androidx.media2.MediaController.ControllerCallback);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> addPlaylistItem(@IntRange(from=0) int, String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> adjustVolume(int, int);
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> fastForward();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> fastForward();
     method public long getBufferedPosition();
     method public int getBufferingState();
-    method public androidx.media2.SessionToken2? getConnectedSessionToken();
-    method public androidx.media2.MediaItem2? getCurrentMediaItem();
+    method public androidx.media2.SessionToken? getConnectedSessionToken();
+    method public androidx.media2.MediaItem? getCurrentMediaItem();
     method public long getCurrentPosition();
     method public long getDuration();
-    method public androidx.media2.MediaController2.PlaybackInfo? getPlaybackInfo();
+    method public androidx.media2.MediaController.PlaybackInfo? getPlaybackInfo();
     method public float getPlaybackSpeed();
     method public int getPlayerState();
-    method public java.util.List<androidx.media2.MediaItem2>? getPlaylist();
-    method public androidx.media2.MediaMetadata2? getPlaylistMetadata();
+    method public java.util.List<androidx.media2.MediaItem>? getPlaylist();
+    method public androidx.media2.MediaMetadata? getPlaylistMetadata();
     method public int getRepeatMode();
     method public android.app.PendingIntent? getSessionActivity();
     method public int getShuffleMode();
     method public boolean isConnected();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> pause();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> play();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> prepare();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> removePlaylistItem(@IntRange(from=0) int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> replacePlaylistItem(@IntRange(from=0) int, String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> rewind();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> seekTo(long);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> sendCustomCommand(androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setMediaItem(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setPlaybackSpeed(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setPlaylist(java.util.List<java.lang.String>, androidx.media2.MediaMetadata2?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setRating(String, androidx.media2.Rating2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setRepeatMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setShuffleMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setVolumeTo(int, int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipBackward();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipForward();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipToNextPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipToPlaylistItem(@IntRange(from=0) int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipToPreviousPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata2?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> pause();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> play();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> prepare();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> removePlaylistItem(@IntRange(from=0) int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> replacePlaylistItem(@IntRange(from=0) int, String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> rewind();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> seekTo(long);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> sendCustomCommand(androidx.media2.SessionCommand, android.os.Bundle?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setMediaItem(String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setPlaybackSpeed(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setPlaylist(java.util.List<java.lang.String>, androidx.media2.MediaMetadata?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setRating(String, androidx.media2.Rating);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setRepeatMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setShuffleMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setVolumeTo(int, int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipBackward();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipForward();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipToNextPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipToPlaylistItem(@IntRange(from=0) int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipToPreviousPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata?);
   }
 
-  public abstract static class MediaController2.ControllerCallback {
-    ctor public MediaController2.ControllerCallback();
-    method public void onAllowedCommandsChanged(androidx.media2.MediaController2, androidx.media2.SessionCommandGroup2);
-    method public void onBufferingStateChanged(androidx.media2.MediaController2, androidx.media2.MediaItem2, int);
-    method public void onConnected(androidx.media2.MediaController2, androidx.media2.SessionCommandGroup2);
-    method public void onCurrentMediaItemChanged(androidx.media2.MediaController2, androidx.media2.MediaItem2?);
-    method public androidx.media2.MediaController2.ControllerResult onCustomCommand(androidx.media2.MediaController2, androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public void onDisconnected(androidx.media2.MediaController2);
-    method public void onPlaybackCompleted(androidx.media2.MediaController2);
-    method public void onPlaybackInfoChanged(androidx.media2.MediaController2, androidx.media2.MediaController2.PlaybackInfo);
-    method public void onPlaybackSpeedChanged(androidx.media2.MediaController2, float);
-    method public void onPlayerStateChanged(androidx.media2.MediaController2, int);
-    method public void onPlaylistChanged(androidx.media2.MediaController2, java.util.List<androidx.media2.MediaItem2>?, androidx.media2.MediaMetadata2?);
-    method public void onPlaylistMetadataChanged(androidx.media2.MediaController2, androidx.media2.MediaMetadata2?);
-    method public void onRepeatModeChanged(androidx.media2.MediaController2, int);
-    method public void onSeekCompleted(androidx.media2.MediaController2, long);
-    method public int onSetCustomLayout(androidx.media2.MediaController2, java.util.List<androidx.media2.MediaSession2.CommandButton>);
-    method public void onShuffleModeChanged(androidx.media2.MediaController2, int);
+  public abstract static class MediaController.ControllerCallback {
+    ctor public MediaController.ControllerCallback();
+    method public void onAllowedCommandsChanged(androidx.media2.MediaController, androidx.media2.SessionCommandGroup);
+    method public void onBufferingStateChanged(androidx.media2.MediaController, androidx.media2.MediaItem, int);
+    method public void onConnected(androidx.media2.MediaController, androidx.media2.SessionCommandGroup);
+    method public void onCurrentMediaItemChanged(androidx.media2.MediaController, androidx.media2.MediaItem?);
+    method public androidx.media2.MediaController.ControllerResult onCustomCommand(androidx.media2.MediaController, androidx.media2.SessionCommand, android.os.Bundle?);
+    method public void onDisconnected(androidx.media2.MediaController);
+    method public void onPlaybackCompleted(androidx.media2.MediaController);
+    method public void onPlaybackInfoChanged(androidx.media2.MediaController, androidx.media2.MediaController.PlaybackInfo);
+    method public void onPlaybackSpeedChanged(androidx.media2.MediaController, float);
+    method public void onPlayerStateChanged(androidx.media2.MediaController, int);
+    method public void onPlaylistChanged(androidx.media2.MediaController, java.util.List<androidx.media2.MediaItem>?, androidx.media2.MediaMetadata?);
+    method public void onPlaylistMetadataChanged(androidx.media2.MediaController, androidx.media2.MediaMetadata?);
+    method public void onRepeatModeChanged(androidx.media2.MediaController, int);
+    method public void onSeekCompleted(androidx.media2.MediaController, long);
+    method public int onSetCustomLayout(androidx.media2.MediaController, java.util.List<androidx.media2.MediaSession.CommandButton>);
+    method public void onShuffleModeChanged(androidx.media2.MediaController, int);
   }
 
-  public static class MediaController2.ControllerResult implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public MediaController2.ControllerResult(int, android.os.Bundle?);
+  public static class MediaController.ControllerResult implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public MediaController.ControllerResult(int, android.os.Bundle?);
     method public long getCompletionTime();
     method public android.os.Bundle? getCustomCommandResult();
-    method public androidx.media2.MediaItem2? getMediaItem();
+    method public androidx.media2.MediaItem? getMediaItem();
     method public int getResultCode();
     field public static final int RESULT_CODE_AUTHENTICATION_EXPIRED = -102; // 0xffffff9a
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
@@ -172,7 +172,7 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public static final class MediaController2.PlaybackInfo implements androidx.versionedparcelable.VersionedParcelable {
+  public static final class MediaController.PlaybackInfo implements androidx.versionedparcelable.VersionedParcelable {
     method public androidx.media.AudioAttributesCompat? getAudioAttributes();
     method public int getControlType();
     method public int getCurrentVolume();
@@ -182,48 +182,48 @@
     field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
   }
 
-  public class MediaItem2 implements androidx.versionedparcelable.VersionedParcelable {
+  public class MediaItem extends androidx.versionedparcelable.CustomVersionedParcelable {
     method public long getEndPosition();
-    method public androidx.media2.MediaMetadata2? getMetadata();
+    method public androidx.media2.MediaMetadata? getMetadata();
     method public long getStartPosition();
-    method public void setMetadata(androidx.media2.MediaMetadata2?);
+    method public void setMetadata(androidx.media2.MediaMetadata?);
     field public static final long POSITION_UNKNOWN = 576460752303423487L; // 0x7ffffffffffffffL
   }
 
-  public static class MediaItem2.Builder {
-    ctor public MediaItem2.Builder();
-    method public androidx.media2.MediaItem2! build();
-    method public androidx.media2.MediaItem2.BuilderBase! setEndPosition(long);
-    method public androidx.media2.MediaItem2.BuilderBase! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.MediaItem2.BuilderBase! setStartPosition(long);
+  public static class MediaItem.Builder {
+    ctor public MediaItem.Builder();
+    method public androidx.media2.MediaItem! build();
+    method public androidx.media2.MediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.MediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.MediaItem.Builder! setStartPosition(long);
   }
 
-  public abstract class MediaLibraryService2 extends androidx.media2.MediaSessionService2 {
-    ctor public MediaLibraryService2();
-    method public abstract androidx.media2.MediaLibraryService2.MediaLibrarySession onGetSession();
-    field public static final String SERVICE_INTERFACE = "android.media.MediaLibraryService2";
+  public abstract class MediaLibraryService extends androidx.media2.MediaSessionService {
+    ctor public MediaLibraryService();
+    method public abstract androidx.media2.MediaLibraryService.MediaLibrarySession onGetSession();
+    field public static final String SERVICE_INTERFACE = "androidx.media2.MediaLibraryService";
   }
 
-  public static final class MediaLibraryService2.LibraryParams implements androidx.versionedparcelable.VersionedParcelable {
+  public static final class MediaLibraryService.LibraryParams implements androidx.versionedparcelable.VersionedParcelable {
     method public android.os.Bundle? getExtras();
     method public boolean isOffline();
     method public boolean isRecent();
     method public boolean isSuggested();
   }
 
-  public static final class MediaLibraryService2.LibraryParams.Builder {
-    ctor public MediaLibraryService2.LibraryParams.Builder();
-    method public androidx.media2.MediaLibraryService2.LibraryParams build();
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setExtras(android.os.Bundle?);
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setOffline(boolean);
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setRecent(boolean);
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setSuggested(boolean);
+  public static final class MediaLibraryService.LibraryParams.Builder {
+    ctor public MediaLibraryService.LibraryParams.Builder();
+    method public androidx.media2.MediaLibraryService.LibraryParams build();
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setExtras(android.os.Bundle?);
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setOffline(boolean);
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setRecent(boolean);
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setSuggested(boolean);
   }
 
-  public static class MediaLibraryService2.LibraryResult extends androidx.versionedparcelable.CustomVersionedParcelable {
-    ctor public MediaLibraryService2.LibraryResult(int);
-    ctor public MediaLibraryService2.LibraryResult(int, androidx.media2.MediaItem2?, androidx.media2.MediaLibraryService2.LibraryParams?);
-    ctor public MediaLibraryService2.LibraryResult(int, java.util.List<androidx.media2.MediaItem2>?, androidx.media2.MediaLibraryService2.LibraryParams?);
+  public static class MediaLibraryService.LibraryResult extends androidx.versionedparcelable.CustomVersionedParcelable {
+    ctor public MediaLibraryService.LibraryResult(int);
+    ctor public MediaLibraryService.LibraryResult(int, androidx.media2.MediaItem?, androidx.media2.MediaLibraryService.LibraryParams?);
+    ctor public MediaLibraryService.LibraryResult(int, java.util.List<androidx.media2.MediaItem>?, androidx.media2.MediaLibraryService.LibraryParams?);
     field public static final int RESULT_CODE_AUTHENTICATION_EXPIRED = -102; // 0xffffff9a
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
     field public static final int RESULT_CODE_CONCURRENT_STREAM_LIMIT = -104; // 0xffffff98
@@ -242,44 +242,42 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public static final class MediaLibraryService2.MediaLibrarySession extends androidx.media2.MediaSession2 {
-    method public void notifyChildrenChanged(androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public void notifyChildrenChanged(String, int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public void notifySearchResultChanged(androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
+  public static final class MediaLibraryService.MediaLibrarySession extends androidx.media2.MediaSession {
+    method public void notifyChildrenChanged(androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public void notifyChildrenChanged(String, int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public void notifySearchResultChanged(androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
   }
 
-  public static final class MediaLibraryService2.MediaLibrarySession.Builder {
-    ctor public MediaLibraryService2.MediaLibrarySession.Builder(androidx.media2.MediaLibraryService2, androidx.media2.SessionPlayer2, java.util.concurrent.Executor, androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback);
-    method public androidx.media2.MediaLibraryService2.MediaLibrarySession build();
-    method public androidx.media2.MediaLibraryService2.MediaLibrarySession.Builder setId(String);
-    method public androidx.media2.MediaLibraryService2.MediaLibrarySession.Builder setSessionActivity(android.app.PendingIntent?);
+  public static final class MediaLibraryService.MediaLibrarySession.Builder {
+    ctor public MediaLibraryService.MediaLibrarySession.Builder(androidx.media2.MediaLibraryService, androidx.media2.SessionPlayer, java.util.concurrent.Executor, androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback);
+    method public androidx.media2.MediaLibraryService.MediaLibrarySession build();
+    method public androidx.media2.MediaLibraryService.MediaLibrarySession.Builder setId(String);
+    method public androidx.media2.MediaLibraryService.MediaLibrarySession.Builder setSessionActivity(android.app.PendingIntent?);
   }
 
-  public static class MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback extends androidx.media2.MediaSession2.SessionCallback {
-    ctor public MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback();
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetChildren(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetItem(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String);
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetLibraryRoot(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetSearchResult(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public int onSearch(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public int onSubscribe(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public int onUnsubscribe(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String);
+  public static class MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback extends androidx.media2.MediaSession.SessionCallback {
+    ctor public MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback();
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetChildren(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetItem(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String);
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetLibraryRoot(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetSearchResult(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public int onSearch(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public int onSubscribe(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public int onUnsubscribe(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String);
   }
 
-  public final class MediaMetadata2 implements androidx.versionedparcelable.VersionedParcelable {
+  public final class MediaMetadata extends androidx.versionedparcelable.CustomVersionedParcelable {
     method public boolean containsKey(String);
-    method public static androidx.media2.MediaMetadata2 fromBundle(android.os.Bundle?);
     method public android.graphics.Bitmap? getBitmap(String);
     method public android.os.Bundle? getExtras();
     method public float getFloat(String);
     method public long getLong(String);
     method public String? getMediaId();
-    method public androidx.media2.Rating2? getRating(String);
+    method public androidx.media2.Rating? getRating(String);
     method public String? getString(String);
     method public CharSequence? getText(String);
     method public java.util.Set<java.lang.String> keySet();
     method public int size();
-    method public android.os.Bundle toBundle();
     field public static final long BROWSABLE_TYPE_ALBUMS = 2L; // 0x2L
     field public static final long BROWSABLE_TYPE_ARTISTS = 3L; // 0x3L
     field public static final long BROWSABLE_TYPE_GENRES = 4L; // 0x4L
@@ -297,7 +295,7 @@
     field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
     field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
     field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
-    field public static final String METADATA_KEY_BROWSABLE = "android.media.metadata.BT_FOLDER_TYPE";
+    field public static final String METADATA_KEY_BROWSABLE = "android.media.metadata.BROWSABLE";
     field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
     field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
     field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
@@ -314,7 +312,7 @@
     field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
     field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
     field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
-    field public static final String METADATA_KEY_PLAYABLE = "android.media.metadata.playable";
+    field public static final String METADATA_KEY_PLAYABLE = "android.media.metadata.PLAYABLE";
     field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
     field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
     field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
@@ -326,70 +324,69 @@
     field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
   }
 
-  public static final class MediaMetadata2.Builder {
-    ctor public MediaMetadata2.Builder();
-    ctor public MediaMetadata2.Builder(androidx.media2.MediaMetadata2);
-    method public androidx.media2.MediaMetadata2 build();
-    method public androidx.media2.MediaMetadata2.Builder putBitmap(String, android.graphics.Bitmap?);
-    method public androidx.media2.MediaMetadata2.Builder putFloat(String, float);
-    method public androidx.media2.MediaMetadata2.Builder putLong(String, long);
-    method public androidx.media2.MediaMetadata2.Builder putRating(String, androidx.media2.Rating2?);
-    method public androidx.media2.MediaMetadata2.Builder putString(String, String?);
-    method public androidx.media2.MediaMetadata2.Builder putText(String, CharSequence?);
-    method public androidx.media2.MediaMetadata2.Builder setExtras(android.os.Bundle?);
+  public static final class MediaMetadata.Builder {
+    ctor public MediaMetadata.Builder();
+    ctor public MediaMetadata.Builder(androidx.media2.MediaMetadata);
+    method public androidx.media2.MediaMetadata build();
+    method public androidx.media2.MediaMetadata.Builder putBitmap(String, android.graphics.Bitmap?);
+    method public androidx.media2.MediaMetadata.Builder putFloat(String, float);
+    method public androidx.media2.MediaMetadata.Builder putLong(String, long);
+    method public androidx.media2.MediaMetadata.Builder putRating(String, androidx.media2.Rating?);
+    method public androidx.media2.MediaMetadata.Builder putString(String, String?);
+    method public androidx.media2.MediaMetadata.Builder putText(String, CharSequence?);
+    method public androidx.media2.MediaMetadata.Builder setExtras(android.os.Bundle?);
   }
 
-  public class MediaPlayer extends androidx.media2.SessionPlayer2 {
+  public class MediaPlayer extends androidx.media2.SessionPlayer {
     ctor public MediaPlayer(android.content.Context);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> attachAuxEffect(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> attachAuxEffect(int);
     method public void close() throws java.lang.Exception;
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> deselectTrack(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> deselectTrack(int);
     method public androidx.media.AudioAttributesCompat? getAudioAttributes();
     method public int getAudioSessionId();
     method public long getBufferedPosition();
     method public int getBufferingState();
-    method public androidx.media2.MediaItem2? getCurrentMediaItem();
+    method public androidx.media2.MediaItem? getCurrentMediaItem();
     method public long getCurrentPosition();
     method public long getDuration();
     method public float getMaxPlayerVolume();
-    method public androidx.media2.PlaybackParams2 getPlaybackParams();
+    method public androidx.media2.PlaybackParams getPlaybackParams();
     method public float getPlaybackSpeed();
     method public int getPlayerState();
     method public float getPlayerVolume();
-    method public java.util.List<androidx.media2.MediaItem2>? getPlaylist();
-    method public androidx.media2.MediaMetadata2? getPlaylistMetadata();
+    method public java.util.List<androidx.media2.MediaItem>? getPlaylist();
+    method public androidx.media2.MediaMetadata? getPlaylistMetadata();
     method public int getRepeatMode();
     method public int getSelectedTrack(int);
     method public int getShuffleMode();
-    method public androidx.media2.MediaTimestamp2? getTimestamp();
+    method public androidx.media2.MediaTimestamp? getTimestamp();
     method public java.util.List<androidx.media2.MediaPlayer.TrackInfo> getTrackInfo();
-    method public int getVideoHeight();
-    method public int getVideoWidth();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> pause();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> play();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> prepare();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> removePlaylistItem(androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem2);
+    method public androidx.media2.VideoSize getVideoSize();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> pause();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> play();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> prepare();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> removePlaylistItem(androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem);
     method public void reset();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> seekTo(long);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> seekTo(long, int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> selectTrack(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAudioSessionId(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAuxEffectSendLevel(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setMediaItem(androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaybackParams(androidx.media2.PlaybackParams2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaybackSpeed(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlayerVolume(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem2>, androidx.media2.MediaMetadata2?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setRepeatMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setShuffleMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setSurface(android.view.Surface?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToNextPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPreviousPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata2?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> seekTo(long);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> seekTo(long, int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> selectTrack(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioSessionId(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAuxEffectSendLevel(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setMediaItem(androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackParams(androidx.media2.PlaybackParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlayerVolume(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem>, androidx.media2.MediaMetadata?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setRepeatMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setShuffleMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setSurface(android.view.Surface?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToNextPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPreviousPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata?);
     field public static final int MEDIA_INFO_AUDIO_NOT_PLAYING = 804; // 0x324
     field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320
     field public static final int MEDIA_INFO_BUFFERING_UPDATE = 704; // 0x2c0
@@ -409,14 +406,14 @@
     field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0
   }
 
-  public abstract static class MediaPlayer.PlayerCallback extends androidx.media2.SessionPlayer2.PlayerCallback {
+  public abstract static class MediaPlayer.PlayerCallback extends androidx.media2.SessionPlayer.PlayerCallback {
     ctor public MediaPlayer.PlayerCallback();
-    method public void onError(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, int, int);
-    method public void onInfo(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, int, int);
-    method public void onMediaTimeDiscontinuity(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, androidx.media2.MediaTimestamp2);
-    method public void onSubtitleData(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, androidx.media2.SubtitleData2);
-    method public void onTimedMetaDataAvailable(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, androidx.media2.TimedMetaData2);
-    method public void onVideoSizeChanged(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, int, int);
+    method public void onError(androidx.media2.MediaPlayer, androidx.media2.MediaItem, int, int);
+    method public void onInfo(androidx.media2.MediaPlayer, androidx.media2.MediaItem, int, int);
+    method public void onMediaTimeDiscontinuity(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.MediaTimestamp);
+    method public void onSubtitleData(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.SubtitleData);
+    method public void onTimedMetaDataAvailable(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.TimedMetaData);
+    method public void onVideoSizeChanged(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.VideoSize);
   }
 
   public static final class MediaPlayer.TrackInfo {
@@ -430,66 +427,66 @@
     field public static final int MEDIA_TRACK_TYPE_VIDEO = 1; // 0x1
   }
 
-  public class MediaSession2 implements java.lang.AutoCloseable {
-    method public void broadcastCustomCommand(androidx.media2.SessionCommand2, android.os.Bundle?);
+  public class MediaSession implements java.lang.AutoCloseable {
+    method public void broadcastCustomCommand(androidx.media2.SessionCommand, android.os.Bundle?);
     method public void close();
-    method public java.util.List<androidx.media2.MediaSession2.ControllerInfo> getConnectedControllers();
+    method public java.util.List<androidx.media2.MediaSession.ControllerInfo> getConnectedControllers();
     method public String getId();
-    method public androidx.media2.SessionPlayer2 getPlayer();
-    method public androidx.media2.SessionToken2 getToken();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession2.SessionResult> sendCustomCommand(androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public void setAllowedCommands(androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommandGroup2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession2.SessionResult> setCustomLayout(androidx.media2.MediaSession2.ControllerInfo, java.util.List<androidx.media2.MediaSession2.CommandButton>);
-    method public void updatePlayer(androidx.media2.SessionPlayer2);
+    method public androidx.media2.SessionPlayer getPlayer();
+    method public androidx.media2.SessionToken getToken();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession.SessionResult> sendCustomCommand(androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommand, android.os.Bundle?);
+    method public void setAllowedCommands(androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommandGroup);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession.SessionResult> setCustomLayout(androidx.media2.MediaSession.ControllerInfo, java.util.List<androidx.media2.MediaSession.CommandButton>);
+    method public void updatePlayer(androidx.media2.SessionPlayer);
   }
 
-  public static final class MediaSession2.Builder {
-    ctor public MediaSession2.Builder(android.content.Context, androidx.media2.SessionPlayer2);
-    method public androidx.media2.MediaSession2 build();
-    method public androidx.media2.MediaSession2.Builder setId(String);
-    method public androidx.media2.MediaSession2.Builder setSessionActivity(android.app.PendingIntent?);
-    method public androidx.media2.MediaSession2.Builder setSessionCallback(java.util.concurrent.Executor, androidx.media2.MediaSession2.SessionCallback);
+  public static final class MediaSession.Builder {
+    ctor public MediaSession.Builder(android.content.Context, androidx.media2.SessionPlayer);
+    method public androidx.media2.MediaSession build();
+    method public androidx.media2.MediaSession.Builder setId(String);
+    method public androidx.media2.MediaSession.Builder setSessionActivity(android.app.PendingIntent?);
+    method public androidx.media2.MediaSession.Builder setSessionCallback(java.util.concurrent.Executor, androidx.media2.MediaSession.SessionCallback);
   }
 
-  public static final class MediaSession2.CommandButton implements androidx.versionedparcelable.VersionedParcelable {
-    method public androidx.media2.SessionCommand2? getCommand();
-    method public String? getDisplayName();
+  public static final class MediaSession.CommandButton implements androidx.versionedparcelable.VersionedParcelable {
+    method public androidx.media2.SessionCommand? getCommand();
+    method public CharSequence? getDisplayName();
     method public android.os.Bundle? getExtras();
     method public int getIconResId();
     method public boolean isEnabled();
   }
 
-  public static final class MediaSession2.CommandButton.Builder {
-    ctor public MediaSession2.CommandButton.Builder();
-    method public androidx.media2.MediaSession2.CommandButton build();
-    method public androidx.media2.MediaSession2.CommandButton.Builder setCommand(androidx.media2.SessionCommand2?);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setDisplayName(String?);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setEnabled(boolean);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setExtras(android.os.Bundle?);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setIconResId(int);
+  public static final class MediaSession.CommandButton.Builder {
+    ctor public MediaSession.CommandButton.Builder();
+    method public androidx.media2.MediaSession.CommandButton build();
+    method public androidx.media2.MediaSession.CommandButton.Builder setCommand(androidx.media2.SessionCommand?);
+    method public androidx.media2.MediaSession.CommandButton.Builder setDisplayName(CharSequence?);
+    method public androidx.media2.MediaSession.CommandButton.Builder setEnabled(boolean);
+    method public androidx.media2.MediaSession.CommandButton.Builder setExtras(android.os.Bundle?);
+    method public androidx.media2.MediaSession.CommandButton.Builder setIconResId(int);
   }
 
-  public static final class MediaSession2.ControllerInfo {
+  public static final class MediaSession.ControllerInfo {
     method public String getPackageName();
     method public int getUid();
   }
 
-  public abstract static class MediaSession2.SessionCallback {
-    ctor public MediaSession2.SessionCallback();
-    method public int onCommandRequest(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommand2);
-    method public androidx.media2.SessionCommandGroup2? onConnect(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public androidx.media2.MediaItem2? onCreateMediaItem(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, String);
-    method public androidx.media2.MediaSession2.SessionResult onCustomCommand(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public void onDisconnected(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onFastForward(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onRewind(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onSetRating(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, String, androidx.media2.Rating2);
-    method public int onSkipBackward(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onSkipForward(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
+  public abstract static class MediaSession.SessionCallback {
+    ctor public MediaSession.SessionCallback();
+    method public int onCommandRequest(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommand);
+    method public androidx.media2.SessionCommandGroup? onConnect(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public androidx.media2.MediaItem? onCreateMediaItem(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, String);
+    method public androidx.media2.MediaSession.SessionResult onCustomCommand(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommand, android.os.Bundle?);
+    method public void onDisconnected(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onFastForward(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onRewind(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onSetRating(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, String, androidx.media2.Rating);
+    method public int onSkipBackward(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onSkipForward(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
   }
 
-  public static class MediaSession2.SessionResult implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public MediaSession2.SessionResult(int, android.os.Bundle?);
+  public static class MediaSession.SessionResult implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public MediaSession.SessionResult(int, android.os.Bundle?);
     method public long getCompletionTime();
     method public android.os.Bundle? getCustomCommandResult();
     method public int getResultCode();
@@ -511,43 +508,43 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  @RequiresApi(28) public final class MediaSessionManager2 {
-    method public static androidx.media2.MediaSessionManager2 getInstance(android.content.Context);
-    method public java.util.Set<androidx.media2.SessionToken2> getSessionServiceTokens();
+  @RequiresApi(28) public final class MediaSessionManager {
+    method public static androidx.media2.MediaSessionManager getInstance(android.content.Context);
+    method public java.util.Set<androidx.media2.SessionToken> getSessionServiceTokens();
   }
 
-  public abstract class MediaSessionService2 extends android.app.Service {
-    ctor public MediaSessionService2();
-    method public final void addSession(androidx.media2.MediaSession2);
-    method public final java.util.List<androidx.media2.MediaSession2> getSessions();
+  public abstract class MediaSessionService extends android.app.Service {
+    ctor public MediaSessionService();
+    method public final void addSession(androidx.media2.MediaSession);
+    method public final java.util.List<androidx.media2.MediaSession> getSessions();
     method @CallSuper public android.os.IBinder? onBind(android.content.Intent);
-    method public abstract androidx.media2.MediaSession2 onGetSession();
-    method public androidx.media2.MediaSessionService2.MediaNotification? onUpdateNotification(androidx.media2.MediaSession2);
-    method public final void removeSession(androidx.media2.MediaSession2);
-    field public static final String SERVICE_INTERFACE = "android.media.MediaSessionService2";
+    method public abstract androidx.media2.MediaSession onGetSession();
+    method public androidx.media2.MediaSessionService.MediaNotification? onUpdateNotification(androidx.media2.MediaSession);
+    method public final void removeSession(androidx.media2.MediaSession);
+    field public static final String SERVICE_INTERFACE = "androidx.media2.MediaSessionService";
   }
 
-  public static class MediaSessionService2.MediaNotification {
-    ctor public MediaSessionService2.MediaNotification(int, android.app.Notification);
+  public static class MediaSessionService.MediaNotification {
+    ctor public MediaSessionService.MediaNotification(int, android.app.Notification);
     method public android.app.Notification getNotification();
     method public int getNotificationId();
   }
 
-  public final class MediaTimestamp2 {
+  public final class MediaTimestamp {
     method public long getAnchorMediaTimeUs();
     method public long getAnchorSystemNanoTime();
     method public float getMediaClockRate();
-    field public static final androidx.media2.MediaTimestamp2 TIMESTAMP_UNKNOWN;
+    field public static final androidx.media2.MediaTimestamp TIMESTAMP_UNKNOWN;
   }
 
-  public final class PercentageRating2 implements androidx.media2.Rating2 {
-    ctor public PercentageRating2();
-    ctor public PercentageRating2(float);
+  public final class PercentageRating implements androidx.media2.Rating {
+    ctor public PercentageRating();
+    ctor public PercentageRating(float);
     method public float getPercentRating();
     method public boolean isRated();
   }
 
-  public final class PlaybackParams2 {
+  public final class PlaybackParams {
     method public Integer? getAudioFallbackMode();
     method public Float? getPitch();
     method public Float? getSpeed();
@@ -556,21 +553,21 @@
     field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1
   }
 
-  public static final class PlaybackParams2.Builder {
-    ctor public PlaybackParams2.Builder();
-    method public androidx.media2.PlaybackParams2 build();
-    method public androidx.media2.PlaybackParams2.Builder setAudioFallbackMode(int);
-    method public androidx.media2.PlaybackParams2.Builder setPitch(float);
-    method public androidx.media2.PlaybackParams2.Builder setSpeed(float);
+  public static final class PlaybackParams.Builder {
+    ctor public PlaybackParams.Builder();
+    method public androidx.media2.PlaybackParams build();
+    method public androidx.media2.PlaybackParams.Builder setAudioFallbackMode(int);
+    method public androidx.media2.PlaybackParams.Builder setPitch(float);
+    method public androidx.media2.PlaybackParams.Builder setSpeed(float);
   }
 
-  public interface Rating2 extends androidx.versionedparcelable.VersionedParcelable {
+  public interface Rating extends androidx.versionedparcelable.VersionedParcelable {
     method public boolean isRated();
   }
 
-  public final class SessionCommand2 implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public SessionCommand2(int);
-    ctor public SessionCommand2(String, android.os.Bundle?);
+  public final class SessionCommand implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public SessionCommand(int);
+    ctor public SessionCommand(String, android.os.Bundle?);
     method public int getCommandCode();
     method public String? getCustomCommand();
     method public android.os.Bundle? getExtras();
@@ -611,59 +608,59 @@
     field public static final int COMMAND_VERSION_1 = 1; // 0x1
   }
 
-  public final class SessionCommandGroup2 implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public SessionCommandGroup2();
-    ctor public SessionCommandGroup2(java.util.Collection<androidx.media2.SessionCommand2>?);
-    method public java.util.Set<androidx.media2.SessionCommand2> getCommands();
-    method public boolean hasCommand(androidx.media2.SessionCommand2);
+  public final class SessionCommandGroup implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public SessionCommandGroup();
+    ctor public SessionCommandGroup(java.util.Collection<androidx.media2.SessionCommand>?);
+    method public java.util.Set<androidx.media2.SessionCommand> getCommands();
+    method public boolean hasCommand(androidx.media2.SessionCommand);
     method public boolean hasCommand(int);
   }
 
-  public static final class SessionCommandGroup2.Builder {
-    ctor public SessionCommandGroup2.Builder();
-    ctor public SessionCommandGroup2.Builder(androidx.media2.SessionCommandGroup2);
-    method public androidx.media2.SessionCommandGroup2.Builder addAllPredefinedCommands(int);
-    method public androidx.media2.SessionCommandGroup2.Builder addCommand(androidx.media2.SessionCommand2);
-    method public androidx.media2.SessionCommandGroup2.Builder addCommand(int);
-    method public androidx.media2.SessionCommandGroup2 build();
-    method public androidx.media2.SessionCommandGroup2.Builder removeCommand(androidx.media2.SessionCommand2);
-    method public androidx.media2.SessionCommandGroup2.Builder removeCommand(int);
+  public static final class SessionCommandGroup.Builder {
+    ctor public SessionCommandGroup.Builder();
+    ctor public SessionCommandGroup.Builder(androidx.media2.SessionCommandGroup);
+    method public androidx.media2.SessionCommandGroup.Builder addAllPredefinedCommands(int);
+    method public androidx.media2.SessionCommandGroup.Builder addCommand(androidx.media2.SessionCommand);
+    method public androidx.media2.SessionCommandGroup.Builder addCommand(int);
+    method public androidx.media2.SessionCommandGroup build();
+    method public androidx.media2.SessionCommandGroup.Builder removeCommand(androidx.media2.SessionCommand);
+    method public androidx.media2.SessionCommandGroup.Builder removeCommand(int);
   }
 
-  public abstract class SessionPlayer2 implements java.lang.AutoCloseable {
-    ctor public SessionPlayer2();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem2);
+  public abstract class SessionPlayer implements java.lang.AutoCloseable {
+    ctor public SessionPlayer();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem);
     method public abstract androidx.media.AudioAttributesCompat? getAudioAttributes();
     method public abstract long getBufferedPosition();
     method public abstract int getBufferingState();
-    method protected final java.util.List<androidx.core.util.Pair<androidx.media2.SessionPlayer2.PlayerCallback,java.util.concurrent.Executor>> getCallbacks();
-    method public abstract androidx.media2.MediaItem2? getCurrentMediaItem();
+    method protected final java.util.List<androidx.core.util.Pair<androidx.media2.SessionPlayer.PlayerCallback,java.util.concurrent.Executor>> getCallbacks();
+    method public abstract androidx.media2.MediaItem? getCurrentMediaItem();
     method public abstract long getCurrentPosition();
     method public abstract long getDuration();
     method public abstract float getPlaybackSpeed();
     method public abstract int getPlayerState();
-    method public abstract java.util.List<androidx.media2.MediaItem2>? getPlaylist();
-    method public abstract androidx.media2.MediaMetadata2? getPlaylistMetadata();
+    method public abstract java.util.List<androidx.media2.MediaItem>? getPlaylist();
+    method public abstract androidx.media2.MediaMetadata? getPlaylistMetadata();
     method public abstract int getRepeatMode();
     method public abstract int getShuffleMode();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> pause();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> play();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> prepare();
-    method public final void registerPlayerCallback(java.util.concurrent.Executor, androidx.media2.SessionPlayer2.PlayerCallback);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> removePlaylistItem(androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> seekTo(long);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setMediaItem(androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaybackSpeed(float);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem2>, androidx.media2.MediaMetadata2?);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setRepeatMode(int);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setShuffleMode(int);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToNextPlaylistItem();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPreviousPlaylistItem();
-    method public final void unregisterPlayerCallback(androidx.media2.SessionPlayer2.PlayerCallback);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata2?);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> pause();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> play();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> prepare();
+    method public final void registerPlayerCallback(java.util.concurrent.Executor, androidx.media2.SessionPlayer.PlayerCallback);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> removePlaylistItem(androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> seekTo(long);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setMediaItem(androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(float);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem>, androidx.media2.MediaMetadata?);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setRepeatMode(int);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setShuffleMode(int);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToNextPlaylistItem();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPreviousPlaylistItem();
+    method public final void unregisterPlayerCallback(androidx.media2.SessionPlayer.PlayerCallback);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata?);
     field public static final int BUFFERING_STATE_BUFFERING_AND_PLAYABLE = 1; // 0x1
     field public static final int BUFFERING_STATE_BUFFERING_AND_STARVED = 2; // 0x2
     field public static final int BUFFERING_STATE_COMPLETE = 3; // 0x3
@@ -682,25 +679,25 @@
     field public static final long UNKNOWN_TIME = -1L; // 0xffffffffffffffffL
   }
 
-  public abstract static class SessionPlayer2.PlayerCallback {
-    ctor public SessionPlayer2.PlayerCallback();
-    method public void onAudioAttributesChanged(androidx.media2.SessionPlayer2, androidx.media.AudioAttributesCompat?);
-    method public void onBufferingStateChanged(androidx.media2.SessionPlayer2, androidx.media2.MediaItem2?, int);
-    method public void onCurrentMediaItemChanged(androidx.media2.SessionPlayer2, androidx.media2.MediaItem2);
-    method public void onPlaybackCompleted(androidx.media2.SessionPlayer2);
-    method public void onPlaybackSpeedChanged(androidx.media2.SessionPlayer2, float);
-    method public void onPlayerStateChanged(androidx.media2.SessionPlayer2, int);
-    method public void onPlaylistChanged(androidx.media2.SessionPlayer2, java.util.List<androidx.media2.MediaItem2>?, androidx.media2.MediaMetadata2?);
-    method public void onPlaylistMetadataChanged(androidx.media2.SessionPlayer2, androidx.media2.MediaMetadata2?);
-    method public void onRepeatModeChanged(androidx.media2.SessionPlayer2, int);
-    method public void onSeekCompleted(androidx.media2.SessionPlayer2, long);
-    method public void onShuffleModeChanged(androidx.media2.SessionPlayer2, int);
+  public abstract static class SessionPlayer.PlayerCallback {
+    ctor public SessionPlayer.PlayerCallback();
+    method public void onAudioAttributesChanged(androidx.media2.SessionPlayer, androidx.media.AudioAttributesCompat?);
+    method public void onBufferingStateChanged(androidx.media2.SessionPlayer, androidx.media2.MediaItem?, int);
+    method public void onCurrentMediaItemChanged(androidx.media2.SessionPlayer, androidx.media2.MediaItem);
+    method public void onPlaybackCompleted(androidx.media2.SessionPlayer);
+    method public void onPlaybackSpeedChanged(androidx.media2.SessionPlayer, float);
+    method public void onPlayerStateChanged(androidx.media2.SessionPlayer, int);
+    method public void onPlaylistChanged(androidx.media2.SessionPlayer, java.util.List<androidx.media2.MediaItem>?, androidx.media2.MediaMetadata?);
+    method public void onPlaylistMetadataChanged(androidx.media2.SessionPlayer, androidx.media2.MediaMetadata?);
+    method public void onRepeatModeChanged(androidx.media2.SessionPlayer, int);
+    method public void onSeekCompleted(androidx.media2.SessionPlayer, long);
+    method public void onShuffleModeChanged(androidx.media2.SessionPlayer, int);
   }
 
-  public static class SessionPlayer2.PlayerResult {
-    ctor public SessionPlayer2.PlayerResult(int, androidx.media2.MediaItem2?);
+  public static class SessionPlayer.PlayerResult {
+    ctor public SessionPlayer.PlayerResult(int, androidx.media2.MediaItem?);
     method public long getCompletionTime();
-    method public androidx.media2.MediaItem2? getMediaItem();
+    method public androidx.media2.MediaItem? getMediaItem();
     method public int getResultCode();
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
     field public static final int RESULT_CODE_INVALID_STATE = -2; // 0xfffffffe
@@ -712,8 +709,8 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public final class SessionToken2 implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public SessionToken2(android.content.Context, android.content.ComponentName);
+  public final class SessionToken implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public SessionToken(android.content.Context, android.content.ComponentName);
     method public String getPackageName();
     method public String? getServiceName();
     method public int getType();
@@ -723,15 +720,15 @@
     field public static final int TYPE_SESSION_SERVICE = 1; // 0x1
   }
 
-  public final class StarRating2 implements androidx.media2.Rating2 {
-    ctor public StarRating2(@IntRange(from=1) int);
-    ctor public StarRating2(@IntRange(from=1) int, float);
+  public final class StarRating implements androidx.media2.Rating {
+    ctor public StarRating(@IntRange(from=1) int);
+    ctor public StarRating(@IntRange(from=1) int, float);
     method public int getMaxStars();
     method public float getStarRating();
     method public boolean isRated();
   }
 
-  public final class SubtitleData2 {
+  public final class SubtitleData {
     method public byte[] getData();
     method public long getDurationUs();
     method public long getStartTimeUs();
@@ -741,32 +738,37 @@
     field public static final String MIMETYPE_TEXT_VTT = "text/vtt";
   }
 
-  public final class ThumbRating2 implements androidx.media2.Rating2 {
-    ctor public ThumbRating2();
-    ctor public ThumbRating2(boolean);
+  public final class ThumbRating implements androidx.media2.Rating {
+    ctor public ThumbRating();
+    ctor public ThumbRating(boolean);
     method public boolean isRated();
     method public boolean isThumbUp();
   }
 
-  public class TimedMetaData2 {
+  public class TimedMetaData {
     method public byte[]! getMetaData();
     method public long getTimestamp();
   }
 
-  public class UriMediaItem2 extends androidx.media2.MediaItem2 {
+  public class UriMediaItem extends androidx.media2.MediaItem {
     method public android.net.Uri getUri();
     method public android.content.Context getUriContext();
     method public java.util.List<java.net.HttpCookie>? getUriCookies();
     method public java.util.Map<java.lang.String,java.lang.String>? getUriHeaders();
   }
 
-  public static final class UriMediaItem2.Builder {
-    ctor public UriMediaItem2.Builder(android.content.Context, android.net.Uri);
-    ctor public UriMediaItem2.Builder(android.content.Context, android.net.Uri, java.util.Map<java.lang.String,java.lang.String>?, java.util.List<java.net.HttpCookie>?);
-    method public androidx.media2.UriMediaItem2 build();
-    method public androidx.media2.UriMediaItem2.Builder! setEndPosition(long);
-    method public androidx.media2.UriMediaItem2.Builder! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.UriMediaItem2.Builder! setStartPosition(long);
+  public static final class UriMediaItem.Builder {
+    ctor public UriMediaItem.Builder(android.content.Context, android.net.Uri);
+    ctor public UriMediaItem.Builder(android.content.Context, android.net.Uri, java.util.Map<java.lang.String,java.lang.String>?, java.util.List<java.net.HttpCookie>?);
+    method public androidx.media2.UriMediaItem build();
+    method public androidx.media2.UriMediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.UriMediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.UriMediaItem.Builder! setStartPosition(long);
+  }
+
+  public final class VideoSize {
+    method public int getHeight();
+    method public int getWidth();
   }
 
 }
diff --git a/media2/api/current.txt b/media2/api/current.txt
index 82d51ca..eafeed5 100644
--- a/media2/api/current.txt
+++ b/media2/api/current.txt
@@ -1,69 +1,69 @@
 // Signature format: 2.0
 package androidx.media2 {
 
-  public class CallbackMediaItem2 extends androidx.media2.MediaItem2 {
-    method public androidx.media2.DataSourceCallback2 getDataSourceCallback2();
+  public class CallbackMediaItem extends androidx.media2.MediaItem {
+    method public androidx.media2.DataSourceCallback getDataSourceCallback();
   }
 
-  public static final class CallbackMediaItem2.Builder {
-    ctor public CallbackMediaItem2.Builder(androidx.media2.DataSourceCallback2);
-    method public androidx.media2.CallbackMediaItem2 build();
-    method public androidx.media2.CallbackMediaItem2.Builder! setEndPosition(long);
-    method public androidx.media2.CallbackMediaItem2.Builder! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.CallbackMediaItem2.Builder! setStartPosition(long);
+  public static final class CallbackMediaItem.Builder {
+    ctor public CallbackMediaItem.Builder(androidx.media2.DataSourceCallback);
+    method public androidx.media2.CallbackMediaItem build();
+    method public androidx.media2.CallbackMediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.CallbackMediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.CallbackMediaItem.Builder! setStartPosition(long);
   }
 
-  public abstract class DataSourceCallback2 implements java.io.Closeable {
-    ctor public DataSourceCallback2();
+  public abstract class DataSourceCallback implements java.io.Closeable {
+    ctor public DataSourceCallback();
     method public abstract long getSize() throws java.io.IOException;
     method public abstract int readAt(long, byte[], int, int) throws java.io.IOException;
   }
 
-  public class FileMediaItem2 extends androidx.media2.MediaItem2 {
+  public class FileMediaItem extends androidx.media2.MediaItem {
     method public java.io.FileDescriptor getFileDescriptor();
     method public long getFileDescriptorLength();
     method public long getFileDescriptorOffset();
     field public static final long FD_LENGTH_UNKNOWN = 576460752303423487L; // 0x7ffffffffffffffL
   }
 
-  public static final class FileMediaItem2.Builder {
-    ctor public FileMediaItem2.Builder(java.io.FileDescriptor);
-    ctor public FileMediaItem2.Builder(java.io.FileDescriptor, long, long);
-    method public androidx.media2.FileMediaItem2 build();
-    method public androidx.media2.FileMediaItem2.Builder! setEndPosition(long);
-    method public androidx.media2.FileMediaItem2.Builder! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.FileMediaItem2.Builder! setStartPosition(long);
+  public static final class FileMediaItem.Builder {
+    ctor public FileMediaItem.Builder(java.io.FileDescriptor);
+    ctor public FileMediaItem.Builder(java.io.FileDescriptor, long, long);
+    method public androidx.media2.FileMediaItem build();
+    method public androidx.media2.FileMediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.FileMediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.FileMediaItem.Builder! setStartPosition(long);
   }
 
-  public final class HeartRating2 implements androidx.media2.Rating2 {
-    ctor public HeartRating2();
-    ctor public HeartRating2(boolean);
+  public final class HeartRating implements androidx.media2.Rating {
+    ctor public HeartRating();
+    ctor public HeartRating(boolean);
     method public boolean hasHeart();
     method public boolean isRated();
   }
 
-  public class MediaBrowser2 extends androidx.media2.MediaController2 {
-    ctor public MediaBrowser2(android.content.Context, androidx.media2.SessionToken2, java.util.concurrent.Executor, androidx.media2.MediaBrowser2.BrowserCallback);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getChildren(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getItem(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getLibraryRoot(androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> getSearchResult(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> search(String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> subscribe(String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser2.BrowserResult> unsubscribe(String);
+  public class MediaBrowser extends androidx.media2.MediaController {
+    ctor public MediaBrowser(android.content.Context, androidx.media2.SessionToken, java.util.concurrent.Executor, androidx.media2.MediaBrowser.BrowserCallback);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getChildren(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getItem(String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getLibraryRoot(androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> getSearchResult(String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> search(String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> subscribe(String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaBrowser.BrowserResult> unsubscribe(String);
   }
 
-  public static class MediaBrowser2.BrowserCallback extends androidx.media2.MediaController2.ControllerCallback {
-    ctor public MediaBrowser2.BrowserCallback();
-    method public void onChildrenChanged(androidx.media2.MediaBrowser2, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public void onSearchResultChanged(androidx.media2.MediaBrowser2, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
+  public static class MediaBrowser.BrowserCallback extends androidx.media2.MediaController.ControllerCallback {
+    ctor public MediaBrowser.BrowserCallback();
+    method public void onChildrenChanged(androidx.media2.MediaBrowser, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public void onSearchResultChanged(androidx.media2.MediaBrowser, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
   }
 
-  public static class MediaBrowser2.BrowserResult extends androidx.versionedparcelable.CustomVersionedParcelable {
+  public static class MediaBrowser.BrowserResult extends androidx.versionedparcelable.CustomVersionedParcelable {
     method public long getCompletionTime();
-    method public androidx.media2.MediaLibraryService2.LibraryParams? getLibraryParams();
-    method public androidx.media2.MediaItem2? getMediaItem();
-    method public java.util.List<androidx.media2.MediaItem2>? getMediaItems();
+    method public androidx.media2.MediaLibraryService.LibraryParams? getLibraryParams();
+    method public androidx.media2.MediaItem? getMediaItem();
+    method public java.util.List<androidx.media2.MediaItem>? getMediaItems();
     method public int getResultCode();
     field public static final int RESULT_CODE_AUTHENTICATION_EXPIRED = -102; // 0xffffff9a
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
@@ -83,76 +83,76 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public class MediaController2 implements java.lang.AutoCloseable {
-    ctor public MediaController2(android.content.Context, androidx.media2.SessionToken2, java.util.concurrent.Executor, androidx.media2.MediaController2.ControllerCallback);
-    ctor public MediaController2(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token, java.util.concurrent.Executor, androidx.media2.MediaController2.ControllerCallback);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> addPlaylistItem(@IntRange(from=0) int, String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> adjustVolume(int, int);
+  public class MediaController implements java.lang.AutoCloseable {
+    ctor public MediaController(android.content.Context, androidx.media2.SessionToken, java.util.concurrent.Executor, androidx.media2.MediaController.ControllerCallback);
+    ctor public MediaController(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token, java.util.concurrent.Executor, androidx.media2.MediaController.ControllerCallback);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> addPlaylistItem(@IntRange(from=0) int, String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> adjustVolume(int, int);
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> fastForward();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> fastForward();
     method public long getBufferedPosition();
     method public int getBufferingState();
-    method public androidx.media2.SessionToken2? getConnectedSessionToken();
-    method public androidx.media2.MediaItem2? getCurrentMediaItem();
+    method public androidx.media2.SessionToken? getConnectedSessionToken();
+    method public androidx.media2.MediaItem? getCurrentMediaItem();
     method public long getCurrentPosition();
     method public long getDuration();
-    method public androidx.media2.MediaController2.PlaybackInfo? getPlaybackInfo();
+    method public androidx.media2.MediaController.PlaybackInfo? getPlaybackInfo();
     method public float getPlaybackSpeed();
     method public int getPlayerState();
-    method public java.util.List<androidx.media2.MediaItem2>? getPlaylist();
-    method public androidx.media2.MediaMetadata2? getPlaylistMetadata();
+    method public java.util.List<androidx.media2.MediaItem>? getPlaylist();
+    method public androidx.media2.MediaMetadata? getPlaylistMetadata();
     method public int getRepeatMode();
     method public android.app.PendingIntent? getSessionActivity();
     method public int getShuffleMode();
     method public boolean isConnected();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> pause();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> play();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> prepare();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> removePlaylistItem(@IntRange(from=0) int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> replacePlaylistItem(@IntRange(from=0) int, String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> rewind();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> seekTo(long);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> sendCustomCommand(androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setMediaItem(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setPlaybackSpeed(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setPlaylist(java.util.List<java.lang.String>, androidx.media2.MediaMetadata2?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setRating(String, androidx.media2.Rating2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setRepeatMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setShuffleMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> setVolumeTo(int, int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipBackward();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipForward();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipToNextPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipToPlaylistItem(@IntRange(from=0) int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> skipToPreviousPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController2.ControllerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata2?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> pause();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> play();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> prepare();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> removePlaylistItem(@IntRange(from=0) int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> replacePlaylistItem(@IntRange(from=0) int, String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> rewind();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> seekTo(long);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> sendCustomCommand(androidx.media2.SessionCommand, android.os.Bundle?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setMediaItem(String);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setPlaybackSpeed(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setPlaylist(java.util.List<java.lang.String>, androidx.media2.MediaMetadata?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setRating(String, androidx.media2.Rating);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setRepeatMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setShuffleMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> setVolumeTo(int, int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipBackward();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipForward();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipToNextPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipToPlaylistItem(@IntRange(from=0) int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> skipToPreviousPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaController.ControllerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata?);
   }
 
-  public abstract static class MediaController2.ControllerCallback {
-    ctor public MediaController2.ControllerCallback();
-    method public void onAllowedCommandsChanged(androidx.media2.MediaController2, androidx.media2.SessionCommandGroup2);
-    method public void onBufferingStateChanged(androidx.media2.MediaController2, androidx.media2.MediaItem2, int);
-    method public void onConnected(androidx.media2.MediaController2, androidx.media2.SessionCommandGroup2);
-    method public void onCurrentMediaItemChanged(androidx.media2.MediaController2, androidx.media2.MediaItem2?);
-    method public androidx.media2.MediaController2.ControllerResult onCustomCommand(androidx.media2.MediaController2, androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public void onDisconnected(androidx.media2.MediaController2);
-    method public void onPlaybackCompleted(androidx.media2.MediaController2);
-    method public void onPlaybackInfoChanged(androidx.media2.MediaController2, androidx.media2.MediaController2.PlaybackInfo);
-    method public void onPlaybackSpeedChanged(androidx.media2.MediaController2, float);
-    method public void onPlayerStateChanged(androidx.media2.MediaController2, int);
-    method public void onPlaylistChanged(androidx.media2.MediaController2, java.util.List<androidx.media2.MediaItem2>?, androidx.media2.MediaMetadata2?);
-    method public void onPlaylistMetadataChanged(androidx.media2.MediaController2, androidx.media2.MediaMetadata2?);
-    method public void onRepeatModeChanged(androidx.media2.MediaController2, int);
-    method public void onSeekCompleted(androidx.media2.MediaController2, long);
-    method public int onSetCustomLayout(androidx.media2.MediaController2, java.util.List<androidx.media2.MediaSession2.CommandButton>);
-    method public void onShuffleModeChanged(androidx.media2.MediaController2, int);
+  public abstract static class MediaController.ControllerCallback {
+    ctor public MediaController.ControllerCallback();
+    method public void onAllowedCommandsChanged(androidx.media2.MediaController, androidx.media2.SessionCommandGroup);
+    method public void onBufferingStateChanged(androidx.media2.MediaController, androidx.media2.MediaItem, int);
+    method public void onConnected(androidx.media2.MediaController, androidx.media2.SessionCommandGroup);
+    method public void onCurrentMediaItemChanged(androidx.media2.MediaController, androidx.media2.MediaItem?);
+    method public androidx.media2.MediaController.ControllerResult onCustomCommand(androidx.media2.MediaController, androidx.media2.SessionCommand, android.os.Bundle?);
+    method public void onDisconnected(androidx.media2.MediaController);
+    method public void onPlaybackCompleted(androidx.media2.MediaController);
+    method public void onPlaybackInfoChanged(androidx.media2.MediaController, androidx.media2.MediaController.PlaybackInfo);
+    method public void onPlaybackSpeedChanged(androidx.media2.MediaController, float);
+    method public void onPlayerStateChanged(androidx.media2.MediaController, int);
+    method public void onPlaylistChanged(androidx.media2.MediaController, java.util.List<androidx.media2.MediaItem>?, androidx.media2.MediaMetadata?);
+    method public void onPlaylistMetadataChanged(androidx.media2.MediaController, androidx.media2.MediaMetadata?);
+    method public void onRepeatModeChanged(androidx.media2.MediaController, int);
+    method public void onSeekCompleted(androidx.media2.MediaController, long);
+    method public int onSetCustomLayout(androidx.media2.MediaController, java.util.List<androidx.media2.MediaSession.CommandButton>);
+    method public void onShuffleModeChanged(androidx.media2.MediaController, int);
   }
 
-  public static class MediaController2.ControllerResult implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public MediaController2.ControllerResult(int, android.os.Bundle?);
+  public static class MediaController.ControllerResult implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public MediaController.ControllerResult(int, android.os.Bundle?);
     method public long getCompletionTime();
     method public android.os.Bundle? getCustomCommandResult();
-    method public androidx.media2.MediaItem2? getMediaItem();
+    method public androidx.media2.MediaItem? getMediaItem();
     method public int getResultCode();
     field public static final int RESULT_CODE_AUTHENTICATION_EXPIRED = -102; // 0xffffff9a
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
@@ -172,7 +172,7 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public static final class MediaController2.PlaybackInfo implements androidx.versionedparcelable.VersionedParcelable {
+  public static final class MediaController.PlaybackInfo implements androidx.versionedparcelable.VersionedParcelable {
     method public androidx.media.AudioAttributesCompat? getAudioAttributes();
     method public int getControlType();
     method public int getCurrentVolume();
@@ -182,48 +182,48 @@
     field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
   }
 
-  public class MediaItem2 implements androidx.versionedparcelable.VersionedParcelable {
+  public class MediaItem extends androidx.versionedparcelable.CustomVersionedParcelable {
     method public long getEndPosition();
-    method public androidx.media2.MediaMetadata2? getMetadata();
+    method public androidx.media2.MediaMetadata? getMetadata();
     method public long getStartPosition();
-    method public void setMetadata(androidx.media2.MediaMetadata2?);
+    method public void setMetadata(androidx.media2.MediaMetadata?);
     field public static final long POSITION_UNKNOWN = 576460752303423487L; // 0x7ffffffffffffffL
   }
 
-  public static class MediaItem2.Builder {
-    ctor public MediaItem2.Builder();
-    method public androidx.media2.MediaItem2! build();
-    method public androidx.media2.MediaItem2.BuilderBase! setEndPosition(long);
-    method public androidx.media2.MediaItem2.BuilderBase! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.MediaItem2.BuilderBase! setStartPosition(long);
+  public static class MediaItem.Builder {
+    ctor public MediaItem.Builder();
+    method public androidx.media2.MediaItem! build();
+    method public androidx.media2.MediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.MediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.MediaItem.Builder! setStartPosition(long);
   }
 
-  public abstract class MediaLibraryService2 extends androidx.media2.MediaSessionService2 {
-    ctor public MediaLibraryService2();
-    method public abstract androidx.media2.MediaLibraryService2.MediaLibrarySession onGetSession();
-    field public static final String SERVICE_INTERFACE = "android.media.MediaLibraryService2";
+  public abstract class MediaLibraryService extends androidx.media2.MediaSessionService {
+    ctor public MediaLibraryService();
+    method public abstract androidx.media2.MediaLibraryService.MediaLibrarySession onGetSession();
+    field public static final String SERVICE_INTERFACE = "androidx.media2.MediaLibraryService";
   }
 
-  public static final class MediaLibraryService2.LibraryParams implements androidx.versionedparcelable.VersionedParcelable {
+  public static final class MediaLibraryService.LibraryParams implements androidx.versionedparcelable.VersionedParcelable {
     method public android.os.Bundle? getExtras();
     method public boolean isOffline();
     method public boolean isRecent();
     method public boolean isSuggested();
   }
 
-  public static final class MediaLibraryService2.LibraryParams.Builder {
-    ctor public MediaLibraryService2.LibraryParams.Builder();
-    method public androidx.media2.MediaLibraryService2.LibraryParams build();
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setExtras(android.os.Bundle?);
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setOffline(boolean);
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setRecent(boolean);
-    method public androidx.media2.MediaLibraryService2.LibraryParams.Builder setSuggested(boolean);
+  public static final class MediaLibraryService.LibraryParams.Builder {
+    ctor public MediaLibraryService.LibraryParams.Builder();
+    method public androidx.media2.MediaLibraryService.LibraryParams build();
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setExtras(android.os.Bundle?);
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setOffline(boolean);
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setRecent(boolean);
+    method public androidx.media2.MediaLibraryService.LibraryParams.Builder setSuggested(boolean);
   }
 
-  public static class MediaLibraryService2.LibraryResult extends androidx.versionedparcelable.CustomVersionedParcelable {
-    ctor public MediaLibraryService2.LibraryResult(int);
-    ctor public MediaLibraryService2.LibraryResult(int, androidx.media2.MediaItem2?, androidx.media2.MediaLibraryService2.LibraryParams?);
-    ctor public MediaLibraryService2.LibraryResult(int, java.util.List<androidx.media2.MediaItem2>?, androidx.media2.MediaLibraryService2.LibraryParams?);
+  public static class MediaLibraryService.LibraryResult extends androidx.versionedparcelable.CustomVersionedParcelable {
+    ctor public MediaLibraryService.LibraryResult(int);
+    ctor public MediaLibraryService.LibraryResult(int, androidx.media2.MediaItem?, androidx.media2.MediaLibraryService.LibraryParams?);
+    ctor public MediaLibraryService.LibraryResult(int, java.util.List<androidx.media2.MediaItem>?, androidx.media2.MediaLibraryService.LibraryParams?);
     field public static final int RESULT_CODE_AUTHENTICATION_EXPIRED = -102; // 0xffffff9a
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
     field public static final int RESULT_CODE_CONCURRENT_STREAM_LIMIT = -104; // 0xffffff98
@@ -242,44 +242,42 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public static final class MediaLibraryService2.MediaLibrarySession extends androidx.media2.MediaSession2 {
-    method public void notifyChildrenChanged(androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public void notifyChildrenChanged(String, int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public void notifySearchResultChanged(androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService2.LibraryParams?);
+  public static final class MediaLibraryService.MediaLibrarySession extends androidx.media2.MediaSession {
+    method public void notifyChildrenChanged(androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public void notifyChildrenChanged(String, int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public void notifySearchResultChanged(androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, androidx.media2.MediaLibraryService.LibraryParams?);
   }
 
-  public static final class MediaLibraryService2.MediaLibrarySession.Builder {
-    ctor public MediaLibraryService2.MediaLibrarySession.Builder(androidx.media2.MediaLibraryService2, androidx.media2.SessionPlayer2, java.util.concurrent.Executor, androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback);
-    method public androidx.media2.MediaLibraryService2.MediaLibrarySession build();
-    method public androidx.media2.MediaLibraryService2.MediaLibrarySession.Builder setId(String);
-    method public androidx.media2.MediaLibraryService2.MediaLibrarySession.Builder setSessionActivity(android.app.PendingIntent?);
+  public static final class MediaLibraryService.MediaLibrarySession.Builder {
+    ctor public MediaLibraryService.MediaLibrarySession.Builder(androidx.media2.MediaLibraryService, androidx.media2.SessionPlayer, java.util.concurrent.Executor, androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback);
+    method public androidx.media2.MediaLibraryService.MediaLibrarySession build();
+    method public androidx.media2.MediaLibraryService.MediaLibrarySession.Builder setId(String);
+    method public androidx.media2.MediaLibraryService.MediaLibrarySession.Builder setSessionActivity(android.app.PendingIntent?);
   }
 
-  public static class MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback extends androidx.media2.MediaSession2.SessionCallback {
-    ctor public MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback();
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetChildren(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetItem(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String);
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetLibraryRoot(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public androidx.media2.MediaLibraryService2.LibraryResult onGetSearchResult(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public int onSearch(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public int onSubscribe(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String, androidx.media2.MediaLibraryService2.LibraryParams?);
-    method public int onUnsubscribe(androidx.media2.MediaLibraryService2.MediaLibrarySession, androidx.media2.MediaSession2.ControllerInfo, String);
+  public static class MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback extends androidx.media2.MediaSession.SessionCallback {
+    ctor public MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback();
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetChildren(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetItem(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String);
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetLibraryRoot(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public androidx.media2.MediaLibraryService.LibraryResult onGetSearchResult(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, @IntRange(from=0) int, @IntRange(from=1) int, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public int onSearch(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public int onSubscribe(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String, androidx.media2.MediaLibraryService.LibraryParams?);
+    method public int onUnsubscribe(androidx.media2.MediaLibraryService.MediaLibrarySession, androidx.media2.MediaSession.ControllerInfo, String);
   }
 
-  public final class MediaMetadata2 implements androidx.versionedparcelable.VersionedParcelable {
+  public final class MediaMetadata extends androidx.versionedparcelable.CustomVersionedParcelable {
     method public boolean containsKey(String);
-    method public static androidx.media2.MediaMetadata2 fromBundle(android.os.Bundle?);
     method public android.graphics.Bitmap? getBitmap(String);
     method public android.os.Bundle? getExtras();
     method public float getFloat(String);
     method public long getLong(String);
     method public String? getMediaId();
-    method public androidx.media2.Rating2? getRating(String);
+    method public androidx.media2.Rating? getRating(String);
     method public String? getString(String);
     method public CharSequence? getText(String);
     method public java.util.Set<java.lang.String> keySet();
     method public int size();
-    method public android.os.Bundle toBundle();
     field public static final long BROWSABLE_TYPE_ALBUMS = 2L; // 0x2L
     field public static final long BROWSABLE_TYPE_ARTISTS = 3L; // 0x3L
     field public static final long BROWSABLE_TYPE_GENRES = 4L; // 0x4L
@@ -297,7 +295,7 @@
     field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
     field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
     field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
-    field public static final String METADATA_KEY_BROWSABLE = "android.media.metadata.BT_FOLDER_TYPE";
+    field public static final String METADATA_KEY_BROWSABLE = "android.media.metadata.BROWSABLE";
     field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
     field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
     field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
@@ -314,7 +312,7 @@
     field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
     field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
     field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
-    field public static final String METADATA_KEY_PLAYABLE = "android.media.metadata.playable";
+    field public static final String METADATA_KEY_PLAYABLE = "android.media.metadata.PLAYABLE";
     field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
     field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
     field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
@@ -326,70 +324,69 @@
     field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
   }
 
-  public static final class MediaMetadata2.Builder {
-    ctor public MediaMetadata2.Builder();
-    ctor public MediaMetadata2.Builder(androidx.media2.MediaMetadata2);
-    method public androidx.media2.MediaMetadata2 build();
-    method public androidx.media2.MediaMetadata2.Builder putBitmap(String, android.graphics.Bitmap?);
-    method public androidx.media2.MediaMetadata2.Builder putFloat(String, float);
-    method public androidx.media2.MediaMetadata2.Builder putLong(String, long);
-    method public androidx.media2.MediaMetadata2.Builder putRating(String, androidx.media2.Rating2?);
-    method public androidx.media2.MediaMetadata2.Builder putString(String, String?);
-    method public androidx.media2.MediaMetadata2.Builder putText(String, CharSequence?);
-    method public androidx.media2.MediaMetadata2.Builder setExtras(android.os.Bundle?);
+  public static final class MediaMetadata.Builder {
+    ctor public MediaMetadata.Builder();
+    ctor public MediaMetadata.Builder(androidx.media2.MediaMetadata);
+    method public androidx.media2.MediaMetadata build();
+    method public androidx.media2.MediaMetadata.Builder putBitmap(String, android.graphics.Bitmap?);
+    method public androidx.media2.MediaMetadata.Builder putFloat(String, float);
+    method public androidx.media2.MediaMetadata.Builder putLong(String, long);
+    method public androidx.media2.MediaMetadata.Builder putRating(String, androidx.media2.Rating?);
+    method public androidx.media2.MediaMetadata.Builder putString(String, String?);
+    method public androidx.media2.MediaMetadata.Builder putText(String, CharSequence?);
+    method public androidx.media2.MediaMetadata.Builder setExtras(android.os.Bundle?);
   }
 
-  public class MediaPlayer extends androidx.media2.SessionPlayer2 {
+  public class MediaPlayer extends androidx.media2.SessionPlayer {
     ctor public MediaPlayer(android.content.Context);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> attachAuxEffect(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> attachAuxEffect(int);
     method public void close() throws java.lang.Exception;
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> deselectTrack(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> deselectTrack(int);
     method public androidx.media.AudioAttributesCompat? getAudioAttributes();
     method public int getAudioSessionId();
     method public long getBufferedPosition();
     method public int getBufferingState();
-    method public androidx.media2.MediaItem2? getCurrentMediaItem();
+    method public androidx.media2.MediaItem? getCurrentMediaItem();
     method public long getCurrentPosition();
     method public long getDuration();
     method public float getMaxPlayerVolume();
-    method public androidx.media2.PlaybackParams2 getPlaybackParams();
+    method public androidx.media2.PlaybackParams getPlaybackParams();
     method public float getPlaybackSpeed();
     method public int getPlayerState();
     method public float getPlayerVolume();
-    method public java.util.List<androidx.media2.MediaItem2>? getPlaylist();
-    method public androidx.media2.MediaMetadata2? getPlaylistMetadata();
+    method public java.util.List<androidx.media2.MediaItem>? getPlaylist();
+    method public androidx.media2.MediaMetadata? getPlaylistMetadata();
     method public int getRepeatMode();
     method public int getSelectedTrack(int);
     method public int getShuffleMode();
-    method public androidx.media2.MediaTimestamp2? getTimestamp();
+    method public androidx.media2.MediaTimestamp? getTimestamp();
     method public java.util.List<androidx.media2.MediaPlayer.TrackInfo> getTrackInfo();
-    method public int getVideoHeight();
-    method public int getVideoWidth();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> pause();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> play();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> prepare();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> removePlaylistItem(androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem2);
+    method public androidx.media2.VideoSize getVideoSize();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> pause();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> play();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> prepare();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> removePlaylistItem(androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem);
     method public void reset();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> seekTo(long);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> seekTo(long, int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> selectTrack(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAudioSessionId(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAuxEffectSendLevel(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setMediaItem(androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaybackParams(androidx.media2.PlaybackParams2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaybackSpeed(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlayerVolume(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem2>, androidx.media2.MediaMetadata2?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setRepeatMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setShuffleMode(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setSurface(android.view.Surface?);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToNextPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPreviousPlaylistItem();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata2?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> seekTo(long);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> seekTo(long, int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> selectTrack(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioSessionId(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAuxEffectSendLevel(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setMediaItem(androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackParams(androidx.media2.PlaybackParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlayerVolume(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem>, androidx.media2.MediaMetadata?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setRepeatMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setShuffleMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setSurface(android.view.Surface?);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToNextPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPreviousPlaylistItem();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata?);
     field public static final int MEDIA_INFO_AUDIO_NOT_PLAYING = 804; // 0x324
     field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320
     field public static final int MEDIA_INFO_BUFFERING_UPDATE = 704; // 0x2c0
@@ -409,14 +406,14 @@
     field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0
   }
 
-  public abstract static class MediaPlayer.PlayerCallback extends androidx.media2.SessionPlayer2.PlayerCallback {
+  public abstract static class MediaPlayer.PlayerCallback extends androidx.media2.SessionPlayer.PlayerCallback {
     ctor public MediaPlayer.PlayerCallback();
-    method public void onError(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, int, int);
-    method public void onInfo(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, int, int);
-    method public void onMediaTimeDiscontinuity(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, androidx.media2.MediaTimestamp2);
-    method public void onSubtitleData(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, androidx.media2.SubtitleData2);
-    method public void onTimedMetaDataAvailable(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, androidx.media2.TimedMetaData2);
-    method public void onVideoSizeChanged(androidx.media2.MediaPlayer, androidx.media2.MediaItem2, int, int);
+    method public void onError(androidx.media2.MediaPlayer, androidx.media2.MediaItem, int, int);
+    method public void onInfo(androidx.media2.MediaPlayer, androidx.media2.MediaItem, int, int);
+    method public void onMediaTimeDiscontinuity(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.MediaTimestamp);
+    method public void onSubtitleData(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.SubtitleData);
+    method public void onTimedMetaDataAvailable(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.TimedMetaData);
+    method public void onVideoSizeChanged(androidx.media2.MediaPlayer, androidx.media2.MediaItem, androidx.media2.VideoSize);
   }
 
   public static final class MediaPlayer.TrackInfo {
@@ -430,66 +427,66 @@
     field public static final int MEDIA_TRACK_TYPE_VIDEO = 1; // 0x1
   }
 
-  public class MediaSession2 implements java.lang.AutoCloseable {
-    method public void broadcastCustomCommand(androidx.media2.SessionCommand2, android.os.Bundle?);
+  public class MediaSession implements java.lang.AutoCloseable {
+    method public void broadcastCustomCommand(androidx.media2.SessionCommand, android.os.Bundle?);
     method public void close();
-    method public java.util.List<androidx.media2.MediaSession2.ControllerInfo> getConnectedControllers();
+    method public java.util.List<androidx.media2.MediaSession.ControllerInfo> getConnectedControllers();
     method public String getId();
-    method public androidx.media2.SessionPlayer2 getPlayer();
-    method public androidx.media2.SessionToken2 getToken();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession2.SessionResult> sendCustomCommand(androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public void setAllowedCommands(androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommandGroup2);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession2.SessionResult> setCustomLayout(androidx.media2.MediaSession2.ControllerInfo, java.util.List<androidx.media2.MediaSession2.CommandButton>);
-    method public void updatePlayer(androidx.media2.SessionPlayer2);
+    method public androidx.media2.SessionPlayer getPlayer();
+    method public androidx.media2.SessionToken getToken();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession.SessionResult> sendCustomCommand(androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommand, android.os.Bundle?);
+    method public void setAllowedCommands(androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommandGroup);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.MediaSession.SessionResult> setCustomLayout(androidx.media2.MediaSession.ControllerInfo, java.util.List<androidx.media2.MediaSession.CommandButton>);
+    method public void updatePlayer(androidx.media2.SessionPlayer);
   }
 
-  public static final class MediaSession2.Builder {
-    ctor public MediaSession2.Builder(android.content.Context, androidx.media2.SessionPlayer2);
-    method public androidx.media2.MediaSession2 build();
-    method public androidx.media2.MediaSession2.Builder setId(String);
-    method public androidx.media2.MediaSession2.Builder setSessionActivity(android.app.PendingIntent?);
-    method public androidx.media2.MediaSession2.Builder setSessionCallback(java.util.concurrent.Executor, androidx.media2.MediaSession2.SessionCallback);
+  public static final class MediaSession.Builder {
+    ctor public MediaSession.Builder(android.content.Context, androidx.media2.SessionPlayer);
+    method public androidx.media2.MediaSession build();
+    method public androidx.media2.MediaSession.Builder setId(String);
+    method public androidx.media2.MediaSession.Builder setSessionActivity(android.app.PendingIntent?);
+    method public androidx.media2.MediaSession.Builder setSessionCallback(java.util.concurrent.Executor, androidx.media2.MediaSession.SessionCallback);
   }
 
-  public static final class MediaSession2.CommandButton implements androidx.versionedparcelable.VersionedParcelable {
-    method public androidx.media2.SessionCommand2? getCommand();
-    method public String? getDisplayName();
+  public static final class MediaSession.CommandButton implements androidx.versionedparcelable.VersionedParcelable {
+    method public androidx.media2.SessionCommand? getCommand();
+    method public CharSequence? getDisplayName();
     method public android.os.Bundle? getExtras();
     method public int getIconResId();
     method public boolean isEnabled();
   }
 
-  public static final class MediaSession2.CommandButton.Builder {
-    ctor public MediaSession2.CommandButton.Builder();
-    method public androidx.media2.MediaSession2.CommandButton build();
-    method public androidx.media2.MediaSession2.CommandButton.Builder setCommand(androidx.media2.SessionCommand2?);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setDisplayName(String?);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setEnabled(boolean);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setExtras(android.os.Bundle?);
-    method public androidx.media2.MediaSession2.CommandButton.Builder setIconResId(int);
+  public static final class MediaSession.CommandButton.Builder {
+    ctor public MediaSession.CommandButton.Builder();
+    method public androidx.media2.MediaSession.CommandButton build();
+    method public androidx.media2.MediaSession.CommandButton.Builder setCommand(androidx.media2.SessionCommand?);
+    method public androidx.media2.MediaSession.CommandButton.Builder setDisplayName(CharSequence?);
+    method public androidx.media2.MediaSession.CommandButton.Builder setEnabled(boolean);
+    method public androidx.media2.MediaSession.CommandButton.Builder setExtras(android.os.Bundle?);
+    method public androidx.media2.MediaSession.CommandButton.Builder setIconResId(int);
   }
 
-  public static final class MediaSession2.ControllerInfo {
+  public static final class MediaSession.ControllerInfo {
     method public String getPackageName();
     method public int getUid();
   }
 
-  public abstract static class MediaSession2.SessionCallback {
-    ctor public MediaSession2.SessionCallback();
-    method public int onCommandRequest(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommand2);
-    method public androidx.media2.SessionCommandGroup2? onConnect(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public androidx.media2.MediaItem2? onCreateMediaItem(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, String);
-    method public androidx.media2.MediaSession2.SessionResult onCustomCommand(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, androidx.media2.SessionCommand2, android.os.Bundle?);
-    method public void onDisconnected(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onFastForward(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onRewind(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onSetRating(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo, String, androidx.media2.Rating2);
-    method public int onSkipBackward(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
-    method public int onSkipForward(androidx.media2.MediaSession2, androidx.media2.MediaSession2.ControllerInfo);
+  public abstract static class MediaSession.SessionCallback {
+    ctor public MediaSession.SessionCallback();
+    method public int onCommandRequest(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommand);
+    method public androidx.media2.SessionCommandGroup? onConnect(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public androidx.media2.MediaItem? onCreateMediaItem(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, String);
+    method public androidx.media2.MediaSession.SessionResult onCustomCommand(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, androidx.media2.SessionCommand, android.os.Bundle?);
+    method public void onDisconnected(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onFastForward(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onRewind(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onSetRating(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo, String, androidx.media2.Rating);
+    method public int onSkipBackward(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
+    method public int onSkipForward(androidx.media2.MediaSession, androidx.media2.MediaSession.ControllerInfo);
   }
 
-  public static class MediaSession2.SessionResult implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public MediaSession2.SessionResult(int, android.os.Bundle?);
+  public static class MediaSession.SessionResult implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public MediaSession.SessionResult(int, android.os.Bundle?);
     method public long getCompletionTime();
     method public android.os.Bundle? getCustomCommandResult();
     method public int getResultCode();
@@ -511,43 +508,43 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  @RequiresApi(28) public final class MediaSessionManager2 {
-    method public static androidx.media2.MediaSessionManager2 getInstance(android.content.Context);
-    method public java.util.Set<androidx.media2.SessionToken2> getSessionServiceTokens();
+  @RequiresApi(28) public final class MediaSessionManager {
+    method public static androidx.media2.MediaSessionManager getInstance(android.content.Context);
+    method public java.util.Set<androidx.media2.SessionToken> getSessionServiceTokens();
   }
 
-  public abstract class MediaSessionService2 extends android.app.Service {
-    ctor public MediaSessionService2();
-    method public final void addSession(androidx.media2.MediaSession2);
-    method public final java.util.List<androidx.media2.MediaSession2> getSessions();
+  public abstract class MediaSessionService extends android.app.Service {
+    ctor public MediaSessionService();
+    method public final void addSession(androidx.media2.MediaSession);
+    method public final java.util.List<androidx.media2.MediaSession> getSessions();
     method @CallSuper public android.os.IBinder? onBind(android.content.Intent);
-    method public abstract androidx.media2.MediaSession2 onGetSession();
-    method public androidx.media2.MediaSessionService2.MediaNotification? onUpdateNotification(androidx.media2.MediaSession2);
-    method public final void removeSession(androidx.media2.MediaSession2);
-    field public static final String SERVICE_INTERFACE = "android.media.MediaSessionService2";
+    method public abstract androidx.media2.MediaSession onGetSession();
+    method public androidx.media2.MediaSessionService.MediaNotification? onUpdateNotification(androidx.media2.MediaSession);
+    method public final void removeSession(androidx.media2.MediaSession);
+    field public static final String SERVICE_INTERFACE = "androidx.media2.MediaSessionService";
   }
 
-  public static class MediaSessionService2.MediaNotification {
-    ctor public MediaSessionService2.MediaNotification(int, android.app.Notification);
+  public static class MediaSessionService.MediaNotification {
+    ctor public MediaSessionService.MediaNotification(int, android.app.Notification);
     method public android.app.Notification getNotification();
     method public int getNotificationId();
   }
 
-  public final class MediaTimestamp2 {
+  public final class MediaTimestamp {
     method public long getAnchorMediaTimeUs();
     method public long getAnchorSystemNanoTime();
     method public float getMediaClockRate();
-    field public static final androidx.media2.MediaTimestamp2 TIMESTAMP_UNKNOWN;
+    field public static final androidx.media2.MediaTimestamp TIMESTAMP_UNKNOWN;
   }
 
-  public final class PercentageRating2 implements androidx.media2.Rating2 {
-    ctor public PercentageRating2();
-    ctor public PercentageRating2(float);
+  public final class PercentageRating implements androidx.media2.Rating {
+    ctor public PercentageRating();
+    ctor public PercentageRating(float);
     method public float getPercentRating();
     method public boolean isRated();
   }
 
-  public final class PlaybackParams2 {
+  public final class PlaybackParams {
     method public Integer? getAudioFallbackMode();
     method public Float? getPitch();
     method public Float? getSpeed();
@@ -556,21 +553,21 @@
     field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1
   }
 
-  public static final class PlaybackParams2.Builder {
-    ctor public PlaybackParams2.Builder();
-    method public androidx.media2.PlaybackParams2 build();
-    method public androidx.media2.PlaybackParams2.Builder setAudioFallbackMode(int);
-    method public androidx.media2.PlaybackParams2.Builder setPitch(float);
-    method public androidx.media2.PlaybackParams2.Builder setSpeed(float);
+  public static final class PlaybackParams.Builder {
+    ctor public PlaybackParams.Builder();
+    method public androidx.media2.PlaybackParams build();
+    method public androidx.media2.PlaybackParams.Builder setAudioFallbackMode(int);
+    method public androidx.media2.PlaybackParams.Builder setPitch(float);
+    method public androidx.media2.PlaybackParams.Builder setSpeed(float);
   }
 
-  public interface Rating2 extends androidx.versionedparcelable.VersionedParcelable {
+  public interface Rating extends androidx.versionedparcelable.VersionedParcelable {
     method public boolean isRated();
   }
 
-  public final class SessionCommand2 implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public SessionCommand2(int);
-    ctor public SessionCommand2(String, android.os.Bundle?);
+  public final class SessionCommand implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public SessionCommand(int);
+    ctor public SessionCommand(String, android.os.Bundle?);
     method public int getCommandCode();
     method public String? getCustomCommand();
     method public android.os.Bundle? getExtras();
@@ -611,59 +608,59 @@
     field public static final int COMMAND_VERSION_1 = 1; // 0x1
   }
 
-  public final class SessionCommandGroup2 implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public SessionCommandGroup2();
-    ctor public SessionCommandGroup2(java.util.Collection<androidx.media2.SessionCommand2>?);
-    method public java.util.Set<androidx.media2.SessionCommand2> getCommands();
-    method public boolean hasCommand(androidx.media2.SessionCommand2);
+  public final class SessionCommandGroup implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public SessionCommandGroup();
+    ctor public SessionCommandGroup(java.util.Collection<androidx.media2.SessionCommand>?);
+    method public java.util.Set<androidx.media2.SessionCommand> getCommands();
+    method public boolean hasCommand(androidx.media2.SessionCommand);
     method public boolean hasCommand(int);
   }
 
-  public static final class SessionCommandGroup2.Builder {
-    ctor public SessionCommandGroup2.Builder();
-    ctor public SessionCommandGroup2.Builder(androidx.media2.SessionCommandGroup2);
-    method public androidx.media2.SessionCommandGroup2.Builder addAllPredefinedCommands(int);
-    method public androidx.media2.SessionCommandGroup2.Builder addCommand(androidx.media2.SessionCommand2);
-    method public androidx.media2.SessionCommandGroup2.Builder addCommand(int);
-    method public androidx.media2.SessionCommandGroup2 build();
-    method public androidx.media2.SessionCommandGroup2.Builder removeCommand(androidx.media2.SessionCommand2);
-    method public androidx.media2.SessionCommandGroup2.Builder removeCommand(int);
+  public static final class SessionCommandGroup.Builder {
+    ctor public SessionCommandGroup.Builder();
+    ctor public SessionCommandGroup.Builder(androidx.media2.SessionCommandGroup);
+    method public androidx.media2.SessionCommandGroup.Builder addAllPredefinedCommands(int);
+    method public androidx.media2.SessionCommandGroup.Builder addCommand(androidx.media2.SessionCommand);
+    method public androidx.media2.SessionCommandGroup.Builder addCommand(int);
+    method public androidx.media2.SessionCommandGroup build();
+    method public androidx.media2.SessionCommandGroup.Builder removeCommand(androidx.media2.SessionCommand);
+    method public androidx.media2.SessionCommandGroup.Builder removeCommand(int);
   }
 
-  public abstract class SessionPlayer2 implements java.lang.AutoCloseable {
-    ctor public SessionPlayer2();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem2);
+  public abstract class SessionPlayer implements java.lang.AutoCloseable {
+    ctor public SessionPlayer();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> addPlaylistItem(int, androidx.media2.MediaItem);
     method public abstract androidx.media.AudioAttributesCompat? getAudioAttributes();
     method public abstract long getBufferedPosition();
     method public abstract int getBufferingState();
-    method protected final java.util.List<androidx.core.util.Pair<androidx.media2.SessionPlayer2.PlayerCallback,java.util.concurrent.Executor>> getCallbacks();
-    method public abstract androidx.media2.MediaItem2? getCurrentMediaItem();
+    method protected final java.util.List<androidx.core.util.Pair<androidx.media2.SessionPlayer.PlayerCallback,java.util.concurrent.Executor>> getCallbacks();
+    method public abstract androidx.media2.MediaItem? getCurrentMediaItem();
     method public abstract long getCurrentPosition();
     method public abstract long getDuration();
     method public abstract float getPlaybackSpeed();
     method public abstract int getPlayerState();
-    method public abstract java.util.List<androidx.media2.MediaItem2>? getPlaylist();
-    method public abstract androidx.media2.MediaMetadata2? getPlaylistMetadata();
+    method public abstract java.util.List<androidx.media2.MediaItem>? getPlaylist();
+    method public abstract androidx.media2.MediaMetadata? getPlaylistMetadata();
     method public abstract int getRepeatMode();
     method public abstract int getShuffleMode();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> pause();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> play();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> prepare();
-    method public final void registerPlayerCallback(java.util.concurrent.Executor, androidx.media2.SessionPlayer2.PlayerCallback);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> removePlaylistItem(androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> seekTo(long);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setMediaItem(androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaybackSpeed(float);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem2>, androidx.media2.MediaMetadata2?);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setRepeatMode(int);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> setShuffleMode(int);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToNextPlaylistItem();
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem2);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> skipToPreviousPlaylistItem();
-    method public final void unregisterPlayerCallback(androidx.media2.SessionPlayer2.PlayerCallback);
-    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer2.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata2?);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> pause();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> play();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> prepare();
+    method public final void registerPlayerCallback(java.util.concurrent.Executor, androidx.media2.SessionPlayer.PlayerCallback);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> removePlaylistItem(androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> replacePlaylistItem(int, androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> seekTo(long);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setMediaItem(androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(float);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem>, androidx.media2.MediaMetadata?);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setRepeatMode(int);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setShuffleMode(int);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToNextPlaylistItem();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPlaylistItem(androidx.media2.MediaItem);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> skipToPreviousPlaylistItem();
+    method public final void unregisterPlayerCallback(androidx.media2.SessionPlayer.PlayerCallback);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> updatePlaylistMetadata(androidx.media2.MediaMetadata?);
     field public static final int BUFFERING_STATE_BUFFERING_AND_PLAYABLE = 1; // 0x1
     field public static final int BUFFERING_STATE_BUFFERING_AND_STARVED = 2; // 0x2
     field public static final int BUFFERING_STATE_COMPLETE = 3; // 0x3
@@ -682,25 +679,25 @@
     field public static final long UNKNOWN_TIME = -1L; // 0xffffffffffffffffL
   }
 
-  public abstract static class SessionPlayer2.PlayerCallback {
-    ctor public SessionPlayer2.PlayerCallback();
-    method public void onAudioAttributesChanged(androidx.media2.SessionPlayer2, androidx.media.AudioAttributesCompat?);
-    method public void onBufferingStateChanged(androidx.media2.SessionPlayer2, androidx.media2.MediaItem2?, int);
-    method public void onCurrentMediaItemChanged(androidx.media2.SessionPlayer2, androidx.media2.MediaItem2);
-    method public void onPlaybackCompleted(androidx.media2.SessionPlayer2);
-    method public void onPlaybackSpeedChanged(androidx.media2.SessionPlayer2, float);
-    method public void onPlayerStateChanged(androidx.media2.SessionPlayer2, int);
-    method public void onPlaylistChanged(androidx.media2.SessionPlayer2, java.util.List<androidx.media2.MediaItem2>?, androidx.media2.MediaMetadata2?);
-    method public void onPlaylistMetadataChanged(androidx.media2.SessionPlayer2, androidx.media2.MediaMetadata2?);
-    method public void onRepeatModeChanged(androidx.media2.SessionPlayer2, int);
-    method public void onSeekCompleted(androidx.media2.SessionPlayer2, long);
-    method public void onShuffleModeChanged(androidx.media2.SessionPlayer2, int);
+  public abstract static class SessionPlayer.PlayerCallback {
+    ctor public SessionPlayer.PlayerCallback();
+    method public void onAudioAttributesChanged(androidx.media2.SessionPlayer, androidx.media.AudioAttributesCompat?);
+    method public void onBufferingStateChanged(androidx.media2.SessionPlayer, androidx.media2.MediaItem?, int);
+    method public void onCurrentMediaItemChanged(androidx.media2.SessionPlayer, androidx.media2.MediaItem);
+    method public void onPlaybackCompleted(androidx.media2.SessionPlayer);
+    method public void onPlaybackSpeedChanged(androidx.media2.SessionPlayer, float);
+    method public void onPlayerStateChanged(androidx.media2.SessionPlayer, int);
+    method public void onPlaylistChanged(androidx.media2.SessionPlayer, java.util.List<androidx.media2.MediaItem>?, androidx.media2.MediaMetadata?);
+    method public void onPlaylistMetadataChanged(androidx.media2.SessionPlayer, androidx.media2.MediaMetadata?);
+    method public void onRepeatModeChanged(androidx.media2.SessionPlayer, int);
+    method public void onSeekCompleted(androidx.media2.SessionPlayer, long);
+    method public void onShuffleModeChanged(androidx.media2.SessionPlayer, int);
   }
 
-  public static class SessionPlayer2.PlayerResult {
-    ctor public SessionPlayer2.PlayerResult(int, androidx.media2.MediaItem2?);
+  public static class SessionPlayer.PlayerResult {
+    ctor public SessionPlayer.PlayerResult(int, androidx.media2.MediaItem?);
     method public long getCompletionTime();
-    method public androidx.media2.MediaItem2? getMediaItem();
+    method public androidx.media2.MediaItem? getMediaItem();
     method public int getResultCode();
     field public static final int RESULT_CODE_BAD_VALUE = -3; // 0xfffffffd
     field public static final int RESULT_CODE_INVALID_STATE = -2; // 0xfffffffe
@@ -712,8 +709,8 @@
     field public static final int RESULT_CODE_UNKNOWN_ERROR = -1; // 0xffffffff
   }
 
-  public final class SessionToken2 implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public SessionToken2(android.content.Context, android.content.ComponentName);
+  public final class SessionToken implements androidx.versionedparcelable.VersionedParcelable {
+    ctor public SessionToken(android.content.Context, android.content.ComponentName);
     method public String getPackageName();
     method public String? getServiceName();
     method public int getType();
@@ -723,15 +720,15 @@
     field public static final int TYPE_SESSION_SERVICE = 1; // 0x1
   }
 
-  public final class StarRating2 implements androidx.media2.Rating2 {
-    ctor public StarRating2(@IntRange(from=1) int);
-    ctor public StarRating2(@IntRange(from=1) int, float);
+  public final class StarRating implements androidx.media2.Rating {
+    ctor public StarRating(@IntRange(from=1) int);
+    ctor public StarRating(@IntRange(from=1) int, float);
     method public int getMaxStars();
     method public float getStarRating();
     method public boolean isRated();
   }
 
-  public final class SubtitleData2 {
+  public final class SubtitleData {
     method public byte[] getData();
     method public long getDurationUs();
     method public long getStartTimeUs();
@@ -741,32 +738,37 @@
     field public static final String MIMETYPE_TEXT_VTT = "text/vtt";
   }
 
-  public final class ThumbRating2 implements androidx.media2.Rating2 {
-    ctor public ThumbRating2();
-    ctor public ThumbRating2(boolean);
+  public final class ThumbRating implements androidx.media2.Rating {
+    ctor public ThumbRating();
+    ctor public ThumbRating(boolean);
     method public boolean isRated();
     method public boolean isThumbUp();
   }
 
-  public class TimedMetaData2 {
+  public class TimedMetaData {
     method public byte[]! getMetaData();
     method public long getTimestamp();
   }
 
-  public class UriMediaItem2 extends androidx.media2.MediaItem2 {
+  public class UriMediaItem extends androidx.media2.MediaItem {
     method public android.net.Uri getUri();
     method public android.content.Context getUriContext();
     method public java.util.List<java.net.HttpCookie>? getUriCookies();
     method public java.util.Map<java.lang.String,java.lang.String>? getUriHeaders();
   }
 
-  public static final class UriMediaItem2.Builder {
-    ctor public UriMediaItem2.Builder(android.content.Context, android.net.Uri);
-    ctor public UriMediaItem2.Builder(android.content.Context, android.net.Uri, java.util.Map<java.lang.String,java.lang.String>?, java.util.List<java.net.HttpCookie>?);
-    method public androidx.media2.UriMediaItem2 build();
-    method public androidx.media2.UriMediaItem2.Builder! setEndPosition(long);
-    method public androidx.media2.UriMediaItem2.Builder! setMetadata(androidx.media2.MediaMetadata2!);
-    method public androidx.media2.UriMediaItem2.Builder! setStartPosition(long);
+  public static final class UriMediaItem.Builder {
+    ctor public UriMediaItem.Builder(android.content.Context, android.net.Uri);
+    ctor public UriMediaItem.Builder(android.content.Context, android.net.Uri, java.util.Map<java.lang.String,java.lang.String>?, java.util.List<java.net.HttpCookie>?);
+    method public androidx.media2.UriMediaItem build();
+    method public androidx.media2.UriMediaItem.Builder! setEndPosition(long);
+    method public androidx.media2.UriMediaItem.Builder! setMetadata(androidx.media2.MediaMetadata!);
+    method public androidx.media2.UriMediaItem.Builder! setStartPosition(long);
+  }
+
+  public final class VideoSize {
+    method public int getHeight();
+    method public int getWidth();
   }
 
 }
diff --git a/media2/src/androidTest/AndroidManifest.xml b/media2/src/androidTest/AndroidManifest.xml
index 4db8ed3..2c52d70 100644
--- a/media2/src/androidTest/AndroidManifest.xml
+++ b/media2/src/androidTest/AndroidManifest.xml
@@ -35,21 +35,21 @@
 
         <activity android:name="androidx.media2.MockActivity" />
 
-        <!-- Keep the test services synced together with the MockMediaSessionService2 -->
-        <service android:name="androidx.media2.MockMediaSessionService2">
+        <!-- Keep the test services synced together with the MockMediaSessionService -->
+        <service android:name="androidx.media2.MockMediaSessionService">
             <intent-filter>
-                <action android:name="android.media.MediaSessionService2" />
+                <action android:name="androidx.media2.MediaSessionService" />
                 <action android:name="android.media.browse.MediaBrowserService" />
             </intent-filter>
         </service>
         <!-- Keep the test services synced together with the MockMediaLibraryService -->
-        <service android:name="androidx.media2.MockMediaLibraryService2">
+        <service android:name="androidx.media2.MockMediaLibraryService">
             <intent-filter>
-                <action android:name="android.media.MediaLibraryService2" />
+                <action android:name="androidx.media2.MediaLibraryService" />
                 <action android:name="android.media.browse.MediaBrowserService" />
             </intent-filter>
         </service>
-        <!-- Keep the test services synced together with the MockMediaSessionService2 -->
+        <!-- Keep the test services synced together with the MockMediaSessionService -->
         <service android:name="androidx.media2.MockMediaBrowserServiceCompat">
             <intent-filter>
                 <action android:name="android.media.browse.MediaBrowserService" />
diff --git a/media2/src/androidTest/java/androidx/media2/MediaBrowser2LegacyTest.java b/media2/src/androidTest/java/androidx/media2/MediaBrowserLegacyTest.java
similarity index 77%
rename from media2/src/androidTest/java/androidx/media2/MediaBrowser2LegacyTest.java
rename to media2/src/androidTest/java/androidx/media2/MediaBrowserLegacyTest.java
index c7ead04..ac86618 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaBrowser2LegacyTest.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaBrowserLegacyTest.java
@@ -16,7 +16,7 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_SUCCESS;
 import static androidx.media2.TestUtils.assertMediaItemWithId;
 import static androidx.media2.TestUtils.createLibraryParams;
 
@@ -31,7 +31,6 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.support.v4.media.MediaBrowserCompat;
-import android.support.v4.media.MediaBrowserCompat.MediaItem;
 import android.support.v4.media.MediaDescriptionCompat;
 
 import androidx.annotation.NonNull;
@@ -39,10 +38,10 @@
 import androidx.media.MediaBrowserServiceCompat;
 import androidx.media.MediaBrowserServiceCompat.BrowserRoot;
 import androidx.media.MediaBrowserServiceCompat.Result;
-import androidx.media2.MediaBrowser2.BrowserCallback;
-import androidx.media2.MediaBrowser2.BrowserResult;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaLibraryService2.LibraryParams;
+import androidx.media2.MediaBrowser.BrowserCallback;
+import androidx.media2.MediaBrowser.BrowserResult;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaLibraryService.LibraryParams;
 import androidx.media2.MockMediaBrowserServiceCompat.Proxy;
 import androidx.test.filters.SmallTest;
 
@@ -59,14 +58,14 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaBrowser2} with {@link MediaBrowserServiceCompat}.
+ * Tests {@link MediaBrowser} with {@link MediaBrowserServiceCompat}.
  */
 @SmallTest
-public class MediaBrowser2LegacyTest extends MediaSession2TestBase {
-    private static final String TAG = "MediaBrowser2LegacyTest";
+public class MediaBrowserLegacyTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaBrowserLegacyTest";
 
     @Override
-    TestControllerInterface onCreateController(final @NonNull SessionToken2 token,
+    TestControllerInterface onCreateController(final @NonNull SessionToken token,
             final @Nullable ControllerCallback callback) throws InterruptedException {
         final AtomicReference<TestControllerInterface> controller = new AtomicReference<>();
         sHandler.postAndSync(new Runnable() {
@@ -82,19 +81,19 @@
         return controller.get();
     }
 
-    private MediaBrowser2 createBrowser(BrowserCallback callback) {
+    private MediaBrowser createBrowser(BrowserCallback callback) {
         return createBrowser(true, callback);
     }
 
-    private MediaBrowser2 createBrowser(boolean waitForConnect, BrowserCallback callback) {
-        SessionToken2 token = new SessionToken2(mContext,
+    private MediaBrowser createBrowser(boolean waitForConnect, BrowserCallback callback) {
+        SessionToken token = new SessionToken(mContext,
                 new ComponentName(mContext, MockMediaBrowserServiceCompat.class));
         try {
-            return (MediaBrowser2) createController(token, waitForConnect, callback);
+            return (MediaBrowser) createController(token, waitForConnect, callback);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
-        fail("failed to create MediaBrowser2 for connecting MediaBrowserServiceCompat");
+        fail("failed to create MediaBrowser for connecting MediaBrowserServiceCompat");
         return null;
     }
 
@@ -114,7 +113,7 @@
     public void testConnect() throws InterruptedException {
         prepareLooper();
 
-        MediaBrowser2 browser = createBrowser(new MediaBrowser2.BrowserCallback() { });
+        MediaBrowser browser = createBrowser(new MediaBrowser.BrowserCallback() { });
         // If connection failed, exception will be thrown inside of #createBrowser().
     }
 
@@ -131,16 +130,16 @@
         });
 
         final CountDownLatch latch = new CountDownLatch(1);
-        MediaBrowser2 browser = createBrowser(false, new MediaBrowser2.BrowserCallback() {
+        MediaBrowser browser = createBrowser(false, new MediaBrowser.BrowserCallback() {
             @Override
-            public void onConnected(MediaController2 controller,
-                    SessionCommandGroup2 allowedCommands) {
+            public void onConnected(MediaController controller,
+                    SessionCommandGroup allowedCommands) {
                 fail("shouldn't allow connection");
                 super.onConnected(controller, allowedCommands);
             }
 
             @Override
-            public void onDisconnected(MediaController2 controller) {
+            public void onDisconnected(MediaController controller) {
                 super.onDisconnected(controller);
                 latch.countDown();
             }
@@ -176,7 +175,7 @@
             }
         });
 
-        MediaBrowser2 browser = createBrowser(null);
+        MediaBrowser browser = createBrowser(null);
         BrowserResult result = browser.getLibraryRoot(testParams)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -198,16 +197,16 @@
     public void testGetItem() throws Exception {
         prepareLooper();
         final String testMediaId = "test_media_item";
-        final MediaItem testItem = createMediaItem(testMediaId);
+        final MediaBrowserCompat.MediaItem testItem = createMediaItem(testMediaId);
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onLoadItem(String itemId, Result<MediaItem> result) {
+            public void onLoadItem(String itemId, Result<MediaBrowserCompat.MediaItem> result) {
                 assertEquals(testMediaId, itemId);
                 result.sendResult(testItem);
             }
         });
 
-        MediaBrowser2 browser = createBrowser(null);
+        MediaBrowser browser = createBrowser(null);
         BrowserResult result = browser.getItem(testMediaId)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -220,12 +219,12 @@
         final String testMediaId = "test_media_item";
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onLoadItem(String itemId, Result<MediaItem> result) {
+            public void onLoadItem(String itemId, Result<MediaBrowserCompat.MediaItem> result) {
                 assertEquals(testMediaId, itemId);
                 result.sendResult(null);
             }
         });
-        MediaBrowser2 browser = createBrowser(null);
+        MediaBrowser browser = createBrowser(null);
         BrowserResult result = browser.getItem(testMediaId)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertNotEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -237,18 +236,19 @@
         final String testParentId = "test_media_parent";
         final int testPage = 2;
         final int testPageSize = 4;
-        final List<MediaItem> testFullMediaItemList = createMediaItems(
+        final List<MediaBrowserCompat.MediaItem> testFullMediaItemList = createMediaItems(
                 (testPage + 1) * testPageSize);
-        final List<MediaItem> testPaginatedMediaItemList = testFullMediaItemList.subList(
-                testPage * testPageSize,
-                Math.min((testPage + 1) * testPageSize, testFullMediaItemList.size()));
+        final List<MediaBrowserCompat.MediaItem> testPaginatedMediaItemList =
+                testFullMediaItemList.subList(testPage * testPageSize,
+                        Math.min((testPage + 1) * testPageSize, testFullMediaItemList.size()));
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onLoadChildren(String parentId, Result<List<MediaItem>> result) {
+            public void onLoadChildren(String parentId,
+                    Result<List<MediaBrowserCompat.MediaItem>> result) {
                 result.sendResult(testFullMediaItemList);
             }
         });
-        MediaBrowser2 browser = createBrowser(null);
+        MediaBrowser browser = createBrowser(null);
         ListenableFuture<BrowserResult> future = browser
                 .getChildren(testParentId, testPage, testPageSize, null);
         BrowserResult result = future.get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -262,16 +262,17 @@
         final String testParentId = "test_media_parent";
         final int testPage = 2;
         final int testPageSize = 4;
-        final List<MediaItem> testMediaItemList = createMediaItems(testPageSize);
+        final List<MediaBrowserCompat.MediaItem> testMediaItemList = createMediaItems(testPageSize);
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onLoadChildren(String parentId, Result<List<MediaItem>> result) {
+            public void onLoadChildren(String parentId,
+                    Result<List<MediaBrowserCompat.MediaItem>> result) {
                 fail("This isn't expected to be called");
             }
 
             @Override
-            public void onLoadChildren(String parentId, Result<List<MediaItem>> result,
-                    Bundle options) {
+            public void onLoadChildren(String parentId,
+                    Result<List<MediaBrowserCompat.MediaItem>> result, Bundle options) {
                 assertEquals(testParentId, parentId);
                 assertEquals(testPage, options.getInt(MediaBrowserCompat.EXTRA_PAGE));
                 assertEquals(testPageSize, options.getInt(MediaBrowserCompat.EXTRA_PAGE_SIZE));
@@ -280,7 +281,7 @@
             }
         });
 
-        MediaBrowser2 browser = createBrowser(null);
+        MediaBrowser browser = createBrowser(null);
         BrowserResult result = browser.getChildren(testParentId, testPage, testPageSize, null)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -295,11 +296,12 @@
         final int testPage = 2;
         final int testPageSize = 4;
         final LibraryParams testParams = createLibraryParams();
-        final List<MediaItem> testMediaItemList = createMediaItems(testPageSize / 2);
+        final List<MediaBrowserCompat.MediaItem> testMediaItemList =
+                createMediaItems(testPageSize / 2);
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onLoadChildren(String parentId, Result<List<MediaItem>> result,
-                    Bundle options) {
+            public void onLoadChildren(String parentId,
+                    Result<List<MediaBrowserCompat.MediaItem>> result, Bundle options) {
                 assertEquals(testParentId, parentId);
                 assertEquals(testPage, options.getInt(MediaBrowserCompat.EXTRA_PAGE));
                 assertEquals(testPageSize, options.getInt(MediaBrowserCompat.EXTRA_PAGE_SIZE));
@@ -307,7 +309,7 @@
                 result.sendResult(testMediaItemList);
             }
         });
-        MediaBrowser2 browser = createBrowser(null);
+        MediaBrowser browser = createBrowser(null);
         BrowserResult result = browser.getChildren(testParentId, testPage, testPageSize, testParams)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -323,8 +325,8 @@
         final int testPageSize = 4;
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onLoadChildren(String parentId, Result<List<MediaItem>> result,
-                    Bundle options) {
+            public void onLoadChildren(String parentId,
+                    Result<List<MediaBrowserCompat.MediaItem>> result, Bundle options) {
                 assertEquals(testParentId, parentId);
                 assertEquals(testPage, options.getInt(MediaBrowserCompat.EXTRA_PAGE));
                 assertEquals(testPageSize, options.getInt(MediaBrowserCompat.EXTRA_PAGE_SIZE));
@@ -332,7 +334,7 @@
             }
         });
 
-        MediaBrowser2 browser = createBrowser(null);
+        MediaBrowser browser = createBrowser(null);
         BrowserResult result = browser.getChildren(testParentId, testPage, testPageSize, null)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertNotEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -346,15 +348,16 @@
         final int testPage = 2;
         final int testPageSize = 4;
         final LibraryParams testParams = createLibraryParams();
-        final List<MediaItem> testFullSearchResult = createMediaItems(
+        final List<MediaBrowserCompat.MediaItem> testFullSearchResult = createMediaItems(
                 (testPage + 1) * testPageSize + 3);
-        final List<MediaItem> testPaginatedSearchResult = testFullSearchResult.subList(
-                testPage * testPageSize,
-                Math.min((testPage + 1) * testPageSize, testFullSearchResult.size()));
+        final List<MediaBrowserCompat.MediaItem> testPaginatedSearchResult =
+                testFullSearchResult.subList(testPage * testPageSize,
+                        Math.min((testPage + 1) * testPageSize, testFullSearchResult.size()));
 
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onSearch(String query, Bundle extras, Result<List<MediaItem>> result) {
+            public void onSearch(String query, Bundle extras,
+                    Result<List<MediaBrowserCompat.MediaItem>> result) {
                 assertEquals(testQuery, query);
                 assertTrue(TestUtils.contains(extras, testParams.getExtras()));
                 if (extras != null && extras.getInt(MediaBrowserCompat.EXTRA_PAGE, -1) >= 0) {
@@ -368,9 +371,9 @@
         });
 
         final CountDownLatch latch = new CountDownLatch(1);
-        MediaBrowser2 browser = createBrowser(new BrowserCallback() {
+        MediaBrowser browser = createBrowser(new BrowserCallback() {
             @Override
-            public void onSearchResultChanged(MediaBrowser2 browser, String query, int itemCount,
+            public void onSearchResultChanged(MediaBrowser browser, String query, int itemCount,
                     LibraryParams params) {
                 assertEquals(testQuery, query);
                 assertEquals(testFullSearchResult.size(), itemCount);
@@ -399,15 +402,16 @@
 
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onSearch(String query, Bundle extras, Result<List<MediaItem>> result) {
+            public void onSearch(String query, Bundle extras,
+                    Result<List<MediaBrowserCompat.MediaItem>> result) {
                 result.sendResult(null);
             }
         });
 
         final CountDownLatch latch = new CountDownLatch(1);
-        MediaBrowser2 browser = createBrowser(new BrowserCallback() {
+        MediaBrowser browser = createBrowser(new BrowserCallback() {
             @Override
-            public void onSearchResultChanged(MediaBrowser2 browser, String query, int itemCount,
+            public void onSearchResultChanged(MediaBrowser browser, String query, int itemCount,
                     LibraryParams params) {
                 assertEquals(testQuery, query);
                 assertEquals(0, itemCount);
@@ -428,9 +432,9 @@
     /**
      * Tests following APIs
      * <ul>
-     *    <li>{@link MediaBrowser2#subscribe(String, LibraryParams)}</li>
-     *    <li>{@link MediaBrowser2#unsubscribe(String)}</li>
-     *    <li>{@link MediaBrowser2.BrowserCallback#onChildrenChanged}</li>
+     *    <li>{@link MediaBrowser#subscribe(String, LibraryParams)}</li>
+     *    <li>{@link MediaBrowser#unsubscribe(String)}</li>
+     *    <li>{@link MediaBrowser.BrowserCallback#onChildrenChanged}</li>
      * </ul>
      * @throws InterruptedException
      */
@@ -439,13 +443,13 @@
         prepareLooper();
         final String testParentId = "testSubscribe";
         final LibraryParams testParams = createLibraryParams();
-        final List<MediaItem> testFullMediaItemList = createMediaItems(4);
+        final List<MediaBrowserCompat.MediaItem> testFullMediaItemList = createMediaItems(4);
         final CountDownLatch subscribeLatch = new CountDownLatch(1);
         final CountDownLatch latch = new CountDownLatch(2);
         MockMediaBrowserServiceCompat.setMediaBrowserServiceProxy(new Proxy() {
             @Override
-            public void onLoadChildren(String parentId, Result<List<MediaItem>> result,
-                    Bundle option) {
+            public void onLoadChildren(String parentId,
+                    Result<List<MediaBrowserCompat.MediaItem>> result, Bundle option) {
                 // Called by subscribe and notifyChildrenChanged()
                 assertEquals(testParentId, parentId);
                 assertTrue(TestUtils.equals(testParams.getExtras(), option));
@@ -458,9 +462,9 @@
                 }
             }
         });
-        MediaBrowser2 browser = createBrowser(new MediaBrowser2.BrowserCallback() {
+        MediaBrowser browser = createBrowser(new MediaBrowser.BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 // Triggered by both subscribe and notifyChildrenChanged().
                 // Shouldn't be called after the unsubscribe().
@@ -489,14 +493,14 @@
         Thread.sleep(TIMEOUT_MS);
     }
 
-    private static MediaItem createMediaItem(String mediaId) {
+    private static MediaBrowserCompat.MediaItem createMediaItem(String mediaId) {
         final MediaDescriptionCompat desc = new MediaDescriptionCompat.Builder()
                 .setMediaId(mediaId).setTitle("title: " + mediaId).build();
-        return new MediaItem(desc, MediaItem.FLAG_PLAYABLE);
+        return new MediaBrowserCompat.MediaItem(desc, MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
     }
 
-    private static List<MediaItem> createMediaItems(int size) {
-        final List<MediaItem> list = new ArrayList<>();
+    private static List<MediaBrowserCompat.MediaItem> createMediaItems(int size) {
+        final List<MediaBrowserCompat.MediaItem> list = new ArrayList<>();
         String caller = Thread.currentThread().getStackTrace()[2].getMethodName();
         for (int i = 0; i < size; i++) {
             list.add(createMediaItem(caller + "_child_" + i));
@@ -504,15 +508,16 @@
         return list;
     }
 
-    private static void assertItemEquals(MediaItem item, MediaItem2 item2) {
+    private static void assertItemEquals(MediaBrowserCompat.MediaItem item, MediaItem item2) {
         assertEquals(item.getMediaId(), item2.getMediaId());
         assertEquals(item.getMediaId(), item2.getMetadata().getString(
-                MediaMetadata2.METADATA_KEY_MEDIA_ID));
+                MediaMetadata.METADATA_KEY_MEDIA_ID));
         assertEquals(item.getDescription().getTitle(),
-                item2.getMetadata().getString(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE));
+                item2.getMetadata().getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE));
     }
 
-    private static void assertItemsEquals(List<MediaItem> itemList, List<MediaItem2> item2List) {
+    private static void assertItemsEquals(List<MediaBrowserCompat.MediaItem> itemList,
+            List<MediaItem> item2List) {
         if (itemList == null && item2List == null) {
             return;
         }
@@ -523,10 +528,10 @@
         }
     }
 
-    public class TestMediaBrowser extends MediaBrowser2 implements TestControllerInterface {
+    public class TestMediaBrowser extends MediaBrowser implements TestControllerInterface {
         private final BrowserCallback mCallback;
 
-        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken2 token,
+        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken token,
                 @NonNull BrowserCallback callback) {
             super(context, token, sHandlerExecutor, callback);
             mCallback = callback;
diff --git a/media2/src/androidTest/java/androidx/media2/MediaBrowser2Test.java b/media2/src/androidTest/java/androidx/media2/MediaBrowserTest.java
similarity index 84%
rename from media2/src/androidTest/java/androidx/media2/MediaBrowser2Test.java
rename to media2/src/androidTest/java/androidx/media2/MediaBrowserTest.java
index 4348a2c..4f29307 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaBrowser2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaBrowserTest.java
@@ -16,8 +16,8 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_PERMISSION_DENIED;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_PERMISSION_DENIED;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_SUCCESS;
 import static androidx.media2.TestUtils.assertLibraryParamsEquals;
 import static androidx.media2.TestUtils.assertMediaItemEquals;
 import static androidx.media2.TestUtils.assertMediaItemWithId;
@@ -38,14 +38,14 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.media2.MediaBrowser2.BrowserCallback;
-import androidx.media2.MediaBrowser2.BrowserResult;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
-import androidx.media2.MediaSession2.ControllerInfo;
+import androidx.media2.MediaBrowser.BrowserCallback;
+import androidx.media2.MediaBrowser.BrowserResult;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaLibraryService.MediaLibrarySession;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaSession.ControllerInfo;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
@@ -60,20 +60,20 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaBrowser2}.
+ * Tests {@link MediaBrowser}.
  * <p>
- * This test inherits {@link MediaController2Test} to ensure that inherited APIs from
- * {@link MediaController2} works cleanly.
+ * This test inherits {@link MediaControllerTest} to ensure that inherited APIs from
+ * {@link MediaController} works cleanly.
  */
 // TODO(jaewan): Implement host-side test so browser and service can run in different processes.
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaBrowser2Test extends MediaController2Test {
-    private static final String TAG = "MediaBrowser2Test";
+public class MediaBrowserTest extends MediaControllerTest {
+    private static final String TAG = "MediaBrowserTest";
 
     @Override
-    TestControllerInterface onCreateController(final @NonNull SessionToken2 token,
+    TestControllerInterface onCreateController(final @NonNull SessionToken token,
             final @Nullable ControllerCallback callback) throws InterruptedException {
         final AtomicReference<TestControllerInterface> controller = new AtomicReference<>();
         sHandler.postAndSync(new Runnable() {
@@ -89,13 +89,13 @@
         return controller.get();
     }
 
-    final MediaBrowser2 createBrowser() throws InterruptedException {
+    final MediaBrowser createBrowser() throws InterruptedException {
         return createBrowser(null);
     }
 
-    final MediaBrowser2 createBrowser(@Nullable BrowserCallback callback)
+    final MediaBrowser createBrowser(@Nullable BrowserCallback callback)
             throws InterruptedException {
-        return (MediaBrowser2) createController(MockMediaLibraryService2.getToken(mContext),
+        return (MediaBrowser) createController(MockMediaLibraryService.getToken(mContext),
                 true, callback);
     }
 
@@ -121,18 +121,18 @@
         prepareLooper();
         final LibraryParams params = TestUtils.createLibraryParams();
 
-        MockMediaLibraryService2.setAssertLibraryParams(params);
+        MockMediaLibraryService.setAssertLibraryParams(params);
         BrowserResult result = createBrowser().getLibraryRoot(params)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        assertMediaItemEquals(MockMediaLibraryService2.ROOT_ITEM, result.getMediaItem());
-        assertLibraryParamsEquals(MockMediaLibraryService2.ROOT_PARAMS, result.getLibraryParams());
+        assertMediaItemEquals(MockMediaLibraryService.ROOT_ITEM, result.getMediaItem());
+        assertLibraryParamsEquals(MockMediaLibraryService.ROOT_PARAMS, result.getLibraryParams());
     }
 
     @Test
     public void testGetItem() throws Exception {
         prepareLooper();
-        final String mediaId = MockMediaLibraryService2.MEDIA_ID_GET_ITEM;
+        final String mediaId = MockMediaLibraryService.MEDIA_ID_GET_ITEM;
 
         BrowserResult result = createBrowser().getItem(mediaId)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -154,24 +154,24 @@
     @Test
     public void testGetChildren() throws Exception {
         prepareLooper();
-        final String parentId = MockMediaLibraryService2.PARENT_ID;
+        final String parentId = MockMediaLibraryService.PARENT_ID;
         final int page = 4;
         final int pageSize = 10;
         final LibraryParams params = TestUtils.createLibraryParams();
 
-        MockMediaLibraryService2.setAssertLibraryParams(params);
+        MockMediaLibraryService.setAssertLibraryParams(params);
         BrowserResult result = createBrowser().getChildren(parentId, page, pageSize, params)
                         .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
-        TestUtils.assertPaginatedListEquals(MockMediaLibraryService2.GET_CHILDREN_RESULT,
+        TestUtils.assertPaginatedListEquals(MockMediaLibraryService.GET_CHILDREN_RESULT,
                 page, pageSize, result.getMediaItems());
     }
 
     @Test
     public void testGetChildrenEmptyResult() throws Exception {
         prepareLooper();
-        final String parentId = MockMediaLibraryService2.PARENT_ID_NO_CHILDREN;
+        final String parentId = MockMediaLibraryService.PARENT_ID_NO_CHILDREN;
 
         BrowserResult result = createBrowser().getChildren(parentId, 1, 1, null)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -182,7 +182,7 @@
     @Test
     public void testGetChildrenNullResult() throws Exception {
         prepareLooper();
-        final String parentId = MockMediaLibraryService2.PARENT_ID_ERROR;
+        final String parentId = MockMediaLibraryService.PARENT_ID_ERROR;
 
         BrowserResult result = createBrowser().getChildren(parentId, 1, 1, null)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -193,7 +193,7 @@
     @Test
     public void testSearch() throws Exception {
         prepareLooper();
-        final String query = MockMediaLibraryService2.SEARCH_QUERY;
+        final String query = MockMediaLibraryService.SEARCH_QUERY;
         final int page = 4;
         final int pageSize = 10;
         final LibraryParams params = TestUtils.createLibraryParams();
@@ -201,18 +201,18 @@
         final CountDownLatch latchForSearch = new CountDownLatch(1);
         final BrowserCallback callback = new BrowserCallback() {
             @Override
-            public void onSearchResultChanged(MediaBrowser2 browser,
+            public void onSearchResultChanged(MediaBrowser browser,
                     String queryOut, int itemCount, LibraryParams paramsOut) {
                 assertEquals(query, queryOut);
                 assertLibraryParamsEquals(params, paramsOut);
-                assertEquals(MockMediaLibraryService2.SEARCH_RESULT_COUNT, itemCount);
+                assertEquals(MockMediaLibraryService.SEARCH_RESULT_COUNT, itemCount);
                 latchForSearch.countDown();
             }
         };
 
         // Request the search.
-        MockMediaLibraryService2.setAssertLibraryParams(params);
-        MediaBrowser2 browser = createBrowser(callback);
+        MockMediaLibraryService.setAssertLibraryParams(params);
+        MediaBrowser browser = createBrowser(callback);
         BrowserResult result = browser.search(query, params)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -223,7 +223,7 @@
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
-        TestUtils.assertPaginatedListEquals(MockMediaLibraryService2.SEARCH_RESULT,
+        TestUtils.assertPaginatedListEquals(MockMediaLibraryService.SEARCH_RESULT,
                 page, pageSize, result.getMediaItems());
     }
 
@@ -231,40 +231,40 @@
     @LargeTest
     public void testSearchTakesTime() throws Exception {
         prepareLooper();
-        final String query = MockMediaLibraryService2.SEARCH_QUERY_TAKES_TIME;
+        final String query = MockMediaLibraryService.SEARCH_QUERY_TAKES_TIME;
         final LibraryParams params = createLibraryParams();
 
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback callback = new BrowserCallback() {
             @Override
             public void onSearchResultChanged(
-                    MediaBrowser2 browser, String queryOut, int itemCount,
+                    MediaBrowser browser, String queryOut, int itemCount,
                     LibraryParams paramsOut) {
                 assertEquals(query, queryOut);
                 assertLibraryParamsEquals(params, paramsOut);
-                assertEquals(MockMediaLibraryService2.SEARCH_RESULT_COUNT, itemCount);
+                assertEquals(MockMediaLibraryService.SEARCH_RESULT_COUNT, itemCount);
                 latch.countDown();
             }
         };
 
-        MockMediaLibraryService2.setAssertLibraryParams(params);
+        MockMediaLibraryService.setAssertLibraryParams(params);
         BrowserResult result = createBrowser(callback).search(query, params)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
         assertTrue(latch.await(
-                MockMediaLibraryService2.SEARCH_TIME_IN_MS + TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                MockMediaLibraryService.SEARCH_TIME_IN_MS + TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
     @Test
     public void testSearchEmptyResult() throws Exception {
         prepareLooper();
-        final String query = MockMediaLibraryService2.SEARCH_QUERY_EMPTY_RESULT;
+        final String query = MockMediaLibraryService.SEARCH_QUERY_EMPTY_RESULT;
         final LibraryParams params = TestUtils.createLibraryParams();
 
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback callback = new BrowserCallback() {
             @Override
-            public void onSearchResultChanged(MediaBrowser2 browser, String queryOut, int itemCount,
+            public void onSearchResultChanged(MediaBrowser browser, String queryOut, int itemCount,
                     LibraryParams paramsOut) {
                 assertEquals(query, queryOut);
                 assertLibraryParamsEquals(params, paramsOut);
@@ -273,7 +273,7 @@
             }
         };
 
-        MockMediaLibraryService2.setAssertLibraryParams(params);
+        MockMediaLibraryService.setAssertLibraryParams(params);
         BrowserResult result = createBrowser(callback).search(query, params)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -288,8 +288,8 @@
 
         final MediaLibrarySessionCallback callback = new MediaLibrarySessionCallback() {
             @Override
-            public int onSubscribe(@NonNull MediaLibraryService2.MediaLibrarySession session,
-                    @NonNull MediaSession2.ControllerInfo info, @NonNull String parentId,
+            public int onSubscribe(@NonNull MediaLibraryService.MediaLibrarySession session,
+                    @NonNull MediaSession.ControllerInfo info, @NonNull String parentId,
                     @Nullable LibraryParams paramsOut) {
                 if (Process.myUid() == info.getUid()) {
                     assertEquals(testParentId, parentId);
@@ -300,7 +300,7 @@
             }
         };
         TestServiceRegistry.getInstance().setSessionCallback(callback);
-        MockMediaLibraryService2.setAssertLibraryParams(params);
+        MockMediaLibraryService.setAssertLibraryParams(params);
         BrowserResult result = createBrowser().subscribe(testParentId, params)
                 .get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -363,7 +363,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId, int itemCount,
+            public void onChildrenChanged(MediaBrowser browser, String parentId, int itemCount,
                     LibraryParams params) {
                 // Unexpected call.
                 fail();
@@ -415,7 +415,7 @@
         };
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 assertEquals(expectedParentId, parentId);
                 assertEquals(testChildrenCount, itemCount);
@@ -425,7 +425,7 @@
         };
 
         TestServiceRegistry.getInstance().setSessionCallback(sessionCallback);
-        MockMediaLibraryService2.setAssertLibraryParams(testParams);
+        MockMediaLibraryService.setAssertLibraryParams(testParams);
         createBrowser(controllerCallbackProxy).subscribe(expectedParentId, testParams);
 
         // onChildrenChanged() should be called.
@@ -466,7 +466,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 // Unexpected call.
                 fail();
@@ -520,7 +520,7 @@
         };
         final BrowserCallback controllerCallbackProxy = new BrowserCallback() {
             @Override
-            public void onChildrenChanged(MediaBrowser2 browser, String parentId,
+            public void onChildrenChanged(MediaBrowser browser, String parentId,
                     int itemCount, LibraryParams params) {
                 assertEquals(expectedParentId, parentId);
                 assertEquals(testChildrenCount, itemCount);
@@ -536,10 +536,10 @@
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
-    public class TestMediaBrowser extends MediaBrowser2 implements TestControllerInterface {
+    public class TestMediaBrowser extends MediaBrowser implements TestControllerInterface {
         private final BrowserCallback mCallback;
 
-        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken2 token,
+        public TestMediaBrowser(@NonNull Context context, @NonNull SessionToken token,
                 @NonNull BrowserCallback callback) {
             super(context, token, sHandlerExecutor, callback);
             mCallback = callback;
diff --git a/media2/src/androidTest/java/androidx/media2/MediaController2Test.java b/media2/src/androidTest/java/androidx/media2/MediaControllerTest.java
similarity index 76%
rename from media2/src/androidTest/java/androidx/media2/MediaController2Test.java
rename to media2/src/androidTest/java/androidx/media2/MediaControllerTest.java
index c5abb08..94c68dc 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaController2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaControllerTest.java
@@ -16,7 +16,7 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -41,11 +41,11 @@
 import androidx.annotation.Nullable;
 import androidx.media.AudioAttributesCompat;
 import androidx.media.VolumeProviderCompat;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionCallback;
 import androidx.media2.TestServiceRegistry.SessionServiceCallback;
 import androidx.media2.TestUtils.SyncHandler;
 import androidx.test.filters.FlakyTest;
@@ -67,21 +67,21 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * Tests {@link MediaController2}.
+ * Tests {@link MediaController}.
  */
 // TODO(jaewan): Implement host-side test so controller and session can run in different processes.
-// TODO(jaewan): Fix flaky failure -- see MediaController2Impl.getController()
+// TODO(jaewan): Fix flaky failure -- see MediaControllerImpl.getController()
 // TODO(jaeawn): Revisit create/close session in the sHandler. It's no longer necessary.
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 @FlakyTest
-public class MediaController2Test extends MediaSession2TestBase {
-    private static final String TAG = "MediaController2Test";
+public class MediaControllerTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaControllerTest";
 
     PendingIntent mIntent;
-    MediaSession2 mSession;
-    MediaController2 mController;
+    MediaSession mSession;
+    MediaController mController;
     MockPlayer mPlayer;
     AudioManager mAudioManager;
 
@@ -90,14 +90,14 @@
     public void setUp() throws Exception {
         super.setUp();
         final Intent sessionActivity = new Intent(mContext, MockActivity.class);
-        // Create this test specific MediaSession2 to use our own Handler.
+        // Create this test specific MediaSession to use our own Handler.
         mIntent = PendingIntent.getActivity(mContext, 0, sessionActivity, 0);
 
         mPlayer = new MockPlayer(1);
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
+                    public SessionCommandGroup onConnect(MediaSession session,
                             ControllerInfo controller) {
                         if (Process.myUid() == controller.getUid()) {
                             return super.onConnect(session, controller);
@@ -106,7 +106,7 @@
                     }
 
                     @Override
-                    public MediaItem2 onCreateMediaItem(MediaSession2 session,
+                    public MediaItem onCreateMediaItem(MediaSession session,
                             ControllerInfo controller, String mediaId) {
                         return TestUtils.createMediaItem(mediaId);
                     }
@@ -169,7 +169,7 @@
         prepareLooper();
 
         final MockPlayer player = new MockPlayer(2);
-        player.mLastPlayerState = SessionPlayer2.PLAYER_STATE_IDLE;
+        player.mLastPlayerState = SessionPlayer.PLAYER_STATE_IDLE;
         mSession.updatePlayer(player);
         mController.play();
         assertTrue(player.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -220,13 +220,13 @@
     @Test
     public void testGettersAfterConnected() throws InterruptedException {
         prepareLooper();
-        final int state = SessionPlayer2.PLAYER_STATE_PLAYING;
-        final int bufferingState = SessionPlayer2.BUFFERING_STATE_COMPLETE;
+        final int state = SessionPlayer.PLAYER_STATE_PLAYING;
+        final int bufferingState = SessionPlayer.BUFFERING_STATE_COMPLETE;
         final long position = 150000;
         final long bufferedPosition = 900000;
         final float speed = 0.5f;
         final long timeDiff = 102;
-        final MediaItem2 currentMediaItem = TestUtils.createMediaItemWithMetadata();
+        final MediaItem currentMediaItem = TestUtils.createMediaItemWithMetadata();
 
         mPlayer.mLastPlayerState = state;
         mPlayer.mLastBufferingState = bufferingState;
@@ -235,7 +235,7 @@
         mPlayer.mPlaybackSpeed = speed;
         mPlayer.mCurrentMediaItem = currentMediaItem;
 
-        MediaController2 controller = createController(mSession.getToken());
+        MediaController controller = createController(mSession.getToken());
         controller.setTimeDiff(timeDiff);
         assertEquals(state, controller.getPlayerState());
         assertEquals(bufferedPosition, controller.getBufferedPosition());
@@ -247,22 +247,22 @@
     @Test
     public void testUpdatePlayer() throws InterruptedException {
         prepareLooper();
-        final int testState = SessionPlayer2.PLAYER_STATE_PLAYING;
-        final List<MediaItem2> testPlaylist = TestUtils.createMediaItems(3);
+        final int testState = SessionPlayer.PLAYER_STATE_PLAYING;
+        final List<MediaItem> testPlaylist = TestUtils.createMediaItems(3);
         final AudioAttributesCompat testAudioAttributes = new AudioAttributesCompat.Builder()
                 .setLegacyStreamType(AudioManager.STREAM_RING).build();
         final CountDownLatch latch = new CountDownLatch(3);
         mController = createController(mSession.getToken(), true, new ControllerCallback() {
             @Override
-            public void onPlayerStateChanged(MediaController2 controller, int state) {
+            public void onPlayerStateChanged(MediaController controller, int state) {
                 assertEquals(mController, controller);
                 assertEquals(testState, state);
                 latch.countDown();
             }
 
             @Override
-            public void onPlaylistChanged(MediaController2 controller, List<MediaItem2> list,
-                    MediaMetadata2 metadata) {
+            public void onPlaylistChanged(MediaController controller, List<MediaItem> list,
+                    MediaMetadata metadata) {
                 assertEquals(mController, controller);
                 assertEquals(testPlaylist, list);
                 assertNull(metadata);
@@ -270,7 +270,7 @@
             }
 
             @Override
-            public void onPlaybackInfoChanged(MediaController2 controller, PlaybackInfo info) {
+            public void onPlaybackInfoChanged(MediaController controller, PlaybackInfo info) {
                 assertEquals(mController, controller);
                 assertEquals(testAudioAttributes, info.getAudioAttributes());
                 latch.countDown();
@@ -311,7 +311,7 @@
         assertNotNull(mPlayer.mPlaylist);
         assertEquals(list.size(), mPlayer.mPlaylist.size());
         for (int i = 0; i < list.size(); i++) {
-            // MediaController2.setPlaylist does not ensure the equality of the items.
+            // MediaController.setPlaylist does not ensure the equality of the items.
             assertEquals(list.get(i), mPlayer.mPlaylist.get(i).getMediaId());
         }
     }
@@ -319,9 +319,9 @@
     @Test
     public void testSetMediaItem() throws InterruptedException {
         prepareLooper();
-        final MediaItem2 item = TestUtils.createMediaItemWithMetadata();
+        final MediaItem item = TestUtils.createMediaItemWithMetadata();
         mController.setMediaItem(item.getMetadata()
-                .getString(MediaMetadata2.METADATA_KEY_MEDIA_ID));
+                .getString(MediaMetadata.METADATA_KEY_MEDIA_ID));
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertNull(mPlayer.mMetadata);
@@ -330,19 +330,19 @@
 
     /**
      * This also tests {@link ControllerCallback#onPlaylistChanged(
-     * MediaController2, List, MediaMetadata2)}.
+     * MediaController, List, MediaMetadata)}.
      */
     @Test
     public void testGetPlaylist() throws InterruptedException {
         prepareLooper();
-        final List<MediaItem2> testList = TestUtils.createMediaItems(2);
-        final MediaMetadata2 testMetadata = TestUtils.createMetadata();
-        final AtomicReference<List<MediaItem2>> listFromCallback = new AtomicReference<>();
+        final List<MediaItem> testList = TestUtils.createMediaItems(2);
+        final MediaMetadata testMetadata = TestUtils.createMetadata();
+        final AtomicReference<List<MediaItem>> listFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaylistChanged(MediaController2 controller,
-                    List<MediaItem2> playlist, MediaMetadata2 metadata) {
+            public void onPlaylistChanged(MediaController controller,
+                    List<MediaItem> playlist, MediaMetadata metadata) {
                 assertNotNull(playlist);
                 TestUtils.assertMediaItemListEquals(testList, playlist);
                 TestUtils.assertMetadataEquals(testMetadata, metadata);
@@ -350,7 +350,7 @@
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mSession.getToken(), true, callback);
+        MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.mPlaylist = testList;
         mPlayer.mMetadata = testMetadata;
         mPlayer.notifyPlaylistChanged();
@@ -362,20 +362,20 @@
 
     /**
      * This also tests {@link ControllerCallback#onPlaylistChanged(
-     * MediaController2, List, MediaMetadata2)}.
+     * MediaController, List, MediaMetadata)}.
      */
     @Test
     @LargeTest
     public void testGetPlaylist_withLongPlaylist() throws InterruptedException {
         prepareLooper();
-        final List<MediaItem2> testList = TestUtils.createMediaItems(5000);
-        final MediaMetadata2 testMetadata = TestUtils.createMetadata();
-        final AtomicReference<List<MediaItem2>> listFromCallback = new AtomicReference<>();
+        final List<MediaItem> testList = TestUtils.createMediaItems(5000);
+        final MediaMetadata testMetadata = TestUtils.createMetadata();
+        final AtomicReference<List<MediaItem>> listFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaylistChanged(MediaController2 controller,
-                    List<MediaItem2> playlist, MediaMetadata2 metadata) {
+            public void onPlaylistChanged(MediaController controller,
+                    List<MediaItem> playlist, MediaMetadata metadata) {
                 assertNotNull(playlist);
                 TestUtils.assertMediaItemListEquals(testList, playlist);
                 TestUtils.assertMetadataEquals(testMetadata, metadata);
@@ -383,7 +383,7 @@
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mSession.getToken(), true, callback);
+        MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.mPlaylist = testList;
         mPlayer.mMetadata = testMetadata;
         mPlayer.notifyPlaylistChanged();
@@ -396,7 +396,7 @@
     @Test
     public void testUpdatePlaylistMetadata() throws InterruptedException {
         prepareLooper();
-        final MediaMetadata2 testMetadata = TestUtils.createMetadata();
+        final MediaMetadata testMetadata = TestUtils.createMetadata();
         mController.updatePlaylistMetadata(testMetadata);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
@@ -408,13 +408,13 @@
     @Test
     public void testGetPlaylistMetadata() throws InterruptedException {
         prepareLooper();
-        final MediaMetadata2 testMetadata = TestUtils.createMetadata();
-        final AtomicReference<MediaMetadata2> metadataFromCallback = new AtomicReference<>();
+        final MediaMetadata testMetadata = TestUtils.createMetadata();
+        final AtomicReference<MediaMetadata> metadataFromCallback = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaylistMetadataChanged(MediaController2 controller,
-                    MediaMetadata2 metadata) {
+            public void onPlaylistMetadataChanged(MediaController controller,
+                    MediaMetadata metadata) {
                 assertNotNull(testMetadata);
                 assertEquals(testMetadata.getMediaId(), metadata.getMediaId());
                 metadataFromCallback.set(metadata);
@@ -422,11 +422,11 @@
             }
         };
         mPlayer.mMetadata = testMetadata;
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setId("testGetPlaylistMetadata")
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {})
                 .build()) {
-            MediaController2 controller = createController(session.getToken(), true, callback);
+            MediaController controller = createController(session.getToken(), true, callback);
             mPlayer.notifyPlaylistMetadataChanged();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
             assertEquals(metadataFromCallback.get().getMediaId(),
@@ -444,8 +444,8 @@
     }
 
     /**
-     * This also tests {@link MediaController2.ControllerCallback#onPlaybackSpeedChanged(
-     * MediaController2, float)}.
+     * This also tests {@link MediaController.ControllerCallback#onPlaybackSpeedChanged(
+     * MediaController, float)}.
      *
      * @throws InterruptedException
      */
@@ -456,10 +456,10 @@
         mPlayer.setPlaybackSpeed(speed);
 
         final CountDownLatch latch = new CountDownLatch(1);
-        final MediaController2 controller =
+        final MediaController controller =
                 createController(mSession.getToken(), true, new ControllerCallback() {
                     @Override
-                    public void onPlaybackSpeedChanged(MediaController2 controller,
+                    public void onPlaybackSpeedChanged(MediaController controller,
                             float speedOut) {
                         assertEquals(speed, speedOut, 0.0f);
                         latch.countDown();
@@ -472,22 +472,22 @@
     }
 
     /**
-     * Test whether {@link SessionPlayer2#setPlaylist(List, MediaMetadata2)} is notified
+     * Test whether {@link SessionPlayer#setPlaylist(List, MediaMetadata)} is notified
      * through the
-     * {@link ControllerCallback#onPlaylistMetadataChanged(MediaController2, MediaMetadata2)}
-     * if the controller doesn't have {@link SessionCommand2#COMMAND_CODE_PLAYER_GET_PLAYLIST} but
-     * {@link SessionCommand2#COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA}.
+     * {@link ControllerCallback#onPlaylistMetadataChanged(MediaController, MediaMetadata)}
+     * if the controller doesn't have {@link SessionCommand#COMMAND_CODE_PLAYER_GET_PLAYLIST} but
+     * {@link SessionCommand#COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA}.
      */
     @Test
     public void testControllerCallback_onPlaylistMetadataChanged() throws InterruptedException {
         prepareLooper();
-        final MediaItem2 item = TestUtils.createMediaItemWithMetadata();
-        final List<MediaItem2> list = TestUtils.createMediaItems(2);
+        final MediaItem item = TestUtils.createMediaItemWithMetadata();
+        final List<MediaItem> list = TestUtils.createMediaItems(2);
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaylistMetadataChanged(MediaController2 controller,
-                    MediaMetadata2 metadata) {
+            public void onPlaylistMetadataChanged(MediaController controller,
+                    MediaMetadata metadata) {
                 assertNotNull(metadata);
                 assertEquals(item.getMediaId(), metadata.getMediaId());
                 latch.countDown();
@@ -495,12 +495,12 @@
         };
         final SessionCallback sessionCallback = new SessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(MediaSession2 session,
+            public SessionCommandGroup onConnect(MediaSession session,
                     ControllerInfo controller) {
                 if (Process.myUid() == controller.getUid()) {
-                    SessionCommandGroup2 commands = new SessionCommandGroup2.Builder()
-                            .addCommand(new SessionCommand2(
-                                    SessionCommand2.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA))
+                    SessionCommandGroup commands = new SessionCommandGroup.Builder()
+                            .addCommand(new SessionCommand(
+                                    SessionCommand.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA))
                             .build();
                     return commands;
                 }
@@ -509,11 +509,11 @@
         };
         mPlayer.mMetadata = item.getMetadata();
         mPlayer.mPlaylist = list;
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setId("testControllerCallback_onPlaylistMetadataChanged")
                 .setSessionCallback(sHandlerExecutor, sessionCallback)
                 .build()) {
-            MediaController2 controller = createController(session.getToken(), true, callback);
+            MediaController controller = createController(session.getToken(), true, callback);
             mPlayer.notifyPlaylistChanged();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -527,37 +527,37 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onSeekCompleted(MediaController2 controller, long position) {
+            public void onSeekCompleted(MediaController controller, long position) {
                 controller.setTimeDiff(Long.valueOf(0));
                 assertEquals(testSeekPosition, position);
                 assertEquals(testPosition, controller.getCurrentPosition());
                 latch.countDown();
             }
         };
-        final MediaController2 controller = createController(mSession.getToken(), true, callback);
+        final MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.mCurrentPosition = testPosition;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PAUSED;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PAUSED;
         mPlayer.notifySeekCompleted(testSeekPosition);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
     /**
-     * This also tests {@link MediaController2#getBufferedPosition()}, and
-     * {@link MediaController2#getBufferingState()}.
+     * This also tests {@link MediaController#getBufferedPosition()}, and
+     * {@link MediaController#getBufferingState()}.
      *
      * @throws InterruptedException
      */
     @Test
     public void testControllerCallback_onBufferingStateChanged() throws InterruptedException {
         prepareLooper();
-        final List<MediaItem2> testPlaylist = TestUtils.createMediaItems(3);
-        final MediaItem2 testItem = testPlaylist.get(0);
-        final int testBufferingState = SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
+        final List<MediaItem> testPlaylist = TestUtils.createMediaItems(3);
+        final MediaItem testItem = testPlaylist.get(0);
+        final int testBufferingState = SessionPlayer.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
         final long testBufferingPosition = 500;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+            public void onBufferingStateChanged(MediaController controller, MediaItem item,
                     int state) {
                 controller.setTimeDiff(Long.valueOf(0));
                 assertEquals(testItem, item);
@@ -567,7 +567,7 @@
                 latch.countDown();
             }
         };
-        final MediaController2 controller = createController(mSession.getToken(), true, callback);
+        final MediaController controller = createController(mSession.getToken(), true, callback);
         mSession.getPlayer().setPlaylist(testPlaylist, null);
         mPlayer.mBufferedPosition = testBufferingPosition;
         mPlayer.notifyBufferingStateChanged(testItem, testBufferingState);
@@ -575,19 +575,19 @@
     }
 
     /**
-     * This also tests {@link MediaController2#getPlayerState()}.
+     * This also tests {@link MediaController#getPlayerState()}.
      *
      * @throws InterruptedException
      */
     @Test
     public void testControllerCallback_onPlayerStateChanged() throws InterruptedException {
         prepareLooper();
-        final int testPlayerState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int testPlayerState = SessionPlayer.PLAYER_STATE_PLAYING;
         final long testPosition = 500;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlayerStateChanged(MediaController2 controller, int state) {
+            public void onPlayerStateChanged(MediaController controller, int state) {
                 controller.setTimeDiff(Long.valueOf(0));
                 assertEquals(testPlayerState, state);
                 assertEquals(testPlayerState, controller.getPlayerState());
@@ -595,14 +595,14 @@
                 latch.countDown();
             }
         };
-        final MediaController2 controller = createController(mSession.getToken(), true, callback);
+        final MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.mCurrentPosition = testPosition;
         mPlayer.notifyPlayerStateChanged(testPlayerState);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
     /**
-     * This also tests {@link MediaController2#getCurrentMediaItem()}.
+     * This also tests {@link MediaController#getCurrentMediaItem()}.
      *
      * @throws InterruptedException
      */
@@ -610,17 +610,17 @@
     public void testControllerCallback_onCurrentMediaItemChanged() throws InterruptedException {
         prepareLooper();
         final int listSize = 5;
-        final List<MediaItem2> list = TestUtils.createMediaItems(listSize);
+        final List<MediaItem> list = TestUtils.createMediaItems(listSize);
         mPlayer.setPlaylist(list, null);
 
-        final MediaItem2 currentItem = list.get(3);
-        final MediaItem2 unknownItem = TestUtils.createMediaItemWithMetadata();
+        final MediaItem currentItem = list.get(3);
+        final MediaItem unknownItem = TestUtils.createMediaItemWithMetadata();
         final CountDownLatch latch = new CountDownLatch(3);
-        final MediaController2 controller =
+        final MediaController controller =
                 createController(mSession.getToken(), true, new ControllerCallback() {
                     @Override
-                    public void onCurrentMediaItemChanged(MediaController2 controller,
-                            MediaItem2 item) {
+                    public void onCurrentMediaItemChanged(MediaController controller,
+                            MediaItem item) {
                         switch ((int) latch.getCount()) {
                             case 3:
                                 assertEquals(unknownItem, item);
@@ -639,7 +639,7 @@
         mPlayer.notifyCurrentMediaItemChanged(unknownItem);
         // Known DSD should be notified through the onCurrentMediaItemChanged.
         mPlayer.notifyCurrentMediaItemChanged(currentItem);
-        // Null DSD becomes null MediaItem2.
+        // Null DSD becomes null MediaItem.
         mPlayer.notifyCurrentMediaItemChanged(null);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -663,10 +663,10 @@
         mPlayer.mPlaylist = TestUtils.createMediaItems(2);
 
         // Recreate controller for sending removePlaylistItem.
-        // It's easier to ensure that MediaController2.getPlaylist() returns the playlist from the
+        // It's easier to ensure that MediaController.getPlaylist() returns the playlist from the
         // player.
-        MediaController2 controller = createController(mSession.getToken());
-        MediaItem2 targetItem = controller.getPlaylist().get(0);
+        MediaController controller = createController(mSession.getToken());
+        MediaItem targetItem = controller.getPlaylist().get(0);
         controller.removePlaylistItem(0);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
@@ -683,7 +683,7 @@
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
         assertTrue(mPlayer.mReplacePlaylistItemCalled);
-        // MediaController2.replacePlaylistItem does not ensure the equality of the items.
+        // MediaController.replacePlaylistItem does not ensure the equality of the items.
         assertEquals(testId, mPlayer.mItem.getMediaId());
     }
 
@@ -706,10 +706,10 @@
     @Test
     public void testSkipToPlaylistItem() throws InterruptedException {
         prepareLooper();
-        List<MediaItem2> playlist = TestUtils.createMediaItems(2);
+        List<MediaItem> playlist = TestUtils.createMediaItems(2);
         mPlayer.mPlaylist = playlist;
 
-        MediaController2 controller = createController(mSession.getToken());
+        MediaController controller = createController(mSession.getToken());
         controller.skipToPlaylistItem(1);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
@@ -718,22 +718,22 @@
     }
 
     /**
-     * This also tests {@link ControllerCallback#onShuffleModeChanged(MediaController2, int)}.
+     * This also tests {@link ControllerCallback#onShuffleModeChanged(MediaController, int)}.
      */
     @Test
     public void testGetShuffleMode() throws InterruptedException {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         mPlayer.mShuffleMode = testShuffleMode;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onShuffleModeChanged(MediaController2 controller, int shuffleMode) {
+            public void onShuffleModeChanged(MediaController controller, int shuffleMode) {
                 assertEquals(testShuffleMode, shuffleMode);
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mSession.getToken(), true, callback);
+        MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.notifyShuffleModeChanged();
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertEquals(testShuffleMode, controller.getShuffleMode());
@@ -742,7 +742,7 @@
     @Test
     public void testSetShuffleMode() throws InterruptedException {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         mController.setShuffleMode(testShuffleMode);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
@@ -751,22 +751,22 @@
     }
 
     /**
-     * This also tests {@link ControllerCallback#onRepeatModeChanged(MediaController2, int)}.
+     * This also tests {@link ControllerCallback#onRepeatModeChanged(MediaController, int)}.
      */
     @Test
     public void testGetRepeatMode() throws InterruptedException {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         mPlayer.mRepeatMode = testRepeatMode;
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onRepeatModeChanged(MediaController2 controller, int repeatMode) {
+            public void onRepeatModeChanged(MediaController controller, int repeatMode) {
                 assertEquals(testRepeatMode, repeatMode);
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mSession.getToken(), true, callback);
+        MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.notifyRepeatModeChanged();
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertEquals(testRepeatMode, controller.getRepeatMode());
@@ -775,7 +775,7 @@
     @Test
     public void testSetRepeatMode() throws InterruptedException {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         mController.setRepeatMode(testRepeatMode);
         assertTrue(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
 
@@ -793,7 +793,7 @@
                 new MockRemotePlayer(volumeControlType, maxVolume, currentVolume);
 
         mSession.updatePlayer(remotePlayer);
-        final MediaController2 controller = createController(mSession.getToken(), true, null);
+        final MediaController controller = createController(mSession.getToken(), true, null);
 
         final int targetVolume = 50;
         controller.setVolumeTo(targetVolume, 0 /* flags */);
@@ -812,7 +812,7 @@
                 new MockRemotePlayer(volumeControlType, maxVolume, currentVolume);
 
         mSession.updatePlayer(remotePlayer);
-        final MediaController2 controller = createController(mSession.getToken(), true, null);
+        final MediaController controller = createController(mSession.getToken(), true, null);
 
         final int direction = AudioManager.ADJUST_RAISE;
         controller.adjustVolume(direction, 0 /* flags */);
@@ -916,34 +916,34 @@
         final String command = "test_custom_command";
         final Bundle testArgs = new Bundle();
         testArgs.putString("args", "test_args");
-        final SessionCommand2 testCommand = new SessionCommand2(command, null);
+        final SessionCommand testCommand = new SessionCommand(command, null);
 
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
+            public SessionCommandGroup onConnect(@NonNull MediaSession session,
                     @NonNull ControllerInfo controller) {
-                SessionCommandGroup2 commands =
-                        new SessionCommandGroup2.Builder(super.onConnect(session, controller))
+                SessionCommandGroup commands =
+                        new SessionCommandGroup.Builder(super.onConnect(session, controller))
                         .addCommand(testCommand)
                         .build();
                 return commands;
             }
 
             @Override
-            public MediaSession2.SessionResult onCustomCommand(MediaSession2 session,
-                    ControllerInfo controller, SessionCommand2 customCommand, Bundle args) {
+            public MediaSession.SessionResult onCustomCommand(MediaSession session,
+                    ControllerInfo controller, SessionCommand customCommand, Bundle args) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(command, customCommand.getCustomCommand());
                 assertTrue(TestUtils.equals(testArgs, args));
                 latch.countDown();
-                return new MediaSession2.SessionResult(RESULT_CODE_SUCCESS, null);
+                return new MediaSession.SessionResult(RESULT_CODE_SUCCESS, null);
             }
         };
         mSession.close();
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback).setId(TAG).build();
-        final MediaController2 controller = createController(mSession.getToken());
+        final MediaController controller = createController(mSession.getToken());
         controller.sendCustomCommand(testCommand, testArgs);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
@@ -953,16 +953,16 @@
         prepareLooper();
         // createController() uses controller callback to wait until the controller becomes
         // available.
-        MediaController2 controller = createController(mSession.getToken());
+        MediaController controller = createController(mSession.getToken());
         assertNotNull(controller);
     }
 
     @Test
     public void testControllerCallback_sessionRejects() throws InterruptedException {
         prepareLooper();
-        final MediaSession2.SessionCallback sessionCallback = new SessionCallback() {
+        final MediaSession.SessionCallback sessionCallback = new SessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(MediaSession2 session,
+            public SessionCommandGroup onConnect(MediaSession session,
                     ControllerInfo controller) {
                 return null;
             }
@@ -971,11 +971,11 @@
             @Override
             public void run() {
                 mSession.close();
-                mSession = new MediaSession2.Builder(mContext, mPlayer)
+                mSession = new MediaSession.Builder(mContext, mPlayer)
                         .setSessionCallback(sHandlerExecutor, sessionCallback).build();
             }
         });
-        MediaController2 controller =
+        MediaController controller =
                 createController(mSession.getToken(), false, null);
         assertNotNull(controller);
         waitForConnect(controller, false);
@@ -1002,16 +1002,16 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onFastForward(MediaSession2 session, ControllerInfo controller) {
+            public int onFastForward(MediaSession session, ControllerInfo controller) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testFastForward").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.fastForward();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1023,16 +1023,16 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onRewind(MediaSession2 session, ControllerInfo controller) {
+            public int onRewind(MediaSession session, ControllerInfo controller) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 latch.countDown();
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testRewind").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.rewind();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1047,7 +1047,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPlayFromSearch(MediaSession2 session, ControllerInfo controller,
+            public int onPlayFromSearch(MediaSession session, ControllerInfo controller,
                     String query, Bundle extras) {
                 super.onPlayFromSearch(session, controller, query, extras);
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
@@ -1057,10 +1057,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPlayFromSearch").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.playFromSearch(request, bundle);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1075,7 +1075,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPlayFromUri(MediaSession2 session, ControllerInfo controller, Uri uri,
+            public int onPlayFromUri(MediaSession session, ControllerInfo controller, Uri uri,
                     Bundle extras) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(request, uri);
@@ -1084,10 +1084,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPlayFromUri").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.playFromUri(request, bundle);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1102,7 +1102,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPlayFromMediaId(MediaSession2 session, ControllerInfo controller,
+            public int onPlayFromMediaId(MediaSession session, ControllerInfo controller,
                     String mediaId, Bundle extras) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(request, mediaId);
@@ -1111,10 +1111,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPlayFromMediaId").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.playFromMediaId(request, bundle);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1129,7 +1129,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPrepareFromSearch(MediaSession2 session, ControllerInfo controller,
+            public int onPrepareFromSearch(MediaSession session, ControllerInfo controller,
                     String query, Bundle extras) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(request, query);
@@ -1138,10 +1138,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPrepareFromSearch").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.prepareFromSearch(request, bundle);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1156,7 +1156,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPrepareFromUri(MediaSession2 session, ControllerInfo controller, Uri uri,
+            public int onPrepareFromUri(MediaSession session, ControllerInfo controller, Uri uri,
                     Bundle extras) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(request, uri);
@@ -1165,10 +1165,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPrepareFromUri").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.prepareFromUri(request, bundle);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1183,7 +1183,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onPrepareFromMediaId(MediaSession2 session, ControllerInfo controller,
+            public int onPrepareFromMediaId(MediaSession session, ControllerInfo controller,
                     String mediaId, Bundle extras) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(request, mediaId);
@@ -1192,10 +1192,10 @@
                 return RESULT_CODE_SUCCESS;
             }
         };
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testPrepareFromMediaId").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.prepareFromMediaId(request, bundle);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1205,14 +1205,14 @@
     public void testSetRating() throws InterruptedException {
         prepareLooper();
         final float ratingValue = 3.5f;
-        final Rating2 rating = new StarRating2(5, ratingValue);
+        final Rating rating = new StarRating(5, ratingValue);
         final String mediaId = "media_id";
 
         final CountDownLatch latch = new CountDownLatch(1);
         final SessionCallback callback = new SessionCallback() {
             @Override
-            public int onSetRating(MediaSession2 session, ControllerInfo controller,
-                    String mediaIdOut, Rating2 ratingOut) {
+            public int onSetRating(MediaSession session, ControllerInfo controller,
+                    String mediaIdOut, Rating ratingOut) {
                 assertEquals(mContext.getPackageName(), controller.getPackageName());
                 assertEquals(mediaId, mediaIdOut);
                 assertEquals(rating, ratingOut);
@@ -1221,10 +1221,10 @@
             }
         };
 
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, callback)
                 .setId("testSetRating").build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.setRating(mediaId, rating);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -1271,16 +1271,16 @@
             sessionHandler.postAndSync(new Runnable() {
                 @Override
                 public void run() {
-                    mSession = new MediaSession2.Builder(mContext, mPlayer)
+                    mSession = new MediaSession.Builder(mContext, mPlayer)
                             .setSessionCallback(sHandlerExecutor, new SessionCallback() {})
                             .setId("testDeadlock").build();
                 }
             });
-            final MediaController2 controller = createController(mSession.getToken());
+            final MediaController controller = createController(mSession.getToken());
             testHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    final int state = SessionPlayer2.PLAYER_STATE_ERROR;
+                    final int state = SessionPlayer.PLAYER_STATE_ERROR;
                     for (int i = 0; i < 100; i++) {
                         // triggers call from session to controller.
                         player.notifyPlayerStateChanged(state);
@@ -1327,22 +1327,22 @@
     @Test
     public void testGetServiceToken() {
         prepareLooper();
-        SessionToken2 token = TestUtils.getServiceToken(mContext, MockMediaSessionService2.ID);
+        SessionToken token = TestUtils.getServiceToken(mContext, MockMediaSessionService.ID);
         assertNotNull(token);
         assertEquals(mContext.getPackageName(), token.getPackageName());
-        assertEquals(SessionToken2.TYPE_SESSION_SERVICE, token.getType());
+        assertEquals(SessionToken.TYPE_SESSION_SERVICE, token.getType());
     }
 
     @Test
     public void testConnectToService_sessionService() throws InterruptedException {
         prepareLooper();
-        testConnectToService(MockMediaSessionService2.ID);
+        testConnectToService(MockMediaSessionService.ID);
     }
 
     @Test
     public void testConnectToService_libraryService() throws InterruptedException {
         prepareLooper();
-        testConnectToService(MockMediaLibraryService2.ID);
+        testConnectToService(MockMediaLibraryService.ID);
     }
 
     public void testConnectToService(String id) throws InterruptedException {
@@ -1350,7 +1350,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final MediaLibrarySessionCallback sessionCallback = new MediaLibrarySessionCallback() {
             @Override
-            public SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
+            public SessionCommandGroup onConnect(@NonNull MediaSession session,
                     @NonNull ControllerInfo controller) {
                 if (Process.myUid() == controller.getUid()) {
                     if (mSession != null) {
@@ -1367,17 +1367,17 @@
         };
         TestServiceRegistry.getInstance().setSessionCallback(sessionCallback);
 
-        final SessionCommand2 testCommand = new SessionCommand2("testConnectToService", null);
+        final SessionCommand testCommand = new SessionCommand("testConnectToService", null);
         final CountDownLatch controllerLatch = new CountDownLatch(1);
         mController = createController(TestUtils.getServiceToken(mContext, id), true,
                 new ControllerCallback() {
                     @Override
-                    public MediaController2.ControllerResult onCustomCommand(
-                            MediaController2 controller, SessionCommand2 command, Bundle args) {
+                    public MediaController.ControllerResult onCustomCommand(
+                            MediaController controller, SessionCommand command, Bundle args) {
                         if (testCommand.equals(command)) {
                             controllerLatch.countDown();
                         }
-                        return new MediaController2.ControllerResult(RESULT_CODE_SUCCESS);
+                        return new MediaController.ControllerResult(RESULT_CODE_SUCCESS);
                     }
                 }
         );
@@ -1404,73 +1404,14 @@
     @Test
     public void testControllerAfterSessionIsClosed_sessionService() throws InterruptedException {
         prepareLooper();
-        testConnectToService(MockMediaSessionService2.ID);
-        testControllerAfterSessionIsClosed(MockMediaSessionService2.ID);
-    }
-
-    @Test
-    public void testSubscribeRouteInfo() throws InterruptedException {
-        prepareLooper();
-        final TestSessionCallback callback = new TestSessionCallback() {
-            @Override
-            public int onSubscribeRoutesInfo(@NonNull MediaSession2 session,
-                    @NonNull ControllerInfo controller) {
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                mLatch.countDown();
-                return RESULT_CODE_SUCCESS;
-            }
-
-            @Override
-            public int onUnsubscribeRoutesInfo(@NonNull MediaSession2 session,
-                    @NonNull ControllerInfo controller) {
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                mLatch.countDown();
-                return RESULT_CODE_SUCCESS;
-            }
-        };
-        mSession.close();
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback).setId(TAG).build();
-        final MediaController2 controller = createController(mSession.getToken());
-
-        callback.resetLatchCount(1);
-        controller.subscribeRoutesInfo();
-        assertTrue(callback.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-
-        callback.resetLatchCount(1);
-        controller.unsubscribeRoutesInfo();
-        assertTrue(callback.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-    }
-
-    @Test
-    public void testSelectRouteInfo() throws InterruptedException {
-        prepareLooper();
-        final Bundle testRoute = new Bundle();
-        testRoute.putString("id", "testRoute");
-        final TestSessionCallback callback = new TestSessionCallback() {
-            @Override
-            public int onSelectRoute(@NonNull MediaSession2 session,
-                    @NonNull ControllerInfo controller, @NonNull Bundle route) {
-                assertEquals(mContext.getPackageName(), controller.getPackageName());
-                assertTrue(TestUtils.equals(route, testRoute));
-                mLatch.countDown();
-                return RESULT_CODE_SUCCESS;
-            }
-        };
-        mSession.close();
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
-                .setSessionCallback(sHandlerExecutor, callback).setId(TAG).build();
-        final MediaController2 controller = createController(mSession.getToken());
-
-        callback.resetLatchCount(1);
-        controller.selectRoute(testRoute);
-        assertTrue(callback.mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        testConnectToService(MockMediaSessionService.ID);
+        testControllerAfterSessionIsClosed(MockMediaSessionService.ID);
     }
 
     @Test
     public void testClose_beforeConnected() throws InterruptedException {
         prepareLooper();
-        MediaController2 controller =
+        MediaController controller =
                 createController(mSession.getToken(), false, null);
         controller.close();
     }
@@ -1499,28 +1440,28 @@
     @Test
     public void testClose_sessionService() throws InterruptedException {
         prepareLooper();
-        testCloseFromService(MockMediaSessionService2.ID);
+        testCloseFromService(MockMediaSessionService.ID);
     }
 
     @LargeTest
     @Test
     public void testClose_libraryService() throws InterruptedException {
         prepareLooper();
-        testCloseFromService(MockMediaLibraryService2.ID);
+        testCloseFromService(MockMediaLibraryService.ID);
     }
 
     @Test
     public void testGetCurrentPosition() throws InterruptedException {
         prepareLooper();
-        final int pausedState = SessionPlayer2.PLAYER_STATE_PAUSED;
-        final int playingState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int pausedState = SessionPlayer.PLAYER_STATE_PAUSED;
+        final int playingState = SessionPlayer.PLAYER_STATE_PLAYING;
         final long timeDiff = 5000L;
         final long position = 0L;
         final CountDownLatch latch = new CountDownLatch(2);
 
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlayerStateChanged(MediaController2 controller, int state) {
+            public void onPlayerStateChanged(MediaController controller, int state) {
                 switch ((int) latch.getCount()) {
                     case 2:
                         assertEquals(state, pausedState);
@@ -1534,7 +1475,7 @@
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mSession.getToken(), true, callback);
+        MediaController controller = createController(mSession.getToken(), true, callback);
         controller.setTimeDiff(timeDiff);
         mPlayer.notifyPlayerStateChanged(pausedState);
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -1544,29 +1485,29 @@
     public void testSetMetadataForCurrentMediaItem() throws InterruptedException {
         final CountDownLatch latch = new CountDownLatch(2);
         final long duration = 1000L;
-        final MediaItem2 item = TestUtils.createMediaItemWithMetadata();
+        final MediaItem item = TestUtils.createMediaItemWithMetadata();
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onCurrentMediaItemChanged(@NonNull MediaController2 controller,
-                    @Nullable MediaItem2 item) {
-                MediaMetadata2 metadata = item.getMetadata();
+            public void onCurrentMediaItemChanged(@NonNull MediaController controller,
+                    @Nullable MediaItem item) {
+                MediaMetadata metadata = item.getMetadata();
                 if (metadata != null) {
                     switch ((int) latch.getCount()) {
                         case 2:
                             assertFalse(metadata.containsKey(
-                                    MediaMetadata2.METADATA_KEY_DURATION));
+                                    MediaMetadata.METADATA_KEY_DURATION));
                             break;
                         case 1:
                             assertTrue(metadata.containsKey(
-                                    MediaMetadata2.METADATA_KEY_DURATION));
+                                    MediaMetadata.METADATA_KEY_DURATION));
                             assertEquals(duration,
-                                    metadata.getLong(MediaMetadata2.METADATA_KEY_DURATION));
+                                    metadata.getLong(MediaMetadata.METADATA_KEY_DURATION));
                     }
                 }
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mSession.getToken(), true, callback);
+        MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.setMediaItem(item);
         mPlayer.notifyCurrentMediaItemChanged(item);
         assertFalse(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -1578,28 +1519,28 @@
     public void testSetMetadataForMediaItemInPlaylist() throws InterruptedException {
         final CountDownLatch latch = new CountDownLatch(2);
         final long duration = 1000L;
-        final List<MediaItem2> list = TestUtils.createMediaItems(2);
-        final MediaMetadata2 oldMetadata = list.get(1).getMetadata();
-        final MediaMetadata2 newMetadata = TestUtils.createMetadata(oldMetadata.getMediaId(),
+        final List<MediaItem> list = TestUtils.createMediaItems(2);
+        final MediaMetadata oldMetadata = list.get(1).getMetadata();
+        final MediaMetadata newMetadata = TestUtils.createMetadata(oldMetadata.getMediaId(),
                 duration);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaylistChanged(@NonNull MediaController2 controller,
-                    @NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) {
+            public void onPlaylistChanged(@NonNull MediaController controller,
+                    @NonNull List<MediaItem> list, @Nullable MediaMetadata metadata) {
                 switch ((int) latch.getCount()) {
                     case 2:
-                        assertFalse(oldMetadata.containsKey(MediaMetadata2.METADATA_KEY_DURATION));
+                        assertFalse(oldMetadata.containsKey(MediaMetadata.METADATA_KEY_DURATION));
                         break;
                     case 1:
                         assertTrue(list.get(1).getMetadata().containsKey(
-                                MediaMetadata2.METADATA_KEY_DURATION));
+                                MediaMetadata.METADATA_KEY_DURATION));
                         assertEquals(duration, list.get(1).getMetadata().getLong(
-                                MediaMetadata2.METADATA_KEY_DURATION));
+                                MediaMetadata.METADATA_KEY_DURATION));
                 }
                 latch.countDown();
             }
         };
-        MediaController2 controller = createController(mSession.getToken(), true, callback);
+        MediaController controller = createController(mSession.getToken(), true, callback);
         mPlayer.setPlaylist(list, null);
         mPlayer.notifyPlaylistChanged();
         assertFalse(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -1641,7 +1582,7 @@
         // Ensure that the controller cannot use newly create session with the same ID.
         // Recreated session has different session stub, so previously created controller
         // shouldn't be available.
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {})
                 .setId(id).build();
         testNoInteraction();
@@ -1661,7 +1602,7 @@
                 latch.countDown();
             }
         });
-        SessionCommand2 customCommand = new SessionCommand2("testNoInteraction", null);
+        SessionCommand customCommand = new SessionCommand("testNoInteraction", null);
         mSession.broadcastCustomCommand(customCommand, null);
         assertFalse(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         setRunnableForOnCustomCommand(mController, null);
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayer2DrmTestBase.java b/media2/src/androidTest/java/androidx/media2/MediaPlayer2DrmTestBase.java
index 536a056..fb0b85b 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayer2DrmTestBase.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayer2DrmTestBase.java
@@ -270,18 +270,18 @@
         mCallStatus = MediaPlayer2.CALL_STATUS_NO_ERROR;
         mECb = new MediaPlayer2.EventCallback() {
                 @Override
-                public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem2 item, int w, int h) {
+                public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem item, int w, int h) {
                     Log.v(TAG, "VideoSizeChanged" + " w:" + w + " h:" + h);
                     mOnVideoSizeChangedCalled.signal();
                 }
 
                 @Override
-                public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                     fail("Media player had error " + what + " playing video");
                 }
 
                 @Override
-                public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                     if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                         mOnPreparedCalled.signal();
                     } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
@@ -291,7 +291,7 @@
                 }
 
                 @Override
-                public void onCallCompleted(MediaPlayer2 mp, MediaItem2 item,
+                public void onCallCompleted(MediaPlayer2 mp, MediaItem item,
                         int what, int status) {
                     if (what == MediaPlayer2.CALL_COMPLETED_SET_DATA_SOURCE) {
                         mCallStatus = status;
@@ -303,7 +303,7 @@
         mPlayer.setEventCallback(mExecutor, mECb);
         Log.v(TAG, "playLoadedVideo: setMediaItem()");
         mPlayer.setMediaItem(
-                new UriMediaItem2.Builder(mContext, file).build());
+                new UriMediaItem.Builder(mContext, file).build());
         mSetDataSourceCallCompleted.waitForSignal();
         if (mCallStatus != MediaPlayer2.CALL_STATUS_NO_ERROR) {
             throw new PrepareFailedException();
@@ -383,7 +383,7 @@
 
         mPlayer.setDrmEventCallback(mExecutor, new MediaPlayer2.DrmEventCallback() {
             @Override
-            public void onDrmInfo(MediaPlayer2 mp, MediaItem2 item, DrmInfo drmInfo) {
+            public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) {
                 Log.v(TAG, "preparePlayerAndDrm_V1: onDrmInfo" + drmInfo);
 
                 // in the callback (async mode) so handling exceptions here
@@ -417,7 +417,7 @@
     private void preparePlayerAndDrm_V2_syncDrmSetupPlusConfig() throws Exception {
         mPlayer.setOnDrmConfigHelper(new MediaPlayer2.OnDrmConfigHelper() {
             @Override
-            public void onDrmConfig(MediaPlayer2 mp, MediaItem2 item) {
+            public void onDrmConfig(MediaPlayer2 mp, MediaItem item) {
                 String widevineSecurityLevel3 = "L3";
                 String securityLevelProperty = "securityLevel";
 
@@ -459,7 +459,7 @@
 
         mPlayer.setDrmEventCallback(mExecutor, new MediaPlayer2.DrmEventCallback() {
             @Override
-            public void onDrmInfo(MediaPlayer2 mp, MediaItem2 item, DrmInfo drmInfo) {
+            public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) {
                 Log.v(TAG, "preparePlayerAndDrm_V3: onDrmInfo" + drmInfo);
 
                 // DRM preperation
@@ -497,7 +497,7 @@
             }
 
             @Override
-            public void onDrmPrepared(MediaPlayer2 mp, MediaItem2 item, int status) {
+            public void onDrmPrepared(MediaPlayer2 mp, MediaItem item, int status) {
                 Log.v(TAG, "preparePlayerAndDrm_V3: onDrmPrepared status: " + status);
 
                 assertTrue("preparePlayerAndDrm_V3: onDrmPrepared did not succeed",
@@ -558,7 +558,7 @@
 
                 Log.v(TAG, "playLoadedVideo: setMediaItem()");
                 mPlayer.setMediaItem(
-                        new UriMediaItem2.Builder(mContext, file).build());
+                        new UriMediaItem.Builder(mContext, file).build());
 
                 Log.v(TAG, "playLoadedVideo: prepare()");
                 mPlayer.prepare();
@@ -691,7 +691,7 @@
                         mPlayer.setDrmEventCallback(mExecutor, new MediaPlayer2.DrmEventCallback() {
                             @Override
                             public void onDrmPrepared(
-                                    MediaPlayer2 mp, MediaItem2 item, int status) {
+                                    MediaPlayer2 mp, MediaItem item, int status) {
                                 drmPrepared.signal();
                             }
                         });
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayer2StateTest.java b/media2/src/androidTest/java/androidx/media2/MediaPlayer2StateTest.java
index 0a4a781..d5b4846 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayer2StateTest.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayer2StateTest.java
@@ -81,8 +81,8 @@
     // Used for testing case that operation is called before setDataSourceDesc().
     private static final int MEDIAPLAYER2_STATE_IDLE_NO_DATA_SOURCE = 400001;
 
-    private static final MediaItem2 sDummyDataSource = new CallbackMediaItem2.Builder(
-            new DataSourceCallback2() {
+    private static final MediaItem sDummyDataSource = new CallbackMediaItem.Builder(
+            new DataSourceCallback() {
                 @Override
                 public int readAt(long position, byte[] buffer, int offset, int size)
                         throws IOException {
@@ -505,7 +505,7 @@
     private static final PlayerOperation sSetPlaybackParamsOperation = new PlayerOperation() {
         @Override
         public void doOperation(MediaPlayer2 player) {
-            player.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(1.0f).build());
+            player.setPlaybackParams(new PlaybackParams.Builder().setSpeed(1.0f).build());
         }
 
         @Override
@@ -1016,7 +1016,7 @@
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PAUSE) {
                     onPauseCalled.signal();
                 } else if (what == MediaPlayer2.CALL_COMPLETED_PREPARE) {
@@ -1027,7 +1027,7 @@
             }
 
             @Override
-            public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 mOnErrorCalled.signal();
             }
         };
@@ -1036,7 +1036,7 @@
         }
 
         if (mTestState == PLAYER_STATE_ERROR) {
-            DataSourceCallback2 invalidDataSource = new DataSourceCallback2() {
+            DataSourceCallback invalidDataSource = new DataSourceCallback() {
                 @Override
                 public int readAt(long position, byte[] buffer, int offset, int size)
                         throws IOException {
@@ -1052,7 +1052,7 @@
                 public void close() throws IOException {}
             };
             mOnErrorCalled.reset();
-            mPlayer.setMediaItem(new CallbackMediaItem2.Builder(invalidDataSource)
+            mPlayer.setMediaItem(new CallbackMediaItem.Builder(invalidDataSource)
                     .build());
             mPlayer.prepare();
             mOnErrorCalled.waitForSignal(1000);
@@ -1068,7 +1068,7 @@
             fail();
         }
         if (mTestOperation == sSkipToNextOperation) {
-            MediaItem2 item = createDataSourceDesc(R.raw.testvideo);
+            MediaItem item = createDataSourceDesc(R.raw.testvideo);
             mPlayer.setNextMediaItem(item);
         }
         assertEquals(PLAYER_STATE_IDLE, mPlayer.getState());
@@ -1119,7 +1119,7 @@
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 callCompletes.add(new Pair<Integer, Integer>(what, status));
                 callCompleteCalled.signal();
             }
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayer2Test.java b/media2/src/androidTest/java/androidx/media2/MediaPlayer2Test.java
index 51ac7844..873b13f 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayer2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayer2Test.java
@@ -112,7 +112,7 @@
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SET_DATA_SOURCE) {
                     assertTrue(status != MediaPlayer2.CALL_STATUS_NO_ERROR);
                     onSetDataSourceCalled.signal();
@@ -124,7 +124,7 @@
         }
 
         onSetDataSourceCalled.reset();
-        mPlayer.setMediaItem((MediaItem2) null);
+        mPlayer.setMediaItem((MediaItem) null);
         onSetDataSourceCalled.waitForSignal();
     }
 
@@ -155,7 +155,7 @@
         final Monitor onLoopCurrentCalled = new Monitor();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     onPrepareCalled.signal();
                 }
@@ -163,7 +163,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     onPlayCalled.signal();
                 } else if (what == MediaPlayer2.CALL_COMPLETED_LOOP_CURRENT) {
@@ -219,7 +219,7 @@
             // test stop and restart
             mp.reset();
             mp.setEventCallback(mExecutor, ecb);
-            mp.setMediaItem(new UriMediaItem2.Builder(mContext, uri).build());
+            mp.setMediaItem(new UriMediaItem.Builder(mContext, uri).build());
             onPrepareCalled.reset();
             mp.prepare();
             onPrepareCalled.waitForSignal();
@@ -257,7 +257,7 @@
         final Monitor onLoopCurrentCalled = new Monitor();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     onPrepareCalled.signal();
                 }
@@ -265,7 +265,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     onPlayCalled.signal();
                 } else if (what == MediaPlayer2.CALL_COMPLETED_LOOP_CURRENT) {
@@ -317,7 +317,7 @@
             // test stop and restart
             mp.reset();
             afd = mResources.openRawResourceFd(resid);
-            mp.setMediaItem(new FileMediaItem2.Builder(
+            mp.setMediaItem(new FileMediaItem.Builder(
                     afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength())
                     .build());
 
@@ -360,7 +360,7 @@
                 MediaPlayer2.EventCallback ecb =
                     new MediaPlayer2.EventCallback() {
                         @Override
-                        public void onCallCompleted(MediaPlayer2 mp, MediaItem2 item,
+                        public void onCallCompleted(MediaPlayer2 mp, MediaItem item,
                                 int what, int status) {
                             if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                                 onPlayCalled.signal();
@@ -424,7 +424,7 @@
             MediaPlayer2.EventCallback ecb =
                     new MediaPlayer2.EventCallback() {
                         @Override
-                        public void onInfo(MediaPlayer2 mp, MediaItem2 item,
+                        public void onInfo(MediaPlayer2 mp, MediaItem item,
                                 int what, int extra) {
                             if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
                                 Log.i("@@@", "got oncompletion");
@@ -435,7 +435,7 @@
                         }
 
                         @Override
-                        public void onCallCompleted(MediaPlayer2 mp, MediaItem2 item,
+                        public void onCallCompleted(MediaPlayer2 mp, MediaItem item,
                                 int what, int status) {
                             if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                                 onPlayCalled.signal();
@@ -486,14 +486,14 @@
         MediaPlayer2.EventCallback ecb =
                 new MediaPlayer2.EventCallback() {
                     @Override
-                    public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                    public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                         if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                             onPrepareCalled.signal();
                         }
                     }
 
                     @Override
-                    public void onCallCompleted(MediaPlayer2 mp, MediaItem2 item,
+                    public void onCallCompleted(MediaPlayer2 mp, MediaItem item,
                             int what, int status) {
                         if (what == MediaPlayer2.CALL_COMPLETED_LOOP_CURRENT) {
                             onLoopCurrentCalled.signal();
@@ -535,7 +535,7 @@
             // test stop and restart
             mp.reset();
             afd = mResources.openRawResourceFd(resid);
-            mp.setMediaItem(new FileMediaItem2.Builder(
+            mp.setMediaItem(new FileMediaItem.Builder(
                     afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()).build());
 
             mp.setEventCallback(mExecutor, ecb);
@@ -672,7 +672,7 @@
         final Monitor prepareCompleted = new Monitor();
         MediaPlayer2.EventCallback callback = new MediaPlayer2.EventCallback() {
             @Override
-            public void onCallCompleted(MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+            public void onCallCompleted(MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PREPARE) {
                     prepareCompleted.signal();
                 }
@@ -744,7 +744,7 @@
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SEEK_TO) {
                     seekDone.countDown();
                 }
@@ -949,9 +949,9 @@
         if (!checkLoadResource(res1)) {
             return; // skip
         }
-        final MediaItem2 item1 = createDataSourceDesc(res1);
-        final MediaItem2 item2 = createDataSourceDesc(res2);
-        ArrayList<MediaItem2> nextDSDs = new ArrayList<MediaItem2>(2);
+        final MediaItem item1 = createDataSourceDesc(res1);
+        final MediaItem item2 = createDataSourceDesc(res2);
+        ArrayList<MediaItem> nextDSDs = new ArrayList<MediaItem>(2);
         nextDSDs.add(item2);
         nextDSDs.add(item1);
 
@@ -962,7 +962,7 @@
         final Monitor onPlaylistEndCalled = new Monitor();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     Log.i(LOG_TAG, "testSetNextDataSources: prepared item MediaId="
                             + item.getMediaId());
@@ -1016,17 +1016,17 @@
     @LargeTest
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
     public void testSetNextDataSource() throws Exception {
-        final MediaItem2 item1 = createDataSourceDesc(
+        final MediaItem item1 = createDataSourceDesc(
                 R.raw.video_480x360_mp4_h264_1000kbps_30fps_aac_stereo_128kbps_44100hz);
-        final MediaItem2 item2 = createDataSourceDesc(
+        final MediaItem item2 = createDataSourceDesc(
                 R.raw.testvideo);
 
         final Monitor onPlaybackCompletedCalled = new Monitor();
-        final List<MediaItem2> playedDSDs = new ArrayList<>();
+        final List<MediaItem> playedDSDs = new ArrayList<>();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SET_NEXT_DATA_SOURCE
                         || what == MediaPlayer2.CALL_COMPLETED_SET_NEXT_DATA_SOURCES) {
                     if (status != MediaPlayer2.CALL_STATUS_NO_ERROR) {
@@ -1036,7 +1036,7 @@
             }
 
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
                     playedDSDs.add(item);
                     onPlaybackCompletedCalled.signal();
@@ -1067,17 +1067,17 @@
     @LargeTest
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
     public void testSetNextDataSourceBeforeSetDataSource() throws Exception {
-        final MediaItem2 item1 = createDataSourceDesc(
+        final MediaItem item1 = createDataSourceDesc(
                 R.raw.video_480x360_mp4_h264_1000kbps_30fps_aac_stereo_128kbps_44100hz);
-        final MediaItem2 item2 = createDataSourceDesc(
+        final MediaItem item2 = createDataSourceDesc(
                 R.raw.testvideo);
 
         final Monitor onCallCompletedCalled = new Monitor();
-        final List<MediaItem2> playedDSDs = new ArrayList<>();
+        final List<MediaItem> playedDSDs = new ArrayList<>();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SET_NEXT_DATA_SOURCE
                         || what == MediaPlayer2.CALL_COMPLETED_SET_NEXT_DATA_SOURCES) {
                     if (status == MediaPlayer2.CALL_STATUS_INVALID_OPERATION) {
@@ -1115,7 +1115,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
@@ -1125,7 +1125,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SEEK_TO) {
                     mOnSeekCompleteCalled.signal();
                 }
@@ -1149,7 +1149,7 @@
         final float playbackRate = 1.0f;
 
         int playTime = 2000;  // The testing clip is about 10 second long.
-        mPlayer.setPlaybackParams(new PlaybackParams2().setSpeed(playbackRate));
+        mPlayer.setPlaybackParams(new PlaybackParams().setSpeed(playbackRate));
         assertTrue("MediaPlayer2 should be playing", mPlayer.isPlaying());
         Thread.sleep(playTime);
         assertTrue("MediaPlayer2 should still be playing",
@@ -1164,7 +1164,7 @@
         assertFalse("MediaPlayer2 should not be playing", mPlayer.isPlaying());
         long eosPosition = mPlayer.getCurrentPosition();
 
-        mPlayer.setPlaybackParams(new PlaybackParams2().setSpeed(playbackRate));
+        mPlayer.setPlaybackParams(new PlaybackParams().setSpeed(playbackRate));
         assertTrue("MediaPlayer2 should be playing after EOS", mPlayer.isPlaying());
         Thread.sleep(playTime);
         long position = mPlayer.getCurrentPosition();
@@ -1188,7 +1188,7 @@
         final Monitor labelReached = new Monitor();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -1214,7 +1214,7 @@
             Thread.sleep(1000);
             int playTime = 4000;  // The testing clip is about 10 second long.
             int privState = mPlayer.getState();
-            mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(playbackRate).build());
+            mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(playbackRate).build());
             labelReached.reset();
             mPlayer.notifyWhenCommandLabelReached(new Object());
             labelReached.waitForSignal();
@@ -1228,7 +1228,7 @@
             mPlayer.notifyWhenCommandLabelReached(new Object());
             labelReached.waitForSignal();
 
-            PlaybackParams2 pbp = mPlayer.getPlaybackParams();
+            PlaybackParams pbp = mPlayer.getPlaybackParams();
             assertEquals(playbackRate, pbp.getSpeed(), FLOAT_TOLERANCE);
             assertTrue("MediaPlayer2 should still be playing",
                     mPlayer.getState() == MediaPlayer2.PLAYER_STATE_PLAYING);
@@ -1264,7 +1264,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -1272,7 +1272,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SEEK_TO) {
                     mOnSeekCompleteCalled.signal();
                 }
@@ -1361,7 +1361,7 @@
         final Monitor onPauseCalled = new Monitor();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -1369,7 +1369,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PAUSE) {
                     onPauseCalled.signal();
                 }
@@ -1386,10 +1386,10 @@
         mOnPrepareCalled.waitForSignal();
 
         mPlayer.play();
-        mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(playbackRate).build());
+        mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(playbackRate).build());
         Thread.sleep(SLEEP_TIME);  // let player get into stable state.
         long nt1 = System.nanoTime();
-        MediaTimestamp2 ts1 = mPlayer.getTimestamp();
+        MediaTimestamp ts1 = mPlayer.getTimestamp();
         long nt2 = System.nanoTime();
         assertTrue("Media player should return a valid time stamp", ts1 != null);
         assertEquals("MediaPlayer2 had error in clockRate " + ts1.getMediaClockRate(),
@@ -1412,7 +1412,7 @@
         ts1 = mPlayer.getTimestamp();
         assertTrue("Media player should return a valid time stamp", ts1 != null);
         Thread.sleep(playTime);
-        MediaTimestamp2 ts2 = mPlayer.getTimestamp();
+        MediaTimestamp ts2 = mPlayer.getTimestamp();
         assertTrue("Media player should return a valid time stamp", ts2 != null);
         assertTrue("The clockRate should not be changed.",
                 ts1.getMediaClockRate() == ts2.getMediaClockRate());
@@ -1801,7 +1801,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_METADATA_UPDATE) {
@@ -1811,7 +1811,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SEEK_TO) {
                     mOnSeekCompleteCalled.signal();
                 } else if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
@@ -1824,7 +1824,7 @@
 
             @Override
             public void onSubtitleData(
-                    MediaPlayer2 mp, MediaItem2 item, SubtitleData2 data) {
+                    MediaPlayer2 mp, MediaItem item, SubtitleData data) {
                 if (data != null && data.getData() != null) {
                     mOnSubtitleDataCalled.signal();
                 }
@@ -1885,7 +1885,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_METADATA_UPDATE) {
@@ -1895,7 +1895,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     mOnPlayCalled.signal();
                 }
@@ -1903,7 +1903,7 @@
 
             @Override
             public void onSubtitleData(
-                    MediaPlayer2 mp, MediaItem2 item, SubtitleData2 data) {
+                    MediaPlayer2 mp, MediaItem item, SubtitleData data) {
                 if (data != null) {
                     mOnSubtitleDataCalled.signal();
                 }
@@ -1954,7 +1954,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_METADATA_UPDATE) {
@@ -1964,7 +1964,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     mOnPlayCalled.signal();
                 }
@@ -2008,18 +2008,18 @@
             return; // skip
         }
 
-        final BlockingDeque<MediaTimestamp2> timestamps = new LinkedBlockingDeque<>();
+        final BlockingDeque<MediaTimestamp> timestamps = new LinkedBlockingDeque<>();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SEEK_TO) {
                     mOnSeekCompleteCalled.signal();
                 }
             }
             @Override
             public void onMediaTimeDiscontinuity(
-                    MediaPlayer2 mp, MediaItem2 item, MediaTimestamp2 timestamp) {
+                    MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) {
                 timestamps.add(timestamp);
                 mOnMediaTimeDiscontinuityCalled.signal();
             }
@@ -2049,7 +2049,7 @@
 
         // Timestamp needs to be updated when playback rate changes.
         mOnMediaTimeDiscontinuityCalled.reset();
-        mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(0.5f).build());
+        mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(0.5f).build());
         mOnMediaTimeDiscontinuityCalled.waitForSignal();
         do {
             assertTrue(mOnMediaTimeDiscontinuityCalled.waitForSignal(1000));
@@ -2092,7 +2092,7 @@
         mOnCompletionCalled.reset();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
@@ -2146,7 +2146,7 @@
         mOnCompletionCalled.reset();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
@@ -2156,7 +2156,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     mOnPlayCalled.signal();
                 }
@@ -2201,18 +2201,18 @@
         mOnCompletionCalled.reset();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem2 item,
+            public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem item,
                     int width, int height) {
                 mOnVideoSizeChangedCalled.signal();
             }
 
             @Override
-            public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 mOnErrorCalled.signal();
             }
 
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 mOnInfoCalled.signal();
 
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
@@ -2224,7 +2224,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SEEK_TO) {
                     mOnSeekCompleteCalled.signal();
                 } else if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
@@ -2276,7 +2276,7 @@
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PREPARE) {
                     prepareCompleted.signal();
                 } else if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
@@ -2332,7 +2332,7 @@
             Uri uri = Uri.parse(outputFileLocation);
             MediaPlayer2 mp = MediaPlayer2.create(mActivity);
             try {
-                mp.setMediaItem(new UriMediaItem2.Builder(mContext, uri).build());
+                mp.setMediaItem(new UriMediaItem.Builder(mContext, uri).build());
                 mp.prepare();
                 Thread.sleep(SLEEP_TIME);
                 playAndStop(mp);
@@ -2390,7 +2390,7 @@
                 PackageManager.FEATURE_MICROPHONE);
     }
 
-    // Smoke test playback from a DataSourceCallback2.
+    // Smoke test playback from a DataSourceCallback.
     @Test
     @LargeTest
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
@@ -2404,11 +2404,11 @@
         }
         */
 
-        TestDataSourceCallback2 dataSource =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
+        TestDataSourceCallback dataSource =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
         // Test returning -1 from getSize() to indicate unknown size.
         dataSource.returnFromGetSize(-1);
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
         playLoadedVideo(null, null, -1);
         assertTrue(mPlayer.getState() == MediaPlayer2.PLAYER_STATE_PLAYING);
 
@@ -2419,7 +2419,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -2427,7 +2427,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     mOnPlayCalled.signal();
                 }
@@ -2442,7 +2442,7 @@
 
         // Test reset.
         mPlayer.reset();
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         mPlayer.setEventCallback(mExecutor, ecb);
 
@@ -2470,7 +2470,7 @@
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SET_DATA_SOURCE) {
                     mCallStatus = status;
                     mOnPlayCalled.signal();
@@ -2480,7 +2480,7 @@
         mPlayer.setEventCallback(mExecutor, ecb);
 
         mCallStatus = MediaPlayer2.CALL_STATUS_NO_ERROR;
-        mPlayer.setMediaItem((MediaItem2) null);
+        mPlayer.setMediaItem((MediaItem) null);
         mOnPlayCalled.waitForSignal();
         assertTrue(mCallStatus != MediaPlayer2.CALL_STATUS_NO_ERROR);
     }
@@ -2492,7 +2492,7 @@
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_SET_DATA_SOURCE) {
                     mCallStatus = status;
                     mOnPlayCalled.signal();
@@ -2501,8 +2501,8 @@
         };
         mPlayer.setEventCallback(mExecutor, ecb);
 
-        TestDataSourceCallback2 dataSource = new TestDataSourceCallback2(new byte[0]);
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        TestDataSourceCallback dataSource = new TestDataSourceCallback(new byte[0]);
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
         mOnPlayCalled.waitForSignal();
         mPlayer.reset();
         assertTrue(dataSource.isClosed());
@@ -2520,13 +2520,13 @@
         */
 
         setOnErrorListener();
-        TestDataSourceCallback2 dataSource =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        TestDataSourceCallback dataSource =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -2556,14 +2556,14 @@
         }
         */
 
-        TestDataSourceCallback2 dataSource =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        TestDataSourceCallback dataSource =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         setOnErrorListener();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -2588,7 +2588,7 @@
     public void testClearPendingCommands() throws Exception {
         final Monitor readRequested = new Monitor();
         final Monitor readAllowed = new Monitor();
-        DataSourceCallback2 dataSource = new DataSourceCallback2() {
+        DataSourceCallback dataSource = new DataSourceCallback() {
             @Override
             public int readAt(long position, byte[] buffer, int offset, int size)
                     throws IOException {
@@ -2613,7 +2613,7 @@
         setOnErrorListener();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -2621,12 +2621,12 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 commandsCompleted.add(what);
             }
 
             @Override
-            public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 mOnErrorCalled.signal();
             }
         };
@@ -2637,7 +2637,7 @@
         mOnPrepareCalled.reset();
         mOnErrorCalled.reset();
 
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         // prepare() will be pending until readAllowed is signaled.
         mPlayer.prepare();
@@ -2672,7 +2672,7 @@
         final long start1 = 6000;
         final long end1 = 8000;
         AssetFileDescriptor afd1 = mResources.openRawResourceFd(resid1);
-        MediaItem2 item1 = new FileMediaItem2.Builder(
+        MediaItem item1 = new FileMediaItem.Builder(
                 afd1.getFileDescriptor(), afd1.getStartOffset(), afd1.getLength())
                 .setStartPosition(start1)
                 .setEndPosition(end1)
@@ -2683,7 +2683,7 @@
         final long end2 = 5000;
         final int expectedDuration2 = 11047;
         AssetFileDescriptor afd2 = mResources.openRawResourceFd(resid2);
-        MediaItem2 item2 = new FileMediaItem2.Builder(
+        MediaItem item2 = new FileMediaItem.Builder(
                 afd2.getFileDescriptor(), afd2.getStartOffset(), afd2.getLength())
                 .setStartPosition(start2)
                 .setEndPosition(end2)
@@ -2697,7 +2697,7 @@
         final int[] seekResults = new int[1];
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
@@ -2707,7 +2707,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     assertTrue(status == MediaPlayer2.CALL_STATUS_NO_ERROR);
                     mOnPlayCalled.signal();
@@ -2733,7 +2733,7 @@
 
         mOnCompletionCalled.waitForSignal();
         assertTrue(mPlayer.getCurrentPosition() >= start2);
-        mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(0.5f).build());
+        mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(0.5f).build());
 
         mOnCompletionCalled.reset();
         mOnCompletionCalled.waitForSignal();
@@ -2762,7 +2762,7 @@
         final long start = 6000;
         final long end = 8000;
         AssetFileDescriptor afd = mResources.openRawResourceFd(resid);
-        MediaItem2 item = new FileMediaItem2.Builder(
+        MediaItem item = new FileMediaItem.Builder(
                 afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength())
                 .setStartPosition(start)
                 .setEndPosition(end)
@@ -2774,7 +2774,7 @@
         final Monitor onDataSourceRepeatCalled = new Monitor();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_REPEAT) {
@@ -2786,7 +2786,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     assertTrue(status == MediaPlayer2.CALL_STATUS_NO_ERROR);
                     mOnPlayCalled.signal();
@@ -2835,7 +2835,7 @@
         final long start1 = 6000;
         final long end1 = 7000;
         AssetFileDescriptor afd1 = mResources.openRawResourceFd(resid1);
-        MediaItem2 item1 = new FileMediaItem2.Builder(
+        MediaItem item1 = new FileMediaItem.Builder(
                 afd1.getFileDescriptor(), afd1.getStartOffset(), afd1.getLength())
                 .setStartPosition(start1)
                 .setEndPosition(end1)
@@ -2845,7 +2845,7 @@
         final long start2 = 3000;
         final long end2 = 4000;
         AssetFileDescriptor afd2 = mResources.openRawResourceFd(resid2);
-        MediaItem2 item2 = new FileMediaItem2.Builder(
+        MediaItem item2 = new FileMediaItem.Builder(
                 afd2.getFileDescriptor(), afd2.getStartOffset(), afd2.getLength())
                 .setStartPosition(start2)
                 .setEndPosition(end2)
@@ -2857,7 +2857,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
@@ -2867,7 +2867,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     assertTrue(status == MediaPlayer2.CALL_STATUS_NO_ERROR);
                     mOnPlayCalled.signal();
@@ -2884,7 +2884,7 @@
 
         mOnPlayCalled.reset();
         mOnCompletionCalled.reset();
-        mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(2.0f).build());
+        mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(2.0f).build());
         mPlayer.play();
 
         mOnPlayCalled.waitForSignal();
@@ -2907,7 +2907,7 @@
 
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -2920,8 +2920,8 @@
         mPlayer.prepare();
         mOnPrepareCalled.waitForSignal();
 
-        PlaybackParams2 playbackParams = mPlayer.getPlaybackParams();
-        assertEquals(PlaybackParams2.AUDIO_FALLBACK_MODE_DEFAULT,
+        PlaybackParams playbackParams = mPlayer.getPlaybackParams();
+        assertEquals(PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT,
                 (int) playbackParams.getAudioFallbackMode());
         assertEquals(1.0f, playbackParams.getPitch(), 0.001f);
         assertEquals(1.0f, playbackParams.getSpeed(), 0.001f);
@@ -2934,10 +2934,10 @@
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
     public void testSkipUnnecessarySeek() throws Exception {
         final int resid = R.raw.video_480x360_mp4_h264_1350kbps_30fps_aac_stereo_192kbps_44100hz;
-        final TestDataSourceCallback2 source =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
+        final TestDataSourceCallback source =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
         final Monitor readAllowed = new Monitor();
-        DataSourceCallback2 dataSource = new DataSourceCallback2() {
+        DataSourceCallback dataSource = new DataSourceCallback() {
             @Override
             public int readAt(long position, byte[] buffer, int offset, int size)
                     throws IOException {
@@ -2966,7 +2966,7 @@
         setOnErrorListener();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -2974,12 +2974,12 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 commandsCompleted.add(new Pair<>(what, status));
             }
 
             @Override
-            public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 mOnErrorCalled.signal();
             }
 
@@ -2995,7 +2995,7 @@
         mOnPrepareCalled.reset();
         mOnErrorCalled.reset();
 
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         // prepare() will be pending until readAllowed is signaled.
         mPlayer.prepare();
@@ -3039,8 +3039,8 @@
     public void testCancelPendingCommands() throws Exception {
         final Monitor readRequested = new Monitor();
         final Monitor readAllowed = new Monitor();
-        DataSourceCallback2 dataSource = new DataSourceCallback2() {
-            TestDataSourceCallback2 mTestSource = TestDataSourceCallback2.fromAssetFd(
+        DataSourceCallback dataSource = new DataSourceCallback() {
+            TestDataSourceCallback mTestSource = TestDataSourceCallback.fromAssetFd(
                     mResources.openRawResourceFd(R.raw.testmp3));
             @Override
             public int readAt(long position, byte[] buffer, int offset, int size)
@@ -3069,7 +3069,7 @@
         final Monitor labelReached = new Monitor();
         MediaPlayer2.EventCallback ecb = new MediaPlayer2.EventCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 }
@@ -3077,12 +3077,12 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 commandsCompleted.add(what);
             }
 
             @Override
-            public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 mOnErrorCalled.signal();
             }
 
@@ -3098,7 +3098,7 @@
         mOnPrepareCalled.reset();
         mOnErrorCalled.reset();
 
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         // prepare() will be pending until readAllowed is signaled.
         mPlayer.prepare();
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayer2TestBase.java b/media2/src/androidTest/java/androidx/media2/MediaPlayer2TestBase.java
index 526de04..99fb3ee 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayer2TestBase.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayer2TestBase.java
@@ -119,7 +119,7 @@
                     new AudioAttributesCompat.Builder().build();
             mp.setAudioAttributes(aa);
             mp.setAudioSessionId(audioSessionId);
-            mp.setMediaItem(new UriMediaItem2.Builder(context, uri).build());
+            mp.setMediaItem(new UriMediaItem.Builder(context, uri).build());
             if (holder != null) {
                 mp.setSurface(holder.getSurface());
             }
@@ -129,7 +129,7 @@
                     new MediaPlayer2.EventCallback() {
                         @Override
                         public void onInfo(
-                                MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                                MediaPlayer2 mp, MediaItem item, int what, int extra) {
                             if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                                 onPrepareCalled.signal();
                             }
@@ -176,7 +176,7 @@
             mp.setAudioAttributes(aa);
             mp.setAudioSessionId(audioSessionId);
 
-            mp.setMediaItem(new FileMediaItem2.Builder(
+            mp.setMediaItem(new FileMediaItem.Builder(
                     afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()).build());
 
             final Monitor onPrepareCalled = new Monitor();
@@ -185,7 +185,7 @@
                     new MediaPlayer2.EventCallback() {
                         @Override
                         public void onInfo(
-                                MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                                MediaPlayer2 mp, MediaItem item, int what, int extra) {
                             if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                                 onPrepareCalled.signal();
                             }
@@ -288,7 +288,7 @@
             final List<MediaPlayer2.EventCallback> ecbs) {
         mp.setEventCallback(mExecutor, new MediaPlayer2.EventCallback() {
             @Override
-            public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem2 item, int w, int h) {
+            public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem item, int w, int h) {
                 synchronized (cbLock) {
                     for (MediaPlayer2.EventCallback ecb : ecbs) {
                         ecb.onVideoSizeChanged(mp, item, w, h);
@@ -297,8 +297,8 @@
             }
 
             @Override
-            public void onTimedMetaDataAvailable(MediaPlayer2 mp, MediaItem2 item,
-                    TimedMetaData2 data) {
+            public void onTimedMetaDataAvailable(MediaPlayer2 mp, MediaItem item,
+                    TimedMetaData data) {
                 synchronized (cbLock) {
                     for (MediaPlayer2.EventCallback ecb : ecbs) {
                         ecb.onTimedMetaDataAvailable(mp, item, data);
@@ -307,7 +307,7 @@
             }
 
             @Override
-            public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 synchronized (cbLock) {
                     for (MediaPlayer2.EventCallback ecb : ecbs) {
                         ecb.onError(mp, item, what, extra);
@@ -316,7 +316,7 @@
             }
 
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                 synchronized (cbLock) {
                     for (MediaPlayer2.EventCallback ecb : ecbs) {
                         ecb.onInfo(mp, item, what, extra);
@@ -326,7 +326,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 item, int what, int status) {
+                    MediaPlayer2 mp, MediaItem item, int what, int status) {
                 synchronized (cbLock) {
                     for (MediaPlayer2.EventCallback ecb : ecbs) {
                         ecb.onCallCompleted(mp, item, what, status);
@@ -335,8 +335,8 @@
             }
 
             @Override
-            public void onMediaTimeDiscontinuity(MediaPlayer2 mp, MediaItem2 item,
-                    MediaTimestamp2 timestamp) {
+            public void onMediaTimeDiscontinuity(MediaPlayer2 mp, MediaItem item,
+                    MediaTimestamp timestamp) {
                 synchronized (cbLock) {
                     for (MediaPlayer2.EventCallback ecb : ecbs) {
                         ecb.onMediaTimeDiscontinuity(mp, item, timestamp);
@@ -353,8 +353,8 @@
                 }
             }
             @Override
-            public  void onSubtitleData(MediaPlayer2 mp, MediaItem2 item,
-                    final SubtitleData2 data) {
+            public  void onSubtitleData(MediaPlayer2 mp, MediaItem item,
+                    final SubtitleData data) {
                 synchronized (cbLock) {
                     for (MediaPlayer2.EventCallback ecb : ecbs) {
                         ecb.onSubtitleData(mp, item, data);
@@ -374,7 +374,7 @@
 
         AssetFileDescriptor afd = mResources.openRawResourceFd(resid);
         try {
-            mPlayer.setMediaItem(new FileMediaItem2.Builder(
+            mPlayer.setMediaItem(new FileMediaItem.Builder(
                     afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()).build());
         } finally {
             // Close descriptor later when test finishes since setMediaItem is async operation.
@@ -383,7 +383,7 @@
         return true;
     }
 
-    protected MediaItem2 createDataSourceDesc(int resid) throws Exception {
+    protected MediaItem createDataSourceDesc(int resid) throws Exception {
         /* FIXME: ensure device has capability.
         if (!MediaUtils.hasCodecsForResource(mContext, resid)) {
             return null;
@@ -392,7 +392,7 @@
 
         AssetFileDescriptor afd = mResources.openRawResourceFd(resid);
         mFdsToClose.add(afd);
-        return new FileMediaItem2.Builder(
+        return new FileMediaItem.Builder(
                 afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()).build();
     }
 
@@ -422,7 +422,7 @@
         final Uri uri = Uri.parse(path);
         for (int i = 0; i < STREAM_RETRIES; i++) {
             try {
-                mPlayer.setMediaItem(new UriMediaItem2.Builder(mContext, uri).build());
+                mPlayer.setMediaItem(new UriMediaItem.Builder(mContext, uri).build());
                 playLoadedVideo(width, height, playTime);
                 playedSuccessfully = true;
                 break;
@@ -454,7 +454,7 @@
         boolean playedSuccessfully = false;
         for (int i = 0; i < STREAM_RETRIES; i++) {
             try {
-                mPlayer.setMediaItem(new UriMediaItem2.Builder(
+                mPlayer.setMediaItem(new UriMediaItem.Builder(
                         mContext, uri, headers, cookies).build());
                 playLoadedVideo(width, height, playTime);
                 playedSuccessfully = true;
@@ -490,7 +490,7 @@
         synchronized (mEventCbLock) {
             mEventCallbacks.add(new MediaPlayer2.EventCallback() {
                 @Override
-                public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem2 item, int w, int h) {
+                public void onVideoSizeChanged(MediaPlayer2 mp, MediaItem item, int w, int h) {
                     if (w == 0 && h == 0) {
                         // A size of 0x0 can be sent initially one time when using NuPlayer.
                         assertFalse(mOnVideoSizeChangedCalled.isSignalled());
@@ -506,12 +506,12 @@
                 }
 
                 @Override
-                public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                     fail("Media player had error " + what + " playing video");
                 }
 
                 @Override
-                public void onInfo(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                public void onInfo(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                     if (what == MediaPlayer2.MEDIA_INFO_VIDEO_RENDERING_START) {
                         mOnVideoRenderingStartCalled.signal();
                     } else if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
@@ -520,7 +520,7 @@
                 }
 
                 @Override
-                public void onCallCompleted(MediaPlayer2 mp, MediaItem2 item,
+                public void onCallCompleted(MediaPlayer2 mp, MediaItem item,
                         int what, int status) {
                     if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                         mOnPlayCalled.signal();
@@ -602,7 +602,7 @@
         synchronized (mEventCbLock) {
             mEventCallbacks.add(new MediaPlayer2.EventCallback() {
                 @Override
-                public void onError(MediaPlayer2 mp, MediaItem2 item, int what, int extra) {
+                public void onError(MediaPlayer2 mp, MediaItem item, int what, int extra) {
                     mOnErrorCalled.signal();
                 }
             });
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayerDrmTest.java b/media2/src/androidTest/java/androidx/media2/MediaPlayerDrmTest.java
index 13ef147..82220a7 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayerDrmTest.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayerDrmTest.java
@@ -45,7 +45,7 @@
 import androidx.annotation.CallSuper;
 import androidx.media2.MediaPlayer.DrmInfo;
 import androidx.media2.MediaPlayer.DrmResult;
-import androidx.media2.SessionPlayer2.PlayerResult;
+import androidx.media2.SessionPlayer.PlayerResult;
 import androidx.media2.TestUtils.Monitor;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.LargeTest;
@@ -379,18 +379,19 @@
 
         mECb = new MediaPlayer.PlayerCallback() {
                 @Override
-                public void onVideoSizeChanged(MediaPlayer mp, MediaItem2 item, int w, int h) {
-                    Log.v(TAG, "VideoSizeChanged" + " w:" + w + " h:" + h);
+                public void onVideoSizeChanged(MediaPlayer mp, MediaItem item, VideoSize size) {
+                    Log.v(TAG, "VideoSizeChanged" + " w:" + size.getWidth() + " h:"
+                            + size.getHeight());
                     mOnVideoSizeChangedCalled.signal();
                 }
 
                 @Override
-                public void onError(MediaPlayer mp, MediaItem2 item, int what, int extra) {
+                public void onError(MediaPlayer mp, MediaItem item, int what, int extra) {
                     fail("Media player had error " + what + " playing video");
                 }
 
                 @Override
-                public void onInfo(MediaPlayer mp, MediaItem2 item, int what, int extra) {
+                public void onInfo(MediaPlayer mp, MediaItem item, int what, int extra) {
                     if (what == MediaPlayer.MEDIA_INFO_MEDIA_ITEM_END) {
                         Log.v(TAG, "playLoadedVideo: onInfo_PlaybackComplete");
                         mOnPlaybackCompleted.signal();
@@ -401,7 +402,7 @@
         mPlayer.registerPlayerCallback(mExecutor, mECb);
         Log.v(TAG, "playLoadedVideo: setMediaItem()");
         ListenableFuture<PlayerResult> future =
-                mPlayer.setMediaItem(new UriMediaItem2.Builder(mContext, file).build());
+                mPlayer.setMediaItem(new UriMediaItem.Builder(mContext, file).build());
         assertEquals(PlayerResult.RESULT_CODE_SUCCESS, future.get().getResultCode());
 
         SurfaceHolder surfaceHolder = mActivity.getSurfaceHolder();
@@ -476,7 +477,7 @@
 
         mPlayer.registerPlayerCallback(mExecutor, new MediaPlayer.PlayerCallback() {
             @Override
-            public void onDrmInfo(MediaPlayer mp, MediaItem2 item, DrmInfo drmInfo) {
+            public void onDrmInfo(MediaPlayer mp, MediaItem item, DrmInfo drmInfo) {
                 Log.v(TAG, "preparePlayerAndDrm_V1: onDrmInfo" + drmInfo);
 
                 // in the callback (async mode) so handling exceptions here
@@ -508,7 +509,7 @@
     private void preparePlayerAndDrm_V2_syncDrmSetupPlusConfig() throws Exception {
         mPlayer.setOnDrmConfigHelper(new MediaPlayer.OnDrmConfigHelper() {
             @Override
-            public void onDrmConfig(MediaPlayer mp, MediaItem2 item) {
+            public void onDrmConfig(MediaPlayer mp, MediaItem item) {
                 String widevineSecurityLevel3 = "L3";
                 String securityLevelProperty = "securityLevel";
 
@@ -546,7 +547,7 @@
 
         mPlayer.registerPlayerCallback(mExecutor, new MediaPlayer.PlayerCallback() {
             @Override
-            public void onDrmInfo(MediaPlayer mp, MediaItem2 item, DrmInfo drmInfo) {
+            public void onDrmInfo(MediaPlayer mp, MediaItem item, DrmInfo drmInfo) {
                 Log.v(TAG, "preparePlayerAndDrm_V3: onDrmInfo" + drmInfo);
 
                 // DRM preperation
@@ -645,7 +646,7 @@
 
                 Log.v(TAG, "playLoadedVideo: setMediaItem()");
                 mPlayer.setMediaItem(
-                        new UriMediaItem2.Builder(mContext, file).build());
+                        new UriMediaItem.Builder(mContext, file).build());
 
                 Log.v(TAG, "playLoadedVideo: prepare()");
                 ListenableFuture<PlayerResult> future = mPlayer.prepare();
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java b/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java
index e8a3826..4c1b365 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java
@@ -16,10 +16,10 @@
 
 package androidx.media2;
 
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_SKIPPED;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_SKIPPED;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_SUCCESS;
 
 import static junit.framework.TestCase.assertFalse;
 
@@ -35,7 +35,7 @@
 import android.os.PersistableBundle;
 
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.SessionPlayer2.PlayerResult;
+import androidx.media2.SessionPlayer.PlayerResult;
 import androidx.media2.TestUtils.Monitor;
 import androidx.media2.test.R;
 import androidx.test.filters.LargeTest;
@@ -104,9 +104,9 @@
         mPlayer.setAudioAttributes(attributes);
 
         final TestUtils.Monitor playing = new TestUtils.Monitor();
-        mPlayer.registerPlayerCallback(mExecutor, new SessionPlayer2.PlayerCallback() {
+        mPlayer.registerPlayerCallback(mExecutor, new SessionPlayer.PlayerCallback() {
             @Override
-            public void onPlayerStateChanged(SessionPlayer2 player, int playerState) {
+            public void onPlayerStateChanged(SessionPlayer player, int playerState) {
                 playing.signal();
             }
         });
@@ -126,7 +126,7 @@
         final int seekDuration = 100;
 
         AssetFileDescriptor afd = mResources.openRawResourceFd(resid);
-        mPlayer.setMediaItem(new FileMediaItem2.Builder(
+        mPlayer.setMediaItem(new FileMediaItem.Builder(
                 afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength())
                 .build());
         AudioAttributesCompat attributes = new AudioAttributesCompat.Builder()
@@ -180,24 +180,24 @@
         final TestUtils.Monitor onVideoRenderingStartCalled = new TestUtils.Monitor();
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onVideoSizeChanged(MediaPlayer mp, MediaItem2 dsd, int w, int h) {
-                if (w == 0 && h == 0) {
+            public void onVideoSizeChanged(MediaPlayer mp, MediaItem dsd, VideoSize size) {
+                if (size.getWidth() == 0 && size.getHeight() == 0) {
                     // A size of 0x0 can be sent initially one time when using NuPlayer.
                     assertFalse(onVideoSizeChangedCalled.isSignalled());
                     return;
                 }
                 onVideoSizeChangedCalled.signal();
-                assertEquals(width, w);
-                assertEquals(height, h);
+                assertEquals(width, size.getWidth());
+                assertEquals(height, size.getHeight());
             }
 
             @Override
-            public void onError(MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+            public void onError(MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 fail("Media player had error " + what + " playing video");
             }
 
             @Override
-            public void onInfo(MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+            public void onInfo(MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                     onVideoRenderingStartCalled.signal();
                 }
@@ -322,7 +322,7 @@
             int privState = mPlayer.getPlayerState();
 
             future = mPlayer.setPlaybackParams(
-                    new PlaybackParams2.Builder().setSpeed(playbackRate).build());
+                    new PlaybackParams.Builder().setSpeed(playbackRate).build());
             assertEquals(MediaPlayer2.CALL_STATUS_NO_ERROR, future.get().getResultCode());
             assertTrue("setPlaybackParams() should not change player state. "
                             + mPlayer.getPlayerState(), mPlayer.getPlayerState() == privState);
@@ -331,7 +331,7 @@
             assertEquals(MediaPlayer2.CALL_STATUS_NO_ERROR, future.get().getResultCode());
             Thread.sleep(playTime);
 
-            PlaybackParams2 pbp = mPlayer.getPlaybackParams();
+            PlaybackParams pbp = mPlayer.getPlaybackParams();
             assertEquals(playbackRate, pbp.getSpeed(), FLOAT_TOLERANCE);
             assertTrue("The player should still be playing",
                     mPlayer.getPlayerState() == MediaPlayer.PLAYER_STATE_PLAYING);
@@ -439,10 +439,10 @@
         assertEquals(MediaPlayer2.CALL_STATUS_NO_ERROR, future.get().getResultCode());
 
         mPlayer.play();
-        mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(playbackRate).build());
+        mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(playbackRate).build());
         Thread.sleep(SLEEP_TIME);  // let player get into stable state.
         long nt1 = System.nanoTime();
-        MediaTimestamp2 ts1 = mPlayer.getTimestamp();
+        MediaTimestamp ts1 = mPlayer.getTimestamp();
         long nt2 = System.nanoTime();
         assertTrue("Media player should return a valid time stamp", ts1 != null);
         assertEquals("MediaPlayer2 had error in clockRate " + ts1.getMediaClockRate(),
@@ -465,7 +465,7 @@
         ts1 = mPlayer.getTimestamp();
         assertTrue("Media player should return a valid time stamp", ts1 != null);
         Thread.sleep(playTime);
-        MediaTimestamp2 ts2 = mPlayer.getTimestamp();
+        MediaTimestamp ts2 = mPlayer.getTimestamp();
         assertTrue("Media player should return a valid time stamp", ts2 != null);
         assertTrue("The clockRate should not be changed.",
                 ts1.getMediaClockRate() == ts2.getMediaClockRate());
@@ -522,14 +522,14 @@
 
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onInfo(MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+            public void onInfo(MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_METADATA_UPDATE) {
                     mOnInfoCalled.signal();
                 }
             }
 
             @Override
-            public void onSubtitleData(MediaPlayer mp, MediaItem2 dsd, SubtitleData2 data) {
+            public void onSubtitleData(MediaPlayer mp, MediaItem dsd, SubtitleData data) {
                 if (data != null && data.getData() != null) {
                     mOnSubtitleDataCalled.signal();
                 }
@@ -577,7 +577,7 @@
 
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onInfo(MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+            public void onInfo(MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_METADATA_UPDATE) {
                     mOnInfoCalled.signal();
                 }
@@ -585,7 +585,7 @@
 
             @Override
             public void onSubtitleData(
-                    MediaPlayer mp, MediaItem2 dsd, SubtitleData2 data) {
+                    MediaPlayer mp, MediaItem dsd, SubtitleData data) {
                 if (data != null && data.getData() != null) {
                     mOnSubtitleDataCalled.signal();
                 }
@@ -626,7 +626,7 @@
 
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onInfo(MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+            public void onInfo(MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_METADATA_UPDATE) {
                     mOnInfoCalled.signal();
                 }
@@ -660,11 +660,11 @@
             return; // skip
         }
 
-        final BlockingDeque<MediaTimestamp2> timestamps = new LinkedBlockingDeque<>();
+        final BlockingDeque<MediaTimestamp> timestamps = new LinkedBlockingDeque<>();
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
             public void onMediaTimeDiscontinuity(
-                    MediaPlayer mp, MediaItem2 dsd, MediaTimestamp2 timestamp) {
+                    MediaPlayer mp, MediaItem dsd, MediaTimestamp timestamp) {
                 timestamps.add(timestamp);
                 mOnMediaTimeDiscontinuityCalled.signal();
             }
@@ -689,7 +689,7 @@
 
         // Timestamp needs to be updated when playback rate changes.
         mOnMediaTimeDiscontinuityCalled.reset();
-        mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(0.5f).build());
+        mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(0.5f).build());
         mOnMediaTimeDiscontinuityCalled.waitForSignal();
         do {
             assertTrue(mOnMediaTimeDiscontinuityCalled.waitForSignal(1000));
@@ -712,11 +712,11 @@
         final int resid = R.raw.video_480x360_mp4_h264_1350kbps_30fps_aac_stereo_192kbps_44100hz;
         final int duration = 10000;
 
-        TestDataSourceCallback2 dataSource =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
+        TestDataSourceCallback dataSource =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
         // Test returning -1 from getSize() to indicate unknown size.
         dataSource.returnFromGetSize(-1);
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
         mPlayer.prepare();
         mPlayer.play().get();
         assertTrue(mPlayer.getPlayerState() == MediaPlayer.PLAYER_STATE_PLAYING);
@@ -731,7 +731,7 @@
 
         // Test reset.
         mPlayer.reset();
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         mPlayer.prepare();
         mPlayer.play().get();
@@ -759,9 +759,9 @@
     @Test
     @LargeTest
     public void testMedia2DataSourceIsClosedOnReset() throws Exception {
-        TestDataSourceCallback2 dataSource = new TestDataSourceCallback2(new byte[0]);
+        TestDataSourceCallback dataSource = new TestDataSourceCallback(new byte[0]);
         assertEquals(RESULT_CODE_SUCCESS,
-                mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build()).get()
+                mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build()).get()
                         .getResultCode());
         mPlayer.reset();
         assertTrue(dataSource.isClosed());
@@ -775,15 +775,15 @@
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
             public void onError(
-                    MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+                    MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 mOnErrorCalled.signal();
             }
         };
         mPlayer.registerPlayerCallback(mExecutor, callback);
 
-        TestDataSourceCallback2 dataSource =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        TestDataSourceCallback dataSource =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         mPlayer.prepare().get();
 
@@ -798,14 +798,14 @@
     public void testPlaybackFailsIfMedia2DataSourceReturnsAnError() throws Exception {
         final int resid = R.raw.video_480x360_mp4_h264_1350kbps_30fps_aac_stereo_192kbps_44100hz;
 
-        TestDataSourceCallback2 dataSource =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        TestDataSourceCallback dataSource =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
             public void onError(
-                    MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+                    MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 mOnErrorCalled.signal();
             }
         };
@@ -826,7 +826,7 @@
         final long start1 = 6000;
         final long end1 = 7000;
         AssetFileDescriptor afd1 = mResources.openRawResourceFd(resid1);
-        MediaItem2 dsd1 = new FileMediaItem2.Builder(
+        MediaItem dsd1 = new FileMediaItem.Builder(
                 afd1.getFileDescriptor(), afd1.getStartOffset(), afd1.getLength())
                 .setStartPosition(start1)
                 .setEndPosition(end1)
@@ -836,7 +836,7 @@
         final long start2 = 3000;
         final long end2 = 4000;
         AssetFileDescriptor afd2 = mResources.openRawResourceFd(resid2);
-        MediaItem2 dsd2 = new FileMediaItem2.Builder(
+        MediaItem dsd2 = new FileMediaItem.Builder(
                 afd2.getFileDescriptor(), afd2.getStartOffset(), afd2.getLength())
                 .setStartPosition(start2)
                 .setEndPosition(end2)
@@ -848,7 +848,7 @@
 
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onInfo(MediaPlayer2 mp, MediaItem2 dsd, int what, int extra) {
+            public void onInfo(MediaPlayer2 mp, MediaItem dsd, int what, int extra) {
                 if (what == MediaPlayer2.MEDIA_INFO_PREPARED) {
                     mOnPrepareCalled.signal();
                 } else if (what == MediaPlayer2.MEDIA_INFO_DATA_SOURCE_END) {
@@ -858,7 +858,7 @@
 
             @Override
             public void onCallCompleted(
-                    MediaPlayer2 mp, MediaItem2 dsd, int what, int status) {
+                    MediaPlayer2 mp, MediaItem dsd, int what, int status) {
                 if (what == MediaPlayer2.CALL_COMPLETED_PLAY) {
                     assertTrue(status == MediaPlayer2.CALL_STATUS_NO_ERROR);
                     mOnPlayCalled.signal();
@@ -873,7 +873,7 @@
 
         mOnPlayCalled.reset();
         mOnCompletionCalled.reset();
-        mPlayer.setPlaybackParams(new PlaybackParams2.Builder().setSpeed(2.0f).build());
+        mPlayer.setPlaybackParams(new PlaybackParams.Builder().setSpeed(2.0f).build());
         mPlayer.play();
 
         mOnPlayCalled.waitForSignal();
@@ -895,8 +895,8 @@
         }
         mPlayer.prepare().get();
 
-        PlaybackParams2 playbackParams = mPlayer.getPlaybackParams();
-        assertEquals(PlaybackParams2.AUDIO_FALLBACK_MODE_DEFAULT,
+        PlaybackParams playbackParams = mPlayer.getPlaybackParams();
+        assertEquals(PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT,
                 (int) playbackParams.getAudioFallbackMode());
         assertEquals(1.0f, playbackParams.getPitch(), 0.001f);
         assertEquals(1.0f, playbackParams.getSpeed(), 0.001f);
@@ -908,10 +908,10 @@
     @SmallTest
     public void testSkipUnnecessarySeek() throws Exception {
         final int resid = R.raw.video_480x360_mp4_h264_1350kbps_30fps_aac_stereo_192kbps_44100hz;
-        final TestDataSourceCallback2 source =
-                TestDataSourceCallback2.fromAssetFd(mResources.openRawResourceFd(resid));
+        final TestDataSourceCallback source =
+                TestDataSourceCallback.fromAssetFd(mResources.openRawResourceFd(resid));
         final Monitor readAllowed = new Monitor();
-        DataSourceCallback2 dataSource = new DataSourceCallback2() {
+        DataSourceCallback dataSource = new DataSourceCallback() {
             @Override
             public int readAt(long position, byte[] buffer, int offset, int size)
                     throws IOException {
@@ -938,12 +938,12 @@
 
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onError(MediaPlayer mp, MediaItem2 dsd, int what, int extra) {
+            public void onError(MediaPlayer mp, MediaItem dsd, int what, int extra) {
                 mOnErrorCalled.signal();
             }
         };
         mPlayer.registerPlayerCallback(mExecutor, callback);
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         mOnErrorCalled.reset();
 
@@ -1019,26 +1019,26 @@
 
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onPlayerStateChanged(SessionPlayer2 player, int state) {
+            public void onPlayerStateChanged(SessionPlayer player, int state) {
                 playerState.set(state);
                 onPlayerStateChangedCalled.signal();
             }
 
             @Override
-            public void onBufferingStateChanged(SessionPlayer2 player, MediaItem2 item,
+            public void onBufferingStateChanged(SessionPlayer player, MediaItem item,
                     int buffState) {
                 bufferingState.set(buffState);
                 onBufferingStateChangedCalled.signal();
             }
 
             @Override
-            public void onPlaybackSpeedChanged(SessionPlayer2 player, float speed) {
+            public void onPlaybackSpeedChanged(SessionPlayer player, float speed) {
                 playbackSpeed.set(speed);
                 onPlaybackSpeedChanged.signal();
             }
 
             @Override
-            public void onSeekCompleted(SessionPlayer2 player, long position) {
+            public void onSeekCompleted(SessionPlayer player, long position) {
                 onSeekCompleteCalled.signal();
             }
         };
@@ -1113,8 +1113,8 @@
     public void testCancelPendingCommands() throws Exception {
         final Monitor readRequested = new Monitor();
         final Monitor readAllowed = new Monitor();
-        DataSourceCallback2 dataSource = new DataSourceCallback2() {
-            TestDataSourceCallback2 mTestSource = TestDataSourceCallback2.fromAssetFd(
+        DataSourceCallback dataSource = new DataSourceCallback() {
+            TestDataSourceCallback mTestSource = TestDataSourceCallback.fromAssetFd(
                     mResources.openRawResourceFd(R.raw.testmp3));
             @Override
             public int readAt(long position, byte[] buffer, int offset, int size)
@@ -1140,7 +1140,7 @@
         };
         MediaPlayer.PlayerCallback ecb = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onError(MediaPlayer mp, MediaItem2 item, int what, int extra) {
+            public void onError(MediaPlayer mp, MediaItem item, int what, int extra) {
                 mOnErrorCalled.signal();
             }
         };
@@ -1148,7 +1148,7 @@
 
         mOnErrorCalled.reset();
 
-        mPlayer.setMediaItem(new CallbackMediaItem2.Builder(dataSource).build());
+        mPlayer.setMediaItem(new CallbackMediaItem.Builder(dataSource).build());
 
         // prepare() will be pending until readAllowed is signaled.
         mPlayer.prepare();
@@ -1177,7 +1177,7 @@
         final TestUtils.Monitor onShuffleModeChangedMonitor = new TestUtils.Monitor();
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onShuffleModeChanged(SessionPlayer2 player, int shuffleMode) {
+            public void onShuffleModeChanged(SessionPlayer player, int shuffleMode) {
                 mPlayerCbArg1 = player;
                 mPlayerCbArg2 = new Integer(shuffleMode);
                 onShuffleModeChangedMonitor.signal();
@@ -1188,34 +1188,34 @@
         int shuffleMode = mPlayer.getShuffleMode();
         ListenableFuture<PlayerResult> future;
         PlayerResult result;
-        if (shuffleMode != SessionPlayer2.SHUFFLE_MODE_NONE) {
+        if (shuffleMode != SessionPlayer.SHUFFLE_MODE_NONE) {
             onShuffleModeChangedMonitor.reset();
-            future = mPlayer.setShuffleMode(SessionPlayer2.SHUFFLE_MODE_NONE);
+            future = mPlayer.setShuffleMode(SessionPlayer.SHUFFLE_MODE_NONE);
             assertTrue(onShuffleModeChangedMonitor.waitForSignal(WAIT_TIME_MS));
             result = future.get();
             assertEquals(mPlayer, mPlayerCbArg1);
             assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-            assertEquals(SessionPlayer2.SHUFFLE_MODE_NONE, ((Integer) mPlayerCbArg2).intValue());
-            assertEquals(SessionPlayer2.SHUFFLE_MODE_NONE, mPlayer.getShuffleMode());
+            assertEquals(SessionPlayer.SHUFFLE_MODE_NONE, ((Integer) mPlayerCbArg2).intValue());
+            assertEquals(SessionPlayer.SHUFFLE_MODE_NONE, mPlayer.getShuffleMode());
         }
 
         onShuffleModeChangedMonitor.reset();
-        future = mPlayer.setShuffleMode(SessionPlayer2.SHUFFLE_MODE_ALL);
+        future = mPlayer.setShuffleMode(SessionPlayer.SHUFFLE_MODE_ALL);
         assertTrue(onShuffleModeChangedMonitor.waitForSignal(WAIT_TIME_MS));
         result = future.get();
         assertEquals(mPlayer, mPlayerCbArg1);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        assertEquals(SessionPlayer2.SHUFFLE_MODE_ALL, ((Integer) mPlayerCbArg2).intValue());
-        assertEquals(SessionPlayer2.SHUFFLE_MODE_ALL, mPlayer.getShuffleMode());
+        assertEquals(SessionPlayer.SHUFFLE_MODE_ALL, ((Integer) mPlayerCbArg2).intValue());
+        assertEquals(SessionPlayer.SHUFFLE_MODE_ALL, mPlayer.getShuffleMode());
 
         onShuffleModeChangedMonitor.reset();
-        future = mPlayer.setShuffleMode(SessionPlayer2.SHUFFLE_MODE_GROUP);
+        future = mPlayer.setShuffleMode(SessionPlayer.SHUFFLE_MODE_GROUP);
         assertTrue(onShuffleModeChangedMonitor.waitForSignal(WAIT_TIME_MS));
         result = future.get();
         assertEquals(mPlayer, mPlayerCbArg1);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        assertEquals(SessionPlayer2.SHUFFLE_MODE_GROUP, ((Integer) mPlayerCbArg2).intValue());
-        assertEquals(SessionPlayer2.SHUFFLE_MODE_GROUP, mPlayer.getShuffleMode());
+        assertEquals(SessionPlayer.SHUFFLE_MODE_GROUP, ((Integer) mPlayerCbArg2).intValue());
+        assertEquals(SessionPlayer.SHUFFLE_MODE_GROUP, mPlayer.getShuffleMode());
 
         // INVALID_SHUFFLE_MODE will not change the shuffle mode.
         onShuffleModeChangedMonitor.reset();
@@ -1224,7 +1224,7 @@
         result = future.get();
         assertEquals(mPlayer, mPlayerCbArg1);
         assertEquals(RESULT_CODE_BAD_VALUE, result.getResultCode());
-        assertEquals(SessionPlayer2.SHUFFLE_MODE_GROUP, mPlayer.getShuffleMode());
+        assertEquals(SessionPlayer.SHUFFLE_MODE_GROUP, mPlayer.getShuffleMode());
     }
 
     @Test
@@ -1233,7 +1233,7 @@
         final TestUtils.Monitor onRepeatModeChangedMonitor = new TestUtils.Monitor();
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onRepeatModeChanged(SessionPlayer2 player, int repeatMode) {
+            public void onRepeatModeChanged(SessionPlayer player, int repeatMode) {
                 mPlayerCbArg1 = player;
                 mPlayerCbArg2 = new Integer(repeatMode);
                 onRepeatModeChangedMonitor.signal();
@@ -1244,34 +1244,34 @@
         int repeatMode = mPlayer.getRepeatMode();
         ListenableFuture<PlayerResult> future;
         PlayerResult result;
-        if (repeatMode != SessionPlayer2.REPEAT_MODE_NONE) {
+        if (repeatMode != SessionPlayer.REPEAT_MODE_NONE) {
             onRepeatModeChangedMonitor.reset();
-            future = mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_NONE);
+            future = mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_NONE);
             assertTrue(onRepeatModeChangedMonitor.waitForSignal(WAIT_TIME_MS));
             result = future.get();
             assertEquals(mPlayer, mPlayerCbArg1);
             assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-            assertEquals(SessionPlayer2.REPEAT_MODE_NONE, ((Integer) mPlayerCbArg2).intValue());
-            assertEquals(SessionPlayer2.REPEAT_MODE_NONE, mPlayer.getRepeatMode());
+            assertEquals(SessionPlayer.REPEAT_MODE_NONE, ((Integer) mPlayerCbArg2).intValue());
+            assertEquals(SessionPlayer.REPEAT_MODE_NONE, mPlayer.getRepeatMode());
         }
 
         onRepeatModeChangedMonitor.reset();
-        future = mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_ALL);
+        future = mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_ALL);
         assertTrue(onRepeatModeChangedMonitor.waitForSignal(WAIT_TIME_MS));
         result = future.get();
         assertEquals(mPlayer, mPlayerCbArg1);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        assertEquals(SessionPlayer2.REPEAT_MODE_ALL, ((Integer) mPlayerCbArg2).intValue());
-        assertEquals(SessionPlayer2.REPEAT_MODE_ALL, mPlayer.getRepeatMode());
+        assertEquals(SessionPlayer.REPEAT_MODE_ALL, ((Integer) mPlayerCbArg2).intValue());
+        assertEquals(SessionPlayer.REPEAT_MODE_ALL, mPlayer.getRepeatMode());
 
         onRepeatModeChangedMonitor.reset();
-        future = mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_GROUP);
+        future = mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_GROUP);
         assertTrue(onRepeatModeChangedMonitor.waitForSignal(WAIT_TIME_MS));
         result = future.get();
         assertEquals(mPlayer, mPlayerCbArg1);
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        assertEquals(SessionPlayer2.REPEAT_MODE_GROUP, ((Integer) mPlayerCbArg2).intValue());
-        assertEquals(SessionPlayer2.REPEAT_MODE_GROUP, mPlayer.getRepeatMode());
+        assertEquals(SessionPlayer.REPEAT_MODE_GROUP, ((Integer) mPlayerCbArg2).intValue());
+        assertEquals(SessionPlayer.REPEAT_MODE_GROUP, mPlayer.getRepeatMode());
 
         // INVALID_REPEAT_MODE will not change the repeat mode.
         onRepeatModeChangedMonitor.reset();
@@ -1280,13 +1280,13 @@
         result = future.get();
         assertEquals(mPlayer, mPlayerCbArg1);
         assertEquals(RESULT_CODE_BAD_VALUE, result.getResultCode());
-        assertEquals(SessionPlayer2.REPEAT_MODE_GROUP, mPlayer.getRepeatMode());
+        assertEquals(SessionPlayer.REPEAT_MODE_GROUP, mPlayer.getRepeatMode());
     }
 
     @Test
     @SmallTest
     public void testSetPlaylist() throws Exception {
-        List<MediaItem2> playlist = createPlaylist(10);
+        List<MediaItem> playlist = createPlaylist(10);
         try {
             mPlayer.setPlaylist(null, null);
             fail();
@@ -1294,7 +1294,7 @@
             // pass-through
         }
         try {
-            List<MediaItem2> list = new ArrayList<>();
+            List<MediaItem> list = new ArrayList<>();
             list.add(null);
             mPlayer.setPlaylist(list, null);
             fail();
@@ -1312,10 +1312,10 @@
     @SmallTest
     public void testSkipToPlaylistItems() throws Exception {
         int listSize = 5;
-        List<MediaItem2> playlist = createPlaylist(listSize);
+        List<MediaItem> playlist = createPlaylist(listSize);
         PlayerResult result = mPlayer.setPlaylist(playlist, null).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_NONE).get();
+        mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_NONE).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
         // Test skipToPlaylistItem
@@ -1330,10 +1330,10 @@
     @SmallTest
     public void testSkipToNextItems() throws Exception {
         int listSize = 5;
-        List<MediaItem2> playlist = createPlaylist(listSize);
+        List<MediaItem> playlist = createPlaylist(listSize);
         PlayerResult result = mPlayer.setPlaylist(playlist, null).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_NONE).get();
+        mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_NONE).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
         // Test skipToNextPlaylistItem
@@ -1352,10 +1352,10 @@
     @SmallTest
     public void testSkipToPreviousItems() throws Exception {
         int listSize = 5;
-        List<MediaItem2> playlist = createPlaylist(listSize);
+        List<MediaItem> playlist = createPlaylist(listSize);
         PlayerResult result = mPlayer.setPlaylist(playlist, null).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_NONE).get();
+        mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_NONE).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
         result = mPlayer.skipToPlaylistItem(playlist.get(listSize - 1)).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -1376,10 +1376,10 @@
     @SmallTest
     public void testSkipToNextPreviousItemsWithRepeatMode() throws Exception {
         int listSize = 5;
-        List<MediaItem2> playlist = createPlaylist(listSize);
+        List<MediaItem> playlist = createPlaylist(listSize);
         PlayerResult result = mPlayer.setPlaylist(playlist, null).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
-        result = mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_ALL).get();
+        result = mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_ALL).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
 
         result = mPlayer.skipToPreviousPlaylistItem().get();
@@ -1395,7 +1395,7 @@
     @SmallTest
     public void testPlaylistAfterSkipToNextItem() throws Exception {
         int listSize = 2;
-        List<MediaItem2> playlist = createPlaylist(listSize);
+        List<MediaItem> playlist = createPlaylist(listSize);
         PlayerResult result = mPlayer.setPlaylist(playlist, null).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
         assertEquals(playlist.get(0), mPlayer.getCurrentMediaItem());
@@ -1409,7 +1409,7 @@
         assertEquals(RESULT_CODE_INVALID_STATE, result.getResultCode());
         assertEquals(playlist.get(1), mPlayer.getCurrentMediaItem());
 
-        result = mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_ALL).get();
+        result = mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_ALL).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
         result = mPlayer.skipToNextPlaylistItem().get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -1420,7 +1420,7 @@
     @SmallTest
     public void testPlaylistAfterSkipToPreviousItem() throws Exception {
         int listSize = 2;
-        List<MediaItem2> playlist = createPlaylist(listSize);
+        List<MediaItem> playlist = createPlaylist(listSize);
         PlayerResult result = mPlayer.setPlaylist(playlist, null).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
         assertEquals(playlist.get(0), mPlayer.getCurrentMediaItem());
@@ -1430,7 +1430,7 @@
         assertEquals(RESULT_CODE_INVALID_STATE, result.getResultCode());
         assertEquals(playlist.get(0), mPlayer.getCurrentMediaItem());
 
-        result = mPlayer.setRepeatMode(SessionPlayer2.REPEAT_MODE_ALL).get();
+        result = mPlayer.setRepeatMode(SessionPlayer.REPEAT_MODE_ALL).get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
         result = mPlayer.skipToPreviousPlaylistItem().get();
         assertEquals(RESULT_CODE_SUCCESS, result.getResultCode());
@@ -1440,12 +1440,12 @@
     @Test
     @SmallTest
     public void testCurrentMediaItemChangedCalledAfterSetMediaItem() throws Exception {
-        MediaItem2 item = createMediaItem(100);
+        MediaItem item = createMediaItem(100);
 
         final TestUtils.Monitor onCurrentMediaItemChangedMonitor = new TestUtils.Monitor();
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onCurrentMediaItemChanged(SessionPlayer2 player, MediaItem2 item) {
+            public void onCurrentMediaItemChanged(SessionPlayer player, MediaItem item) {
                 onCurrentMediaItemChangedMonitor.signal();
             }
         };
@@ -1460,12 +1460,12 @@
     @SmallTest
     public void testCurrentMediaItemChangedCalledAfterSetPlayList() throws Exception {
         int listSize = 2;
-        List<MediaItem2> playlist = createPlaylist(listSize);
+        List<MediaItem> playlist = createPlaylist(listSize);
 
         final TestUtils.Monitor onCurrentMediaItemChangedMonitor = new TestUtils.Monitor();
         MediaPlayer.PlayerCallback callback = new MediaPlayer.PlayerCallback() {
             @Override
-            public void onCurrentMediaItemChanged(SessionPlayer2 player, MediaItem2 item) {
+            public void onCurrentMediaItemChanged(SessionPlayer player, MediaItem item) {
                 onCurrentMediaItemChangedMonitor.signal();
             }
         };
@@ -1476,14 +1476,14 @@
         assertTrue(onCurrentMediaItemChangedMonitor.waitForSignal(WAIT_TIME_MS));
     }
 
-    private MediaItem2 createMediaItem(int key) throws Exception {
+    private MediaItem createMediaItem(int key) throws Exception {
         AssetFileDescriptor afd = mResources.openRawResourceFd(R.raw.testvideo);
-        return new FileMediaItem2.Builder(
+        return new FileMediaItem.Builder(
                 afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()).build();
     }
 
-    private List<MediaItem2> createPlaylist(int size) throws Exception {
-        List<MediaItem2> items = new ArrayList<>();
+    private List<MediaItem> createPlaylist(int size) throws Exception {
+        List<MediaItem> items = new ArrayList<>();
         for (int i = 0; i < size; ++i) {
             items.add(createMediaItem(i));
         }
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayerTestBase.java b/media2/src/androidTest/java/androidx/media2/MediaPlayerTestBase.java
index cef0dedf..5c87242 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayerTestBase.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayerTestBase.java
@@ -108,7 +108,7 @@
     boolean loadResource(int resid) throws Exception {
         AssetFileDescriptor afd = mResources.openRawResourceFd(resid);
         try {
-            mPlayer.setMediaItem(new FileMediaItem2.Builder(
+            mPlayer.setMediaItem(new FileMediaItem.Builder(
                     afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()).build());
         } finally {
             // Close descriptor later when test finishes since setMediaItem is async operation.
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayer_AudioFocusTest.java b/media2/src/androidTest/java/androidx/media2/MediaPlayer_AudioFocusTest.java
index 5501575..209f2ad 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayer_AudioFocusTest.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayer_AudioFocusTest.java
@@ -102,7 +102,7 @@
                 @Override
                 public void execute(Runnable runnable) {
                     TestUtils.SyncHandler handler;
-                    synchronized (MediaSession2TestBase.class) {
+                    synchronized (MediaSessionTestBase.class) {
                         handler = sHandler;
                     }
                     if (handler != null) {
@@ -168,7 +168,7 @@
     private void initPlayer(AudioAttributesCompat attr) throws Exception {
         loadResource(R.raw.loudsoftogg);
         mPlayer.setAudioAttributes(attr);
-        assertEquals(SessionPlayer2.PlayerResult.RESULT_CODE_SUCCESS,
+        assertEquals(SessionPlayer.PlayerResult.RESULT_CODE_SUCCESS,
                 mPlayer.prepare().get(WAIT_TIME_MS, TimeUnit.MILLISECONDS).getResultCode());
     }
 
@@ -178,14 +178,14 @@
         final CountDownLatch latchForPaused = new CountDownLatch(1);
         initPlayer(attr);
 
-        mPlayer.registerPlayerCallback(sHandlerExecutor, new SessionPlayer2.PlayerCallback() {
+        mPlayer.registerPlayerCallback(sHandlerExecutor, new SessionPlayer.PlayerCallback() {
             @Override
-            public void onPlayerStateChanged(SessionPlayer2 mPlayer, int playerState) {
+            public void onPlayerStateChanged(SessionPlayer mPlayer, int playerState) {
                     switch (playerState) {
-                        case SessionPlayer2.PLAYER_STATE_PLAYING:
+                        case SessionPlayer.PLAYER_STATE_PLAYING:
                             latchForPlaying.countDown();
                             break;
-                        case SessionPlayer2.PLAYER_STATE_PAUSED:
+                        case SessionPlayer.PLAYER_STATE_PAUSED:
                             latchForPaused.countDown();
                             break;
                     }
@@ -231,10 +231,10 @@
         }
 
         initPlayer(attr);
-        mPlayer.registerPlayerCallback(sHandlerExecutor, new SessionPlayer2.PlayerCallback() {
+        mPlayer.registerPlayerCallback(sHandlerExecutor, new SessionPlayer.PlayerCallback() {
             @Override
-            public void onPlayerStateChanged(SessionPlayer2 player, int playerState) {
-                if (playerState == SessionPlayer2.PLAYER_STATE_PLAYING) {
+            public void onPlayerStateChanged(SessionPlayer player, int playerState) {
+                if (playerState == SessionPlayer.PLAYER_STATE_PLAYING) {
                     latchForPlaying.countDown();
                 }
             }
diff --git a/media2/src/androidTest/java/androidx/media2/MediaSessionManager_MediaSession2Test.java b/media2/src/androidTest/java/androidx/media2/MediaSessionManager_MediaSessionTest.java
similarity index 73%
rename from media2/src/androidTest/java/androidx/media2/MediaSessionManager_MediaSession2Test.java
rename to media2/src/androidTest/java/androidx/media2/MediaSessionManager_MediaSessionTest.java
index d586258..420aabe 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaSessionManager_MediaSession2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaSessionManager_MediaSessionTest.java
@@ -19,8 +19,8 @@
 import android.content.Context;
 import android.media.session.MediaSessionManager;
 
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionCallback;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
@@ -32,16 +32,16 @@
 
 
 /**
- * Tests {@link MediaSessionManager} with {@link MediaSession2} specific APIs.
+ * Tests {@link MediaSessionManager} with {@link MediaSession} specific APIs.
  */
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 @Ignore
-public class MediaSessionManager_MediaSession2Test extends MediaSession2TestBase {
-    private static final String TAG = "MediaSessionManager_MediaSession2Test";
+public class MediaSessionManager_MediaSessionTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaSessionManager_MediaSessionTest";
 
     private MediaSessionManager mManager;
-    private MediaSession2 mSession;
+    private MediaSession mSession;
 
     @Before
     @Override
@@ -49,10 +49,10 @@
         super.setUp();
         mManager = (MediaSessionManager) mContext.getSystemService(Context.MEDIA_SESSION_SERVICE);
 
-        // Specify TAG here so {@link MediaSession2.getInstance()} doesn't complaint about
-        // per test thread differs across the {@link MediaSession2} with the same TAG.
+        // Specify TAG here so {@link MediaSession.getInstance()} doesn't complaint about
+        // per test thread differs across the {@link MediaSession} with the same TAG.
         final MockPlayer player = new MockPlayer(1);
-        mSession = new MediaSession2.Builder(mContext, player)
+        mSession = new MediaSession.Builder(mContext, player)
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() { })
                 .setId(TAG)
                 .build();
@@ -69,16 +69,16 @@
     // TODO(jaewan): Make this host-side test to see per-user behavior.
     @Ignore
     @Test
-    public void testGetMediaSession2Tokens_hasMediaController() throws InterruptedException {
+    public void testGetMediaSessionTokens_hasMediaController() throws InterruptedException {
         prepareLooper();
         final MockPlayer player = (MockPlayer) mSession.getPlayer();
-        player.notifyPlayerStateChanged(SessionPlayer2.PLAYER_STATE_IDLE);
+        player.notifyPlayerStateChanged(SessionPlayer.PLAYER_STATE_IDLE);
 
-        MediaController2 controller = null;
-//        List<SessionToken2> tokens = mManager.getActiveSessionTokens();
+        MediaController controller = null;
+//        List<SessionToken> tokens = mManager.getActiveSessionTokens();
 //        assertNotNull(tokens);
 //        for (int i = 0; i < tokens.size(); i++) {
-//            SessionToken2 token = tokens.get(i);
+//            SessionToken token = tokens.get(i);
 //            if (mContext.getPackageName().equals(token.getPackageName())
 //                    && TAG.equals(token.getSessionId())) {
 //                assertNull(controller);
@@ -88,7 +88,7 @@
 //        assertNotNull(controller);
 //
 //        // Test if the found controller is correct one.
-//        assertEquals(SessionPlayer2.PLAYER_STATE_IDLE, controller.getPlayerState());
+//        assertEquals(SessionPlayer.PLAYER_STATE_IDLE, controller.getPlayerState());
 //        controller.play();
 //
 //        assertTrue(player.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
@@ -104,21 +104,21 @@
     public void testGetSessionTokens_sessionRejected() throws InterruptedException {
         prepareLooper();
         mSession.close();
-        mSession = new MediaSession2.Builder(mContext, new MockPlayer(0))
+        mSession = new MediaSession.Builder(mContext, new MockPlayer(0))
                 .setId(TAG).setSessionCallback(sHandlerExecutor, new SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(
-                            MediaSession2 session, ControllerInfo controller) {
+                    public SessionCommandGroup onConnect(
+                            MediaSession session, ControllerInfo controller) {
                         // Reject all connection request.
                         return null;
                     }
                 }).build();
 
         boolean foundSession = false;
-//        List<SessionToken2> tokens = mManager.getActiveSessionTokens();
+//        List<SessionToken> tokens = mManager.getActiveSessionTokens();
 //        assertNotNull(tokens);
 //        for (int i = 0; i < tokens.size(); i++) {
-//            SessionToken2 token = tokens.get(i);
+//            SessionToken token = tokens.get(i);
 //            if (mContext.getPackageName().equals(token.getPackageName())
 //                    && TAG.equals(token.getSessionId())) {
 //                assertFalse(foundSession);
@@ -129,37 +129,37 @@
     }
 
     @Test
-    public void testGetMediaSession2Tokens_sessionClosed() throws InterruptedException {
+    public void testGetMediaSessionTokens_sessionClosed() throws InterruptedException {
         prepareLooper();
         mSession.close();
 
         // When a session is closed, it should lose binder connection between server immediately.
         // So server will forget the session.
-//        List<SessionToken2> tokens = mManager.getActiveSessionTokens();
+//        List<SessionToken> tokens = mManager.getActiveSessionTokens();
 //        for (int i = 0; i < tokens.size(); i++) {
-//            SessionToken2 token = tokens.get(i);
+//            SessionToken token = tokens.get(i);
 //            assertFalse(mContext.getPackageName().equals(token.getPackageName())
 //                    && TAG.equals(token.getSessionId()));
 //        }
     }
 
     @Test
-    public void testGetMediaSessionService2Token() throws InterruptedException {
+    public void testGetMediaSessionServiceToken() throws InterruptedException {
         prepareLooper();
         boolean foundTestSessionService = false;
         boolean foundTestLibraryService = false;
-//        List<SessionToken2> tokens = mManager.getSessionServiceTokens();
+//        List<SessionToken> tokens = mManager.getSessionServiceTokens();
 //        for (int i = 0; i < tokens.size(); i++) {
-//            SessionToken2 token = tokens.get(i);
+//            SessionToken token = tokens.get(i);
 //            if (mContext.getPackageName().equals(token.getPackageName())
-//                    && MockMediaSessionService2.ID.equals(token.getSessionId())) {
+//                    && MockMediaSessionService.ID.equals(token.getSessionId())) {
 //                assertFalse(foundTestSessionService);
-//                assertEquals(SessionToken2.TYPE_SESSION_SERVICE, token.getType());
+//                assertEquals(SessionToken.TYPE_SESSION_SERVICE, token.getType());
 //                foundTestSessionService = true;
 //            } else if (mContext.getPackageName().equals(token.getPackageName())
-//                    && MockMediaLibraryService2.ID.equals(token.getSessionId())) {
+//                    && MockMediaLibraryService.ID.equals(token.getSessionId())) {
 //                assertFalse(foundTestLibraryService);
-//                assertEquals(SessionToken2.TYPE_LIBRARY_SERVICE, token.getType());
+//                assertEquals(SessionToken.TYPE_LIBRARY_SERVICE, token.getType());
 //                foundTestLibraryService = true;
 //            }
 //        }
@@ -173,9 +173,9 @@
         boolean foundTestSession = false;
         boolean foundTestSessionService = false;
         boolean foundTestLibraryService = false;
-//        List<SessionToken2> tokens = mManager.getAllSessionTokens();
+//        List<SessionToken> tokens = mManager.getAllSessionTokens();
 //        for (int i = 0; i < tokens.size(); i++) {
-//            SessionToken2 token = tokens.get(i);
+//            SessionToken token = tokens.get(i);
 //            if (!mContext.getPackageName().equals(token.getPackageName())) {
 //                continue;
 //            }
@@ -184,14 +184,14 @@
 //                    assertFalse(foundTestSession);
 //                    foundTestSession = true;
 //                    break;
-//                case MockMediaSessionService2.ID:
+//                case MockMediaSessionService.ID:
 //                    assertFalse(foundTestSessionService);
 //                    foundTestSessionService = true;
-//                    assertEquals(SessionToken2.TYPE_SESSION_SERVICE, token.getType());
+//                    assertEquals(SessionToken.TYPE_SESSION_SERVICE, token.getType());
 //                    break;
-//                case MockMediaLibraryService2.ID:
+//                case MockMediaLibraryService.ID:
 //                    assertFalse(foundTestLibraryService);
-//                    assertEquals(SessionToken2.TYPE_LIBRARY_SERVICE, token.getType());
+//                    assertEquals(SessionToken.TYPE_LIBRARY_SERVICE, token.getType());
 //                    foundTestLibraryService = true;
 //                    break;
 //                default:
@@ -210,7 +210,7 @@
 //        mManager.addOnSessionTokensChangedListener(sHandlerExecutor, listener);
 //
 //        listener.reset();
-//        MediaSession2 session1 = new MediaSession2.Builder(mContext)
+//        MediaSession session1 = new MediaSession.Builder(mContext)
 //                .setPlayer(new MockPlayer(0))
 //                .setId(UUID.randomUUID().toString())
 //                .build();
@@ -223,36 +223,36 @@
 //        assertFalse(listener.findToken(session1.getToken()));
 //
 //        listener.reset();
-//        MediaSession2 session2 = new MediaSession2.Builder(mContext)
+//        MediaSession session = new MediaSession.Builder(mContext)
 //                .setPlayer(new MockPlayer(0))
 //                .setId(UUID.randomUUID().toString())
 //                .build();
 //        assertTrue(listener.await());
 //        assertFalse(listener.findToken(session1.getToken()));
-//        assertTrue(listener.findToken(session2.getToken()));
+//        assertTrue(listener.findToken(session.getToken()));
 //
 //        listener.reset();
-//        MediaSession2 session3 = new MediaSession2.Builder(mContext)
+//        MediaSession session3 = new MediaSession.Builder(mContext)
 //                .setPlayer(new MockPlayer(0))
 //                .setId(UUID.randomUUID().toString())
 //                .build();
 //        assertTrue(listener.await());
 //        assertFalse(listener.findToken(session1.getToken()));
-//        assertTrue(listener.findToken(session2.getToken()));
+//        assertTrue(listener.findToken(session.getToken()));
 //        assertTrue(listener.findToken(session3.getToken()));
 //
 //        listener.reset();
-//        session2.close();
+//        session.close();
 //        assertTrue(listener.await());
 //        assertFalse(listener.findToken(session1.getToken()));
-//        assertFalse(listener.findToken(session2.getToken()));
+//        assertFalse(listener.findToken(session.getToken()));
 //        assertTrue(listener.findToken(session3.getToken()));
 //
 //        listener.reset();
 //        session3.close();
 //        assertTrue(listener.await());
 //        assertFalse(listener.findToken(session1.getToken()));
-//        assertFalse(listener.findToken(session2.getToken()));
+//        assertFalse(listener.findToken(session.getToken()));
 //        assertFalse(listener.findToken(session3.getToken()));
 //
 //        mManager.removeOnSessionTokensChangedListener(listener);
@@ -265,7 +265,7 @@
 //        mManager.addOnSessionTokensChangedListener(sHandlerExecutor, listener);
 //
 //        listener.reset();
-//        MediaSession2 session1 = new MediaSession2.Builder(mContext)
+//        MediaSession session1 = new MediaSession.Builder(mContext)
 //                .setPlayer(new MockPlayer(0))
 //                .setId(UUID.randomUUID().toString())
 //                .build();
@@ -278,21 +278,21 @@
 //        assertFalse(listener.await());
 //
 //        listener.reset();
-//        MediaSession2 session2 = new MediaSession2.Builder(mContext)
+//        MediaSession session = new MediaSession.Builder(mContext)
 //                .setPlayer(new MockPlayer(0))
 //                .setId(UUID.randomUUID().toString())
 //                .build();
 //        assertFalse(listener.await());
 //
 //        listener.reset();
-//        MediaSession2 session3 = new MediaSession2.Builder(mContext)
+//        MediaSession session3 = new MediaSession.Builder(mContext)
 //                .setPlayer(new MockPlayer(0))
 //                .setId(UUID.randomUUID().toString())
 //                .build();
 //        assertFalse(listener.await());
 //
 //        listener.reset();
-//        session2.close();
+//        session.close();
 //        assertFalse(listener.await());
 //
 //        listener.reset();
@@ -302,7 +302,7 @@
 
 //    private class TokensChangedListener implements OnSessionTokensChangedListener {
 //        private CountDownLatch mLatch;
-//        private List<SessionToken2> mTokens;
+//        private List<SessionToken> mTokens;
 //
 //        private void reset() {
 //            mLatch = new CountDownLatch(1);
@@ -313,12 +313,12 @@
 //            return mLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
 //        }
 //
-//        private boolean findToken(SessionToken2 token) {
+//        private boolean findToken(SessionToken token) {
 //            return mTokens.contains(token);
 //        }
 //
 //        @Override
-//        public void onSessionTokensChanged(List<SessionToken2> tokens) {
+//        public void onSessionTokensChanged(List<SessionToken> tokens) {
 //            mTokens = tokens;
 //            mLatch.countDown();
 //        }
diff --git a/media2/src/androidTest/java/androidx/media2/MediaSession2Test.java b/media2/src/androidTest/java/androidx/media2/MediaSessionTest.java
similarity index 76%
rename from media2/src/androidTest/java/androidx/media2/MediaSession2Test.java
rename to media2/src/androidTest/java/androidx/media2/MediaSessionTest.java
index e1350d2..35f1144 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaSession2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaSessionTest.java
@@ -20,8 +20,8 @@
 
 import static androidx.media.VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE;
 import static androidx.media.VolumeProviderCompat.VOLUME_CONTROL_FIXED;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -37,14 +37,12 @@
 import android.os.Bundle;
 import android.os.Process;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionCallback;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -63,15 +61,15 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Tests {@link MediaSession2}.
+ * Tests {@link MediaSession}.
  */
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaSession2Test extends MediaSession2TestBase {
-    private static final String TAG = "MediaSession2Test";
+public class MediaSessionTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaSessionTest";
 
-    private MediaSession2 mSession;
+    private MediaSession mSession;
     private MockPlayer mPlayer;
     private ControllerInfo mTestControllerInfo;
 
@@ -81,11 +79,11 @@
         super.setUp();
         mPlayer = new MockPlayer(1);
 
-        mSession = new MediaSession2.Builder(mContext, mPlayer)
+        mSession = new MediaSession.Builder(mContext, mPlayer)
                 .setId(TAG)
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
+                    public SessionCommandGroup onConnect(MediaSession session,
                             ControllerInfo controller) {
                         if (Process.myUid() == controller.getUid()) {
                             return super.onConnect(session, controller);
@@ -108,15 +106,15 @@
     @Test
     public void testBuilder() {
         prepareLooper();
-        MediaSession2.Builder builder;
+        MediaSession.Builder builder;
         try {
-            builder = new MediaSession2.Builder(mContext, null);
+            builder = new MediaSession.Builder(mContext, null);
             fail("null player shouldn't be allowed");
         } catch (IllegalArgumentException e) {
             // expected. pass-through
         }
         try {
-            builder = new MediaSession2.Builder(mContext, mPlayer);
+            builder = new MediaSession.Builder(mContext, mPlayer);
             builder.setId(null);
             fail("null id shouldn't be allowed");
         } catch (IllegalArgumentException e) {
@@ -127,7 +125,7 @@
     @Test
     public void testBuilder_emptyStringAsId() throws Exception {
         prepareLooper();
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setId("").build()) {
             // Using empty string as Id shouldn't crash.
         }
@@ -162,7 +160,7 @@
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onPlaybackInfoChanged(MediaController2 controller, PlaybackInfo info) {
+            public void onPlaybackInfoChanged(MediaController controller, PlaybackInfo info) {
                 Assert.assertEquals(PlaybackInfo.PLAYBACK_TYPE_REMOTE, info.getPlaybackType());
                 assertEquals(attrs, info.getAudioAttributes());
                 assertEquals(volumeControlType, info.getPlaybackType());
@@ -174,7 +172,7 @@
 
         mSession.updatePlayer(player);
 
-        final MediaController2 controller = createController(mSession.getToken(), true, callback);
+        final MediaController controller = createController(mSession.getToken(), true, callback);
         PlaybackInfo info = controller.getPlaybackInfo();
         assertNotNull(info);
         assertEquals(PlaybackInfo.PLAYBACK_TYPE_LOCAL, info.getPlaybackType());
@@ -243,7 +241,7 @@
         prepareLooper();
         final long testDuration = 9999;
         mPlayer.mDuration = testDuration;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PLAYING;
         assertEquals(testDuration, mSession.getPlayer().getDuration());
     }
 
@@ -261,14 +259,14 @@
         prepareLooper();
         final float speed = 1.5f;
         mPlayer.setPlaybackSpeed(speed);
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PLAYING;
         assertEquals(speed, mSession.getPlayer().getPlaybackSpeed(), 0.0f);
     }
 
     @Test
     public void testGetCurrentMediaItem() {
         prepareLooper();
-        MediaItem2 item = TestUtils.createMediaItemWithMetadata();
+        MediaItem item = TestUtils.createMediaItemWithMetadata();
         mPlayer.mCurrentMediaItem = item;
         assertEquals(item, mSession.getPlayer().getCurrentMediaItem());
     }
@@ -290,7 +288,7 @@
     @Test
     public void testSkipToPlaylistItem() throws Exception {
         prepareLooper();
-        final MediaItem2 testMediaItem = TestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = TestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().skipToPlaylistItem(testMediaItem);
         assertTrue(mPlayer.mSkipToPlaylistItemCalled);
         assertSame(testMediaItem, mPlayer.mItem);
@@ -299,7 +297,7 @@
     @Test
     public void testGetPlayerState() {
         prepareLooper();
-        final int state = SessionPlayer2.PLAYER_STATE_PLAYING;
+        final int state = SessionPlayer.PLAYER_STATE_PLAYING;
         mPlayer.mLastPlayerState = state;
         assertEquals(state, mSession.getPlayer().getPlayerState());
     }
@@ -307,7 +305,7 @@
     @Test
     public void testGetBufferingState() {
         prepareLooper();
-        final int bufferingState = SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
+        final int bufferingState = SessionPlayer.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
         mPlayer.mLastBufferingState = bufferingState;
         assertEquals(bufferingState, mSession.getPlayer().getBufferingState());
     }
@@ -317,7 +315,7 @@
         prepareLooper();
         final long position = 150000;
         mPlayer.mCurrentPosition = position;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PLAYING;
         assertEquals(position, mSession.getPlayer().getCurrentPosition());
     }
 
@@ -326,14 +324,14 @@
         prepareLooper();
         final long bufferedPosition = 900000;
         mPlayer.mBufferedPosition = bufferedPosition;
-        mPlayer.mLastPlayerState = SessionPlayer2.PLAYER_STATE_PLAYING;
+        mPlayer.mLastPlayerState = SessionPlayer.PLAYER_STATE_PLAYING;
         assertEquals(bufferedPosition, mSession.getPlayer().getBufferedPosition());
     }
 
     @Test
     public void testSetPlaylist() {
         prepareLooper();
-        final List<MediaItem2> list = TestUtils.createMediaItems(2);
+        final List<MediaItem> list = TestUtils.createMediaItems(2);
         mSession.getPlayer().setPlaylist(list, null);
         assertTrue(mPlayer.mSetPlaylistCalled);
         assertSame(list, mPlayer.mPlaylist);
@@ -343,7 +341,7 @@
     @Test
     public void testGetPlaylist() {
         prepareLooper();
-        final List<MediaItem2> list = TestUtils.createMediaItems(2);
+        final List<MediaItem> list = TestUtils.createMediaItems(2);
         mPlayer.mPlaylist = list;
         assertEquals(list, mSession.getPlayer().getPlaylist());
     }
@@ -351,7 +349,7 @@
     @Test
     public void testUpdatePlaylistMetadata() {
         prepareLooper();
-        final MediaMetadata2 testMetadata = TestUtils.createMetadata();
+        final MediaMetadata testMetadata = TestUtils.createMetadata();
         mSession.getPlayer().updatePlaylistMetadata(testMetadata);
         assertTrue(mPlayer.mUpdatePlaylistMetadataCalled);
         assertSame(testMetadata, mPlayer.mMetadata);
@@ -360,7 +358,7 @@
     @Test
     public void testGetPlaylistMetadata() {
         prepareLooper();
-        final MediaMetadata2 testMetadata = TestUtils.createMetadata();
+        final MediaMetadata testMetadata = TestUtils.createMetadata();
         mPlayer.mMetadata = testMetadata;
         assertEquals(testMetadata, mSession.getPlayer().getPlaylistMetadata());
     }
@@ -369,7 +367,7 @@
     public void testAddPlaylistItem() {
         prepareLooper();
         final int testIndex = 12;
-        final MediaItem2 testMediaItem = TestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = TestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().addPlaylistItem(testIndex, testMediaItem);
         assertTrue(mPlayer.mAddPlaylistItemCalled);
         assertEquals(testIndex, mPlayer.mIndex);
@@ -379,7 +377,7 @@
     @Test
     public void testRemovePlaylistItem() {
         prepareLooper();
-        final MediaItem2 testMediaItem = TestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = TestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().removePlaylistItem(testMediaItem);
         assertTrue(mPlayer.mRemovePlaylistItemCalled);
         assertSame(testMediaItem, mPlayer.mItem);
@@ -389,7 +387,7 @@
     public void testReplacePlaylistItem() throws InterruptedException {
         prepareLooper();
         final int testIndex = 12;
-        final MediaItem2 testMediaItem = TestUtils.createMediaItemWithMetadata();
+        final MediaItem testMediaItem = TestUtils.createMediaItemWithMetadata();
         mSession.getPlayer().replacePlaylistItem(testIndex, testMediaItem);
         assertTrue(mPlayer.mReplacePlaylistItemCalled);
         assertEquals(testIndex, mPlayer.mIndex);
@@ -399,7 +397,7 @@
     @Test
     public void testSetShuffleMode() {
         prepareLooper();
-        final int testShuffleMode = SessionPlayer2.SHUFFLE_MODE_GROUP;
+        final int testShuffleMode = SessionPlayer.SHUFFLE_MODE_GROUP;
         mSession.getPlayer().setShuffleMode(testShuffleMode);
         assertTrue(mPlayer.mSetShuffleModeCalled);
         assertEquals(testShuffleMode, mPlayer.mShuffleMode);
@@ -408,7 +406,7 @@
     @Test
     public void testSetRepeatMode() {
         prepareLooper();
-        final int testRepeatMode = SessionPlayer2.REPEAT_MODE_GROUP;
+        final int testRepeatMode = SessionPlayer.REPEAT_MODE_GROUP;
         mSession.getPlayer().setRepeatMode(testRepeatMode);
         assertTrue(mPlayer.mSetRepeatModeCalled);
         assertEquals(testRepeatMode, mPlayer.mRepeatMode);
@@ -423,16 +421,16 @@
             public void run() {
                 mSession.close();
                 mPlayer = new MockPlayer(1);
-                mSession = new MediaSession2.Builder(mContext, mPlayer)
+                mSession = new MediaSession.Builder(mContext, mPlayer)
                         .setSessionCallback(sHandlerExecutor, callback).build();
             }
         });
-        MediaController2 controller = createController(mSession.getToken());
+        MediaController controller = createController(mSession.getToken());
         controller.pause();
         assertFalse(mPlayer.mCountDownLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertFalse(mPlayer.mPauseCalled);
         assertEquals(1, callback.commands.size());
-        assertEquals(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE,
+        assertEquals(SessionCommand.COMMAND_CODE_PLAYER_PAUSE,
                 (long) callback.commands.get(0).getCommandCode());
 
         controller.play();
@@ -440,7 +438,7 @@
         assertTrue(mPlayer.mPlayCalled);
         assertFalse(mPlayer.mPauseCalled);
         assertEquals(2, callback.commands.size());
-        assertEquals(SessionCommand2.COMMAND_CODE_PLAYER_PLAY,
+        assertEquals(SessionCommand.COMMAND_CODE_PLAYER_PLAY,
                 (long) callback.commands.get(1).getCommandCode());
     }
 
@@ -452,11 +450,11 @@
             @Override
             public void run() {
                 mSession.close();
-                mSession = new MediaSession2.Builder(mContext, mPlayer)
+                mSession = new MediaSession.Builder(mContext, mPlayer)
                         .setSessionCallback(sHandlerExecutor, sessionCallback).build();
             }
         });
-        MediaController2 controller = createController(mSession.getToken(), false, null);
+        MediaController controller = createController(mSession.getToken(), false, null);
         assertNotNull(controller);
         waitForConnect(controller, false);
         waitForDisconnect(controller, true);
@@ -466,17 +464,17 @@
     public void testOnDisconnectCallback() throws InterruptedException {
         prepareLooper();
         final CountDownLatch latch = new CountDownLatch(1);
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setId("testOnDisconnectCallback")
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {
                     @Override
-                    public void onDisconnected(MediaSession2 session,
+                    public void onDisconnected(MediaSession session,
                             ControllerInfo controller) {
                         assertEquals(Process.myUid(), controller.getUid());
                         latch.countDown();
                     }
                 }).build()) {
-            MediaController2 controller = createController(session.getToken());
+            MediaController controller = createController(session.getToken());
             controller.close();
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -487,16 +485,16 @@
         prepareLooper();
         final List<CommandButton> customLayout = new ArrayList<>();
         customLayout.add(new CommandButton.Builder()
-                .setCommand(new SessionCommand2(SessionCommand2.COMMAND_CODE_PLAYER_PLAY))
+                .setCommand(new SessionCommand(SessionCommand.COMMAND_CODE_PLAYER_PLAY))
                 .setDisplayName("button")
                 .build());
         final CountDownLatch latch = new CountDownLatch(1);
 
-        try (MediaSession2 session = new MediaSession2.Builder(mContext, mPlayer)
+        try (MediaSession session = new MediaSession.Builder(mContext, mPlayer)
                 .setId("testSetCustomLayout")
                 .setSessionCallback(sHandlerExecutor, new SessionCallback() {
                     @Override
-                    public SessionCommandGroup2 onConnect(MediaSession2 session,
+                    public SessionCommandGroup onConnect(MediaSession session,
                             ControllerInfo controller) {
                         if (mContext.getPackageName().equals(controller.getPackageName())) {
                             mTestControllerInfo = controller;
@@ -510,7 +508,7 @@
             final ControllerCallback callback = new ControllerCallback() {
                 @Override
                 public int onSetCustomLayout(
-                        MediaController2 controller2, List<CommandButton> layout) {
+                        MediaController controller, List<CommandButton> layout) {
                     assertEquals(customLayout.size(), layout.size());
                     for (int i = 0; i < layout.size(); i++) {
                         assertEquals(customLayout.get(i).getCommand(), layout.get(i).getCommand());
@@ -521,7 +519,7 @@
                     return RESULT_CODE_SUCCESS;
                 }
             };
-            MediaController2 controller = createController(session.getToken(), true, callback);
+            MediaController controller = createController(session.getToken(), true, callback);
             session.setCustomLayout(mTestControllerInfo, customLayout);
             assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
@@ -530,30 +528,30 @@
     @Test
     public void testSetAllowedCommands() throws InterruptedException {
         prepareLooper();
-        final SessionCommandGroup2 commands = new SessionCommandGroup2.Builder()
-                .addCommand(new SessionCommand2(SessionCommand2.COMMAND_CODE_PLAYER_PLAY))
-                .addCommand(new SessionCommand2(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE))
+        final SessionCommandGroup commands = new SessionCommandGroup.Builder()
+                .addCommand(new SessionCommand(SessionCommand.COMMAND_CODE_PLAYER_PLAY))
+                .addCommand(new SessionCommand(SessionCommand.COMMAND_CODE_PLAYER_PAUSE))
                 .build();
 
         final CountDownLatch latch = new CountDownLatch(1);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public void onAllowedCommandsChanged(MediaController2 controller,
-                    SessionCommandGroup2 commandsOut) {
+            public void onAllowedCommandsChanged(MediaController controller,
+                    SessionCommandGroup commandsOut) {
                 assertNotNull(commandsOut);
-                Set<SessionCommand2> expected = commands.getCommands();
-                Set<SessionCommand2> actual = commandsOut.getCommands();
+                Set<SessionCommand> expected = commands.getCommands();
+                Set<SessionCommand> actual = commandsOut.getCommands();
 
                 assertNotNull(actual);
                 assertEquals(expected.size(), actual.size());
-                for (SessionCommand2 command : expected) {
+                for (SessionCommand command : expected) {
                     assertTrue(actual.contains(command));
                 }
                 latch.countDown();
             }
         };
 
-        final MediaController2 controller = createController(mSession.getToken(), true, callback);
+        final MediaController controller = createController(mSession.getToken(), true, callback);
         ControllerInfo controllerInfo = getTestControllerInfo();
         assertNotNull(controllerInfo);
 
@@ -564,23 +562,23 @@
     @Test
     public void testSendCustomCommand() throws InterruptedException {
         prepareLooper();
-        final SessionCommand2 testCommand = new SessionCommand2(
-                SessionCommand2.COMMAND_CODE_PLAYER_PREPARE);
+        final SessionCommand testCommand = new SessionCommand(
+                SessionCommand.COMMAND_CODE_PLAYER_PREPARE);
         final Bundle testArgs = new Bundle();
         testArgs.putString("args", "testSendCustomAction");
 
         final CountDownLatch latch = new CountDownLatch(2);
         final ControllerCallback callback = new ControllerCallback() {
             @Override
-            public MediaController2.ControllerResult onCustomCommand(MediaController2 controller,
-                    SessionCommand2 command, Bundle args) {
+            public MediaController.ControllerResult onCustomCommand(MediaController controller,
+                    SessionCommand command, Bundle args) {
                 assertEquals(testCommand, command);
                 assertTrue(TestUtils.equals(testArgs, args));
                 latch.countDown();
-                return new MediaController2.ControllerResult(RESULT_CODE_SUCCESS);
+                return new MediaController.ControllerResult(RESULT_CODE_SUCCESS);
             }
         };
-        final MediaController2 controller =
+        final MediaController controller =
                 createController(mSession.getToken(), true, callback);
         // TODO(jaewan): Test with multiple controllers
         mSession.broadcastCustomCommand(testCommand, testArgs);
@@ -592,24 +590,6 @@
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
-    @Test
-    public void testNotifyRoutesInfoChanged() throws InterruptedException {
-        prepareLooper();
-        final CountDownLatch latch = new CountDownLatch(1);
-        final ControllerCallback callback = new ControllerCallback() {
-            @Override
-            public void onRoutesInfoChanged(@NonNull MediaController2 controller,
-                    @Nullable List<Bundle> routes) {
-                assertNull(routes);
-                latch.countDown();
-            }
-        };
-        final MediaController2 controller = createController(mSession.getToken(), true, callback);
-        ControllerInfo controllerInfo = getTestControllerInfo();
-        mSession.notifyRoutesInfoChanged(controllerInfo, null);
-        assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-    }
-
     private ControllerInfo getTestControllerInfo() {
         List<ControllerInfo> controllers = mSession.getConnectedControllers();
         assertNotNull(controllers);
@@ -624,7 +604,7 @@
 
     public class MockOnConnectCallback extends SessionCallback {
         @Override
-        public SessionCommandGroup2 onConnect(MediaSession2 session,
+        public SessionCommandGroup onConnect(MediaSession session,
                 ControllerInfo controllerInfo) {
             if (Process.myUid() != controllerInfo.getUid()) {
                 return null;
@@ -638,16 +618,16 @@
     }
 
     public class MockOnCommandCallback extends SessionCallback {
-        public final ArrayList<SessionCommand2> commands = new ArrayList<>();
+        public final ArrayList<SessionCommand> commands = new ArrayList<>();
 
         @Override
-        public int onCommandRequest(MediaSession2 session, ControllerInfo controllerInfo,
-                SessionCommand2 command) {
+        public int onCommandRequest(MediaSession session, ControllerInfo controllerInfo,
+                SessionCommand command) {
             assertEquals(mContext.getPackageName(), controllerInfo.getPackageName());
             assertEquals(Process.myUid(), controllerInfo.getUid());
             assertFalse(controllerInfo.isTrusted());
             commands.add(command);
-            if (command.getCommandCode() == SessionCommand2.COMMAND_CODE_PLAYER_PAUSE) {
+            if (command.getCommandCode() == SessionCommand.COMMAND_CODE_PLAYER_PAUSE) {
                 return RESULT_CODE_INVALID_STATE;
             }
             return RESULT_CODE_SUCCESS;
diff --git a/media2/src/androidTest/java/androidx/media2/MediaSession2TestBase.java b/media2/src/androidTest/java/androidx/media2/MediaSessionTestBase.java
similarity index 85%
rename from media2/src/androidTest/java/androidx/media2/MediaSession2TestBase.java
rename to media2/src/androidTest/java/androidx/media2/MediaSessionTestBase.java
index 00ecea6..77efc16 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaSession2TestBase.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaSessionTestBase.java
@@ -23,7 +23,7 @@
 import androidx.annotation.CallSuper;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.media2.MediaController2.ControllerCallback;
+import androidx.media2.MediaController.ControllerCallback;
 import androidx.media2.TestUtils.SyncHandler;
 import androidx.test.InstrumentationRegistry;
 
@@ -41,14 +41,14 @@
  * For all subclasses, all individual tests should begin with the {@link #prepareLooper()}. See
  * {@link #prepareLooper} for details.
  */
-abstract class MediaSession2TestBase extends MediaTestBase {
+abstract class MediaSessionTestBase extends MediaTestBase {
     static final int TIMEOUT_MS = 1000;
 
     static SyncHandler sHandler;
     static Executor sHandlerExecutor;
 
     Context mContext;
-    private List<MediaController2> mControllers = new ArrayList<>();
+    private List<MediaController> mControllers = new ArrayList<>();
 
     interface TestControllerInterface {
         ControllerCallback getCallback();
@@ -62,19 +62,19 @@
 
     @BeforeClass
     public static void setUpThread() {
-        synchronized (MediaSession2TestBase.class) {
+        synchronized (MediaSessionTestBase.class) {
             if (sHandler != null) {
                 return;
             }
             prepareLooper();
-            HandlerThread handlerThread = new HandlerThread("MediaSession2TestBase");
+            HandlerThread handlerThread = new HandlerThread("MediaSessionTestBase");
             handlerThread.start();
             sHandler = new SyncHandler(handlerThread.getLooper());
             sHandlerExecutor = new Executor() {
                 @Override
                 public void execute(Runnable runnable) {
                     SyncHandler handler;
-                    synchronized (MediaSession2TestBase.class) {
+                    synchronized (MediaSessionTestBase.class) {
                         handler = sHandler;
                     }
                     if (handler != null) {
@@ -87,7 +87,7 @@
 
     @AfterClass
     public static void cleanUpThread() {
-        synchronized (MediaSession2TestBase.class) {
+        synchronized (MediaSessionTestBase.class) {
             if (sHandler == null) {
                 return;
             }
@@ -113,19 +113,19 @@
         }
     }
 
-    final MediaController2 createController(SessionToken2 token) throws InterruptedException {
+    final MediaController createController(SessionToken token) throws InterruptedException {
         return createController(token, true, null);
     }
 
-    final MediaController2 createController(@NonNull SessionToken2 token,
+    final MediaController createController(@NonNull SessionToken token,
             boolean waitForConnect, @Nullable ControllerCallback callback)
             throws InterruptedException {
         TestControllerInterface instance = onCreateController(token, callback);
-        if (!(instance instanceof MediaController2)) {
-            throw new RuntimeException("Test has a bug. Expected MediaController2 but returned "
+        if (!(instance instanceof MediaController)) {
+            throw new RuntimeException("Test has a bug. Expected MediaController but returned "
                     + instance);
         }
-        MediaController2 controller = (MediaController2) instance;
+        MediaController controller = (MediaController) instance;
         mControllers.add(controller);
         if (waitForConnect) {
             waitForConnect(controller, true);
@@ -134,7 +134,7 @@
     }
 
     private static TestControllerCallbackInterface getTestControllerCallbackInterface(
-            MediaController2 controller) {
+            MediaController controller) {
         if (!(controller instanceof TestControllerInterface)) {
             throw new RuntimeException("Test has a bug. Expected controller implemented"
                     + " TestControllerInterface but got " + controller);
@@ -147,22 +147,22 @@
         return (TestControllerCallbackInterface) callback;
     }
 
-    public static void waitForConnect(MediaController2 controller, boolean expected)
+    public static void waitForConnect(MediaController controller, boolean expected)
             throws InterruptedException {
         getTestControllerCallbackInterface(controller).waitForConnect(expected);
     }
 
-    public static void waitForDisconnect(MediaController2 controller, boolean expected)
+    public static void waitForDisconnect(MediaController controller, boolean expected)
             throws InterruptedException {
         getTestControllerCallbackInterface(controller).waitForDisconnect(expected);
     }
 
-    public static void setRunnableForOnCustomCommand(MediaController2 controller,
+    public static void setRunnableForOnCustomCommand(MediaController controller,
             Runnable runnable) {
         getTestControllerCallbackInterface(controller).setRunnableForOnCustomCommand(runnable);
     }
 
-    TestControllerInterface onCreateController(final @NonNull SessionToken2 token,
+    TestControllerInterface onCreateController(final @NonNull SessionToken token,
             @Nullable ControllerCallback callback) throws InterruptedException {
         final ControllerCallback controllerCallback =
                 callback != null ? callback : new ControllerCallback() {};
@@ -180,10 +180,10 @@
         return controller.get();
     }
 
-    public class TestMediaController extends MediaController2 implements TestControllerInterface {
+    public class TestMediaController extends MediaController implements TestControllerInterface {
         private final ControllerCallback mCallback;
 
-        TestMediaController(@NonNull Context context, @NonNull SessionToken2 token,
+        TestMediaController(@NonNull Context context, @NonNull SessionToken token,
                 @NonNull ControllerCallback callback) {
             super(context, token, sHandlerExecutor, callback);
             mCallback = callback;
diff --git a/media2/src/androidTest/java/androidx/media2/MediaTestBase.java b/media2/src/androidTest/java/androidx/media2/MediaTestBase.java
index af9e495..3425885 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaTestBase.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaTestBase.java
@@ -31,7 +31,7 @@
     /**
      * All tests methods should start with this.
      * <p>
-     * MediaControllerCompat, which is wrapped by the MediaSession2, can be only created by the
+     * MediaControllerCompat, which is wrapped by the MediaSession, can be only created by the
      * thread whose Looper is prepared. However, when the presubmit test runs on the server,
      * test runs with the {@link org.junit.internal.runners.statements.FailOnTimeout} which creates
      * dedicated thread for running test methods while methods annotated with @After or @Before
diff --git a/media2/src/androidTest/java/androidx/media2/MediaTimestamp2Test.java b/media2/src/androidTest/java/androidx/media2/MediaTimestampTest.java
similarity index 68%
rename from media2/src/androidTest/java/androidx/media2/MediaTimestamp2Test.java
rename to media2/src/androidTest/java/androidx/media2/MediaTimestampTest.java
index 77c3ab1..863cb2c 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaTimestamp2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaTimestampTest.java
@@ -18,7 +18,6 @@
 
 import static junit.framework.Assert.assertEquals;
 
-import android.media.MediaTimestamp;
 import android.os.Build;
 
 import androidx.test.filters.SdkSuppress;
@@ -29,15 +28,15 @@
 import org.junit.runner.RunWith;
 
 /**
- * Tests {@link MediaTimestamp2}.
+ * Tests {@link MediaTimestamp}.
  */
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class MediaTimestamp2Test extends MediaTestBase {
+public class MediaTimestampTest extends MediaTestBase {
 
     @Test
     public void testConstructor() {
-        MediaTimestamp2 timestamp = new MediaTimestamp2(123, 456, 0.25f);
+        MediaTimestamp timestamp = new MediaTimestamp(123, 456, 0.25f);
         assertEquals(123, timestamp.getAnchorMediaTimeUs());
         assertEquals(456, timestamp.getAnchorSystemNanoTime());
         assertEquals(0.25f, timestamp.getMediaClockRate());
@@ -45,7 +44,7 @@
 
     @Test
     public void testVoidConstructor() {
-        MediaTimestamp2 timestamp = new MediaTimestamp2();
+        MediaTimestamp timestamp = new MediaTimestamp();
         assertEquals(0, timestamp.getAnchorMediaTimeUs());
         assertEquals(0, timestamp.getAnchorSystemNanoTime());
         assertEquals(1.0f, timestamp.getMediaClockRate());
@@ -54,11 +53,11 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
     public void testTimestampUnknown() {
-        assertEquals(MediaTimestamp.TIMESTAMP_UNKNOWN.getAnchorMediaTimeUs(),
-                MediaTimestamp2.TIMESTAMP_UNKNOWN.getAnchorMediaTimeUs());
-        assertEquals(MediaTimestamp.TIMESTAMP_UNKNOWN.getAnchorSytemNanoTime(),
-                MediaTimestamp2.TIMESTAMP_UNKNOWN.getAnchorSystemNanoTime());
-        assertEquals(MediaTimestamp.TIMESTAMP_UNKNOWN.getMediaClockRate(),
-                MediaTimestamp2.TIMESTAMP_UNKNOWN.getMediaClockRate());
+        assertEquals(android.media.MediaTimestamp.TIMESTAMP_UNKNOWN.getAnchorMediaTimeUs(),
+                MediaTimestamp.TIMESTAMP_UNKNOWN.getAnchorMediaTimeUs());
+        assertEquals(android.media.MediaTimestamp.TIMESTAMP_UNKNOWN.getAnchorSytemNanoTime(),
+                MediaTimestamp.TIMESTAMP_UNKNOWN.getAnchorSystemNanoTime());
+        assertEquals(android.media.MediaTimestamp.TIMESTAMP_UNKNOWN.getMediaClockRate(),
+                MediaTimestamp.TIMESTAMP_UNKNOWN.getMediaClockRate());
     }
 }
diff --git a/media2/src/androidTest/java/androidx/media2/MockBrowserCallback.java b/media2/src/androidTest/java/androidx/media2/MockBrowserCallback.java
index a9e64a3..5c4960c 100644
--- a/media2/src/androidTest/java/androidx/media2/MockBrowserCallback.java
+++ b/media2/src/androidTest/java/androidx/media2/MockBrowserCallback.java
@@ -23,18 +23,18 @@
 
 import androidx.annotation.CallSuper;
 import androidx.annotation.GuardedBy;
-import androidx.media2.MediaBrowser2.BrowserCallback;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2TestBase.TestControllerCallbackInterface;
+import androidx.media2.MediaBrowser.BrowserCallback;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSessionTestBase.TestControllerCallbackInterface;
 
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 /**
- * Mock {@link MediaBrowser2.BrowserCallback} that implements
+ * Mock {@link MediaBrowser.BrowserCallback} that implements
  * {@link TestControllerCallbackInterface}
  */
 public class MockBrowserCallback extends BrowserCallback
@@ -56,14 +56,14 @@
 
     @CallSuper
     @Override
-    public void onConnected(MediaController2 controller, SessionCommandGroup2 commands) {
+    public void onConnected(MediaController controller, SessionCommandGroup commands) {
         connectLatch.countDown();
         mCallbackProxy.onConnected(controller, commands);
     }
 
     @CallSuper
     @Override
-    public void onDisconnected(MediaController2 controller) {
+    public void onDisconnected(MediaController controller) {
         disconnectLatch.countDown();
         mCallbackProxy.onDisconnected(controller);
     }
@@ -72,10 +72,10 @@
     public void waitForConnect(boolean expect) throws InterruptedException {
         if (expect) {
             assertTrue(connectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } else {
             assertFalse(connectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
     }
 
@@ -83,22 +83,22 @@
     public void waitForDisconnect(boolean expect) throws InterruptedException {
         if (expect) {
             assertTrue(disconnectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } else {
             assertFalse(disconnectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
     }
 
     @Override
-    public void onPlaybackInfoChanged(MediaController2 controller,
-            MediaController2.PlaybackInfo info) {
+    public void onPlaybackInfoChanged(MediaController controller,
+            MediaController.PlaybackInfo info) {
         mCallbackProxy.onPlaybackInfoChanged(controller, info);
     }
 
     @Override
-    public MediaController2.ControllerResult onCustomCommand(
-            MediaController2 controller, SessionCommand2 command, Bundle args) {
+    public MediaController.ControllerResult onCustomCommand(
+            MediaController controller, SessionCommand command, Bundle args) {
         synchronized (this) {
             if (mOnCustomCommandRunnable != null) {
                 mOnCustomCommandRunnable.run();
@@ -108,66 +108,66 @@
     }
 
     @Override
-    public int onSetCustomLayout(MediaController2 controller, List<CommandButton> layout) {
+    public int onSetCustomLayout(MediaController controller, List<CommandButton> layout) {
         return mCallbackProxy.onSetCustomLayout(controller, layout);
     }
 
     @Override
-    public void onAllowedCommandsChanged(MediaController2 controller,
-            SessionCommandGroup2 commands) {
+    public void onAllowedCommandsChanged(MediaController controller,
+            SessionCommandGroup commands) {
         mCallbackProxy.onAllowedCommandsChanged(controller, commands);
     }
 
     @Override
-    public void onPlayerStateChanged(MediaController2 controller, int state) {
+    public void onPlayerStateChanged(MediaController controller, int state) {
         mCallbackProxy.onPlayerStateChanged(controller, state);
     }
 
     @Override
-    public void onSeekCompleted(MediaController2 controller, long position) {
+    public void onSeekCompleted(MediaController controller, long position) {
         mCallbackProxy.onSeekCompleted(controller, position);
     }
 
     @Override
-    public void onPlaybackSpeedChanged(MediaController2 controller, float speed) {
+    public void onPlaybackSpeedChanged(MediaController controller, float speed) {
         mCallbackProxy.onPlaybackSpeedChanged(controller, speed);
     }
 
     @Override
-    public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+    public void onBufferingStateChanged(MediaController controller, MediaItem item,
             int state) {
         mCallbackProxy.onBufferingStateChanged(controller, item, state);
     }
 
     @Override
-    public void onCurrentMediaItemChanged(MediaController2 controller, MediaItem2 item) {
+    public void onCurrentMediaItemChanged(MediaController controller, MediaItem item) {
         mCallbackProxy.onCurrentMediaItemChanged(controller, item);
     }
 
     @Override
-    public void onPlaylistChanged(MediaController2 controller,
-            List<MediaItem2> list, MediaMetadata2 metadata) {
+    public void onPlaylistChanged(MediaController controller,
+            List<MediaItem> list, MediaMetadata metadata) {
         mCallbackProxy.onPlaylistChanged(controller, list, metadata);
     }
 
     @Override
-    public void onPlaylistMetadataChanged(MediaController2 controller,
-            MediaMetadata2 metadata) {
+    public void onPlaylistMetadataChanged(MediaController controller,
+            MediaMetadata metadata) {
         mCallbackProxy.onPlaylistMetadataChanged(controller, metadata);
     }
 
     @Override
-    public void onShuffleModeChanged(MediaController2 controller, int shuffleMode) {
+    public void onShuffleModeChanged(MediaController controller, int shuffleMode) {
         mCallbackProxy.onShuffleModeChanged(controller, shuffleMode);
     }
 
     @Override
-    public void onRepeatModeChanged(MediaController2 controller, int repeatMode) {
+    public void onRepeatModeChanged(MediaController controller, int repeatMode) {
         mCallbackProxy.onRepeatModeChanged(controller, repeatMode);
     }
 
     @Override
-    public void onSearchResultChanged(MediaBrowser2 browser, String query, int itemCount,
+    public void onSearchResultChanged(MediaBrowser browser, String query, int itemCount,
             LibraryParams params) {
         super.onSearchResultChanged(browser, query, itemCount, params);
         if (mCallbackProxy instanceof BrowserCallback) {
@@ -177,7 +177,7 @@
     }
 
     @Override
-    public void onChildrenChanged(MediaBrowser2 browser, String parentId, int itemCount,
+    public void onChildrenChanged(MediaBrowser browser, String parentId, int itemCount,
             LibraryParams params) {
         super.onChildrenChanged(browser, parentId, itemCount, params);
         if (mCallbackProxy instanceof BrowserCallback) {
diff --git a/media2/src/androidTest/java/androidx/media2/MockControllerCallback.java b/media2/src/androidTest/java/androidx/media2/MockControllerCallback.java
index e3c66f8..cbffce5 100644
--- a/media2/src/androidTest/java/androidx/media2/MockControllerCallback.java
+++ b/media2/src/androidTest/java/androidx/media2/MockControllerCallback.java
@@ -24,20 +24,19 @@
 import androidx.annotation.CallSuper;
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2TestBase.TestControllerCallbackInterface;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSessionTestBase.TestControllerCallbackInterface;
 
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 /**
- * Mock {@link MediaController2.ControllerCallback} that implements
+ * Mock {@link MediaController.ControllerCallback} that implements
  * {@link TestControllerCallbackInterface}
  */
-public class MockControllerCallback extends MediaController2.ControllerCallback
+public class MockControllerCallback extends MediaController.ControllerCallback
         implements TestControllerCallbackInterface {
 
     public final ControllerCallback mCallbackProxy;
@@ -55,14 +54,14 @@
 
     @CallSuper
     @Override
-    public void onConnected(MediaController2 controller, SessionCommandGroup2 commands) {
+    public void onConnected(MediaController controller, SessionCommandGroup commands) {
         connectLatch.countDown();
         mCallbackProxy.onConnected(controller, commands);
     }
 
     @CallSuper
     @Override
-    public void onDisconnected(MediaController2 controller) {
+    public void onDisconnected(MediaController controller) {
         disconnectLatch.countDown();
         mCallbackProxy.onDisconnected(controller);
     }
@@ -71,10 +70,10 @@
     public void waitForConnect(boolean expect) throws InterruptedException {
         if (expect) {
             assertTrue(connectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } else {
             assertFalse(connectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
     }
 
@@ -82,16 +81,16 @@
     public void waitForDisconnect(boolean expect) throws InterruptedException {
         if (expect) {
             assertTrue(disconnectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         } else {
             assertFalse(disconnectLatch.await(
-                    MediaSession2TestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
+                    MediaSessionTestBase.TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
     }
 
     @Override
-    public MediaController2.ControllerResult onCustomCommand(MediaController2 controller,
-            SessionCommand2 command, Bundle args) {
+    public MediaController.ControllerResult onCustomCommand(MediaController controller,
+            SessionCommand command, Bundle args) {
         synchronized (this) {
             if (mOnCustomCommandRunnable != null) {
                 mOnCustomCommandRunnable.run();
@@ -101,72 +100,72 @@
     }
 
     @Override
-    public void onPlaybackInfoChanged(MediaController2 controller,
-            MediaController2.PlaybackInfo info) {
+    public void onPlaybackInfoChanged(MediaController controller,
+            MediaController.PlaybackInfo info) {
         mCallbackProxy.onPlaybackInfoChanged(controller, info);
     }
 
     @Override
-    public int onSetCustomLayout(MediaController2 controller, List<CommandButton> layout) {
+    public int onSetCustomLayout(MediaController controller, List<CommandButton> layout) {
         return mCallbackProxy.onSetCustomLayout(controller, layout);
     }
 
     @Override
-    public void onAllowedCommandsChanged(MediaController2 controller,
-            SessionCommandGroup2 commands) {
+    public void onAllowedCommandsChanged(MediaController controller,
+            SessionCommandGroup commands) {
         mCallbackProxy.onAllowedCommandsChanged(controller, commands);
     }
 
     @Override
-    public void onPlayerStateChanged(MediaController2 controller, int state) {
+    public void onPlayerStateChanged(MediaController controller, int state) {
         mCallbackProxy.onPlayerStateChanged(controller, state);
     }
 
     @Override
-    public void onSeekCompleted(MediaController2 controller, long position) {
+    public void onSeekCompleted(MediaController controller, long position) {
         mCallbackProxy.onSeekCompleted(controller, position);
     }
 
     @Override
-    public void onPlaybackSpeedChanged(MediaController2 controller, float speed) {
+    public void onPlaybackSpeedChanged(MediaController controller, float speed) {
         mCallbackProxy.onPlaybackSpeedChanged(controller, speed);
     }
 
     @Override
-    public void onBufferingStateChanged(MediaController2 controller, MediaItem2 item,
+    public void onBufferingStateChanged(MediaController controller, MediaItem item,
             int state) {
         mCallbackProxy.onBufferingStateChanged(controller, item, state);
     }
 
     @Override
-    public void onCurrentMediaItemChanged(MediaController2 controller, MediaItem2 item) {
+    public void onCurrentMediaItemChanged(MediaController controller, MediaItem item) {
         mCallbackProxy.onCurrentMediaItemChanged(controller, item);
     }
 
     @Override
-    public void onPlaylistChanged(MediaController2 controller,
-            List<MediaItem2> list, MediaMetadata2 metadata) {
+    public void onPlaylistChanged(MediaController controller,
+            List<MediaItem> list, MediaMetadata metadata) {
         mCallbackProxy.onPlaylistChanged(controller, list, metadata);
     }
 
     @Override
-    public void onPlaylistMetadataChanged(MediaController2 controller,
-            MediaMetadata2 metadata) {
+    public void onPlaylistMetadataChanged(MediaController controller,
+            MediaMetadata metadata) {
         mCallbackProxy.onPlaylistMetadataChanged(controller, metadata);
     }
 
     @Override
-    public void onShuffleModeChanged(MediaController2 controller, int shuffleMode) {
+    public void onShuffleModeChanged(MediaController controller, int shuffleMode) {
         mCallbackProxy.onShuffleModeChanged(controller, shuffleMode);
     }
 
     @Override
-    public void onRepeatModeChanged(MediaController2 controller, int repeatMode) {
+    public void onRepeatModeChanged(MediaController controller, int repeatMode) {
         mCallbackProxy.onRepeatModeChanged(controller, repeatMode);
     }
 
     @Override
-    public void onPlaybackCompleted(MediaController2 controller) {
+    public void onPlaybackCompleted(MediaController controller) {
         mCallbackProxy.onPlaybackCompleted(controller);
     }
 
@@ -176,10 +175,4 @@
             mOnCustomCommandRunnable = runnable;
         }
     }
-
-    @Override
-    public void onRoutesInfoChanged(@NonNull MediaController2 controller,
-            @Nullable List<Bundle> routes) {
-        mCallbackProxy.onRoutesInfoChanged(controller, routes);
-    }
 }
diff --git a/media2/src/androidTest/java/androidx/media2/MockMediaLibraryService2.java b/media2/src/androidTest/java/androidx/media2/MockMediaLibraryService.java
similarity index 79%
rename from media2/src/androidTest/java/androidx/media2/MockMediaLibraryService2.java
rename to media2/src/androidTest/java/androidx/media2/MockMediaLibraryService.java
index cc02c0e..5a91f7d 100644
--- a/media2/src/androidTest/java/androidx/media2/MockMediaLibraryService2.java
+++ b/media2/src/androidTest/java/androidx/media2/MockMediaLibraryService.java
@@ -16,13 +16,13 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaMetadata2.BROWSABLE_TYPE_MIXED;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_BROWSABLE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_MEDIA_ID;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_PLAYABLE;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_MIXED;
+import static androidx.media2.MediaMetadata.METADATA_KEY_BROWSABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_ID;
+import static androidx.media2.MediaMetadata.METADATA_KEY_PLAYABLE;
 import static androidx.media2.TestUtils.assertLibraryParamsEquals;
 
 import static org.junit.Assert.assertEquals;
@@ -33,9 +33,9 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionCallback;
 import androidx.media2.TestUtils.SyncHandler;
 
 import java.util.ArrayList;
@@ -47,15 +47,15 @@
 import javax.annotation.concurrent.GuardedBy;
 
 /**
- * Mock implementation of {@link MediaLibraryService2} for testing.
+ * Mock implementation of {@link MediaLibraryService} for testing.
  */
-public class MockMediaLibraryService2 extends MediaLibraryService2 {
+public class MockMediaLibraryService extends MediaLibraryService {
     /**
      * ID of the session that this service will create
      */
     public static final String ID = "TestLibrary";
 
-    public static final MediaItem2 ROOT_ITEM;
+    public static final MediaItem ROOT_ITEM;
     public static final Bundle ROOT_PARAMS_EXTRA;
     public static final LibraryParams ROOT_PARAMS;
 
@@ -65,7 +65,7 @@
     public static final String PARENT_ID_NO_CHILDREN = "parent_id_no_children";
     public static final String PARENT_ID_ERROR = "parent_id_error";
 
-    public static final List<MediaItem2> GET_CHILDREN_RESULT = new ArrayList<>();
+    public static final List<MediaItem> GET_CHILDREN_RESULT = new ArrayList<>();
     public static final int CHILDREN_COUNT = 100;
 
     public static final String SEARCH_QUERY = "search_query";
@@ -73,12 +73,12 @@
     public static final int SEARCH_TIME_IN_MS = 5000;
     public static final String SEARCH_QUERY_EMPTY_RESULT = "search_query_empty_result";
 
-    public static final List<MediaItem2> SEARCH_RESULT = new ArrayList<>();
+    public static final List<MediaItem> SEARCH_RESULT = new ArrayList<>();
     public static final int SEARCH_RESULT_COUNT = 50;
 
     static {
-        ROOT_ITEM = new MediaItem2.Builder()
-                .setMetadata(new MediaMetadata2.Builder()
+        ROOT_ITEM = new MediaItem.Builder()
+                .setMetadata(new MediaMetadata.Builder()
                         .putString(METADATA_KEY_MEDIA_ID, "rootId")
                         .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_MIXED)
                         .putLong(METADATA_KEY_PLAYABLE, 1).build()).build();
@@ -89,14 +89,14 @@
 
     private static final String TAG = "MockMediaLibrarySvc2";
 
-    @GuardedBy("MockMediaLibraryService2.class")
-    private static SessionToken2 sToken;
-    @GuardedBy("MockMediaLibraryService2.class")
+    @GuardedBy("MockMediaLibraryService.class")
+    private static SessionToken sToken;
+    @GuardedBy("MockMediaLibraryService.class")
     private static LibraryParams sExpectedParams;
 
     private MediaLibrarySession mSession;
 
-    public MockMediaLibraryService2() {
+    public MockMediaLibraryService() {
         super();
         GET_CHILDREN_RESULT.clear();
         String getChildrenMediaIdPrefix = "get_children_media_id_";
@@ -141,7 +141,7 @@
             // Callback hasn't set. Use default callback
             librarySessionCallback = new TestLibrarySessionCallback();
         }
-        mSession = new MediaLibrarySession.Builder(MockMediaLibraryService2.this, player, executor,
+        mSession = new MediaLibrarySession.Builder(MockMediaLibraryService.this, player, executor,
                 librarySessionCallback).setId(ID).build();
         return mSession;
     }
@@ -153,19 +153,19 @@
         TestServiceRegistry.getInstance().cleanUp();
     }
 
-    public static SessionToken2 getToken(Context context) {
-        synchronized (MockMediaLibraryService2.class) {
+    public static SessionToken getToken(Context context) {
+        synchronized (MockMediaLibraryService.class) {
             if (sToken == null) {
-                sToken = new SessionToken2(context, new ComponentName(
-                        context.getPackageName(), MockMediaLibraryService2.class.getName()));
-                assertEquals(SessionToken2.TYPE_LIBRARY_SERVICE, sToken.getType());
+                sToken = new SessionToken(context, new ComponentName(
+                        context.getPackageName(), MockMediaLibraryService.class.getName()));
+                assertEquals(SessionToken.TYPE_LIBRARY_SERVICE, sToken.getType());
             }
             return sToken;
         }
     }
 
     public static void setAssertLibraryParams(LibraryParams params) {
-        synchronized (MockMediaLibraryService2.class) {
+        synchronized (MockMediaLibraryService.class) {
             sExpectedParams = params;
         }
     }
@@ -202,7 +202,7 @@
                 return new LibraryResult(RESULT_CODE_BAD_VALUE);
             }
             // Includes the case of PARENT_ID_NO_CHILDREN.
-            return new LibraryResult(RESULT_CODE_SUCCESS, new ArrayList<MediaItem2>(), null);
+            return new LibraryResult(RESULT_CODE_SUCCESS, new ArrayList<MediaItem>(), null);
         }
 
         @Override
@@ -249,13 +249,13 @@
         }
 
         private void assertLibraryParams(LibraryParams params) {
-            synchronized (MockMediaLibraryService2.class) {
+            synchronized (MockMediaLibraryService.class) {
                 assertLibraryParamsEquals(sExpectedParams, params);
             }
         }
     }
 
-    private List<MediaItem2> getPaginatedResult(List<MediaItem2> items, int page, int pageSize) {
+    private List<MediaItem> getPaginatedResult(List<MediaItem> items, int page, int pageSize) {
         if (items == null) {
             return null;
         } else if (items.size() == 0) {
@@ -266,7 +266,7 @@
         int fromIndex = page * pageSize;
         int toIndex = Math.min((page + 1) * pageSize, totalItemCount);
 
-        List<MediaItem2> paginatedResult = new ArrayList<>();
+        List<MediaItem> paginatedResult = new ArrayList<>();
         try {
             // The case of (fromIndex >= totalItemCount) will throw exception below.
             paginatedResult = items.subList(fromIndex, toIndex);
@@ -277,14 +277,13 @@
         return paginatedResult;
     }
 
-    private MediaItem2 createMediaItem(String mediaId) {
-        return new MediaItem2.Builder()
+    private MediaItem createMediaItem(String mediaId) {
+        return new MediaItem.Builder()
                 .setMetadata(
-                        new MediaMetadata2.Builder()
-                                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId)
-                                .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE,
-                                        MediaMetadata2.BROWSABLE_TYPE_MIXED)
-                                .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+                        new MediaMetadata.Builder()
+                                .putString(METADATA_KEY_MEDIA_ID, mediaId)
+                                .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_MIXED)
+                                .putLong(METADATA_KEY_PLAYABLE, 1)
                                 .build())
                 .build();
     }
diff --git a/media2/src/androidTest/java/androidx/media2/MockMediaSessionService2.java b/media2/src/androidTest/java/androidx/media2/MockMediaSessionService.java
similarity index 86%
rename from media2/src/androidTest/java/androidx/media2/MockMediaSessionService2.java
rename to media2/src/androidTest/java/androidx/media2/MockMediaSessionService.java
index 1e7f103..3429657 100644
--- a/media2/src/androidTest/java/androidx/media2/MockMediaSessionService2.java
+++ b/media2/src/androidTest/java/androidx/media2/MockMediaSessionService.java
@@ -16,21 +16,21 @@
 
 package androidx.media2;
 
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media2.MediaSession.SessionCallback;
 import androidx.media2.TestUtils.SyncHandler;
 
 import java.util.concurrent.Executor;
 
 /**
- * Mock implementation of {@link MediaSessionService2} for testing.
+ * Mock implementation of {@link MediaSessionService} for testing.
  */
-public class MockMediaSessionService2 extends MediaSessionService2 {
+public class MockMediaSessionService extends MediaSessionService {
     /**
      * ID of the session that this service will create.
      */
     public static final String ID = "TestSession";
 
-    private MediaSession2 mSession;
+    private MediaSession mSession;
 
     @Override
     public void onCreate() {
@@ -39,7 +39,7 @@
     }
 
     @Override
-    public MediaSession2 onGetSession() {
+    public MediaSession onGetSession() {
         TestServiceRegistry registry = TestServiceRegistry.getInstance();
         TestServiceRegistry.OnGetSessionHandler onGetSessionHandler =
                 registry.getOnGetSessionHandler();
@@ -62,7 +62,7 @@
             // Ensures non-null
             sessionCallback = new SessionCallback() {};
         }
-        mSession = new MediaSession2.Builder(this, player)
+        mSession = new MediaSession.Builder(this, player)
                 .setSessionCallback(executor, sessionCallback)
                 .setId(ID)
                 .build();
diff --git a/media2/src/androidTest/java/androidx/media2/MockPlayer.java b/media2/src/androidTest/java/androidx/media2/MockPlayer.java
index 12649ff..f93bfe9 100644
--- a/media2/src/androidTest/java/androidx/media2/MockPlayer.java
+++ b/media2/src/androidTest/java/androidx/media2/MockPlayer.java
@@ -27,9 +27,9 @@
 import java.util.concurrent.Executor;
 
 /**
- * A mock implementation of {@link SessionPlayer2} for testing.
+ * A mock implementation of {@link SessionPlayer} for testing.
  */
-public class MockPlayer extends SessionPlayer2 {
+public class MockPlayer extends SessionPlayer {
     public final CountDownLatch mCountDownLatch;
     public final boolean mChangePlayerStateWithTransportControl;
 
@@ -46,10 +46,10 @@
     public @BuffState int mLastBufferingState;
     public long mDuration;
 
-    public List<MediaItem2> mPlaylist;
-    public MediaMetadata2 mMetadata;
-    public MediaItem2 mCurrentMediaItem;
-    public MediaItem2 mItem;
+    public List<MediaItem> mPlaylist;
+    public MediaMetadata mMetadata;
+    public MediaItem mCurrentMediaItem;
+    public MediaItem mItem;
     public int mIndex = -1;
     public @RepeatMode int mRepeatMode = -1;
     public @ShuffleMode int mShuffleMode = -1;
@@ -78,7 +78,7 @@
     private MockPlayer(int count, boolean changePlayerStateWithTransportControl) {
         mCountDownLatch = (count > 0) ? new CountDownLatch(count) : null;
         mChangePlayerStateWithTransportControl = changePlayerStateWithTransportControl;
-        // This prevents MS2#play() from triggering SessionPlayer2#prepare().
+        // This prevents MS2#play() from triggering SessionPlayer#prepare().
         mLastPlayerState = PLAYER_STATE_PAUSED;
 
         // Sets default audio attributes to prevent setVolume() from being called with the play().
@@ -182,7 +182,7 @@
         }
     }
 
-    public void notifyCurrentMediaItemChanged(final MediaItem2 item) {
+    public void notifyCurrentMediaItemChanged(final MediaItem item) {
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
             final PlayerCallback callback = pair.first;
@@ -195,7 +195,7 @@
         }
     }
 
-    public void notifyBufferingStateChanged(final MediaItem2 item,
+    public void notifyBufferingStateChanged(final MediaItem item,
             final @BuffState int buffState) {
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
@@ -261,12 +261,12 @@
     /////////////////////////////////////////////////////////////////////////////////
 
     @Override
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         return mPlaylist;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setMediaItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(MediaItem item) {
         mItem = item;
         mCurrentMediaItem = item;
         ArrayList list = new ArrayList<>();
@@ -276,7 +276,7 @@
 
     @Override
     public ListenableFuture<PlayerResult> setPlaylist(
-            List<MediaItem2> list, MediaMetadata2 metadata) {
+            List<MediaItem> list, MediaMetadata metadata) {
         mSetPlaylistCalled = true;
         mPlaylist = list;
         mMetadata = metadata;
@@ -285,12 +285,12 @@
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         return mMetadata;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata metadata) {
         mUpdatePlaylistMetadataCalled = true;
         mMetadata = metadata;
         mCountDownLatch.countDown();
@@ -298,12 +298,12 @@
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return mCurrentMediaItem;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem item) {
         mAddPlaylistItemCalled = true;
         mIndex = index;
         mItem = item;
@@ -312,7 +312,7 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem item) {
         mRemovePlaylistItemCalled = true;
         mItem = item;
         mCountDownLatch.countDown();
@@ -320,7 +320,7 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem item) {
         mReplacePlaylistItemCalled = true;
         mIndex = index;
         mItem = item;
@@ -329,7 +329,7 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem item) {
         mSkipToPlaylistItemCalled = true;
         mItem = item;
         mCountDownLatch.countDown();
@@ -405,8 +405,8 @@
     }
 
     public void notifyPlaylistChanged() {
-        final List<MediaItem2> list = mPlaylist;
-        final MediaMetadata2 metadata = mMetadata;
+        final List<MediaItem> list = mPlaylist;
+        final MediaMetadata metadata = mMetadata;
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
             final PlayerCallback callback = pair.first;
@@ -420,7 +420,7 @@
     }
 
     public void notifyPlaylistMetadataChanged() {
-        final MediaMetadata2 metadata = mMetadata;
+        final MediaMetadata metadata = mMetadata;
         List<Pair<PlayerCallback, Executor>> callbacks = getCallbacks();
         for (Pair<PlayerCallback, Executor> pair : callbacks) {
             final PlayerCallback callback = pair.first;
diff --git a/media2/src/androidTest/java/androidx/media2/MockRemotePlayer.java b/media2/src/androidTest/java/androidx/media2/MockRemotePlayer.java
index e1ca14a..67901b3 100644
--- a/media2/src/androidTest/java/androidx/media2/MockRemotePlayer.java
+++ b/media2/src/androidTest/java/androidx/media2/MockRemotePlayer.java
@@ -24,9 +24,9 @@
 import java.util.concurrent.CountDownLatch;
 
 /**
- * Mock implementation of {@link RemoteSessionPlayer2}.
+ * Mock implementation of {@link RemoteSessionPlayer}.
  */
-public class MockRemotePlayer extends RemoteSessionPlayer2 {
+public class MockRemotePlayer extends RemoteSessionPlayer {
     public final CountDownLatch mLatch = new CountDownLatch(1);
     public boolean mSetVolumeToCalled;
     public boolean mAdjustVolumeCalled;
@@ -133,8 +133,8 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setPlaylist(List<MediaItem2> list,
-            MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> setPlaylist(List<MediaItem> list,
+            MediaMetadata metadata) {
         return null;
     }
 
@@ -144,22 +144,22 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setMediaItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> removePlaylistItem(MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem2 item) {
+    public ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem item) {
         return null;
     }
 
@@ -174,12 +174,12 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem2 item) {
+    public ListenableFuture<PlayerResult> skipToPlaylistItem(MediaItem item) {
         return null;
     }
 
     @Override
-    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata metadata) {
         return null;
     }
 
@@ -194,12 +194,12 @@
     }
 
     @Override
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         return null;
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         return null;
     }
 
@@ -214,7 +214,7 @@
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return null;
     }
 
diff --git a/media2/src/androidTest/java/androidx/media2/PlaybackParams2Test.java b/media2/src/androidTest/java/androidx/media2/PlaybackParamsTest.java
similarity index 65%
rename from media2/src/androidTest/java/androidx/media2/PlaybackParams2Test.java
rename to media2/src/androidTest/java/androidx/media2/PlaybackParamsTest.java
index 6f87e17..e2af21e 100644
--- a/media2/src/androidTest/java/androidx/media2/PlaybackParams2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/PlaybackParamsTest.java
@@ -18,7 +18,6 @@
 
 import static junit.framework.Assert.assertEquals;
 
-import android.media.PlaybackParams;
 import android.os.Build;
 
 import androidx.test.filters.SdkSuppress;
@@ -29,27 +28,27 @@
 import org.junit.runner.RunWith;
 
 /**
- * Tests {@link PlaybackParams2}.
+ * Tests {@link PlaybackParams}.
  */
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class PlaybackParams2Test extends MediaTestBase {
+public class PlaybackParamsTest extends MediaTestBase {
 
     @Test
     public void testConstructor() {
-        PlaybackParams2 params = new PlaybackParams2.Builder()
-                .setAudioFallbackMode(PlaybackParams2.AUDIO_FALLBACK_MODE_MUTE)
+        PlaybackParams params = new PlaybackParams.Builder()
+                .setAudioFallbackMode(PlaybackParams.AUDIO_FALLBACK_MODE_MUTE)
                 .setPitch(1.0f)
                 .setSpeed(1.0f)
                 .build();
-        assertEquals(PlaybackParams2.AUDIO_FALLBACK_MODE_MUTE, (int) params.getAudioFallbackMode());
+        assertEquals(PlaybackParams.AUDIO_FALLBACK_MODE_MUTE, (int) params.getAudioFallbackMode());
         assertEquals(1.0f, params.getPitch());
         assertEquals(1.0f, params.getSpeed());
     }
 
     @Test
     public void testConstructorNullValues() {
-        PlaybackParams2 params = new PlaybackParams2.Builder().build();
+        PlaybackParams params = new PlaybackParams.Builder().build();
         assertEquals(null, params.getAudioFallbackMode());
         assertEquals(null, params.getPitch());
         assertEquals(null, params.getSpeed());
@@ -58,11 +57,11 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
     public void testConstants() {
-        assertEquals(PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT,
-                PlaybackParams2.AUDIO_FALLBACK_MODE_DEFAULT);
-        assertEquals(PlaybackParams.AUDIO_FALLBACK_MODE_MUTE,
-                PlaybackParams2.AUDIO_FALLBACK_MODE_MUTE);
-        assertEquals(PlaybackParams.AUDIO_FALLBACK_MODE_FAIL,
-                PlaybackParams2.AUDIO_FALLBACK_MODE_FAIL);
+        assertEquals(android.media.PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT,
+                PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT);
+        assertEquals(android.media.PlaybackParams.AUDIO_FALLBACK_MODE_MUTE,
+                PlaybackParams.AUDIO_FALLBACK_MODE_MUTE);
+        assertEquals(android.media.PlaybackParams.AUDIO_FALLBACK_MODE_FAIL,
+                PlaybackParams.AUDIO_FALLBACK_MODE_FAIL);
     }
 }
diff --git a/media2/src/androidTest/java/androidx/media2/Rating2Test.java b/media2/src/androidTest/java/androidx/media2/Rating2Test.java
deleted file mode 100644
index f92f8d4..0000000
--- a/media2/src/androidTest/java/androidx/media2/Rating2Test.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media2;
-
-import static org.junit.Assert.assertEquals;
-
-import android.os.Build;
-import android.os.Parcel;
-
-import androidx.test.filters.SdkSuppress;
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-import androidx.versionedparcelable.ParcelImpl;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Tests {@link Rating2} and its subclasses.
- */
-@SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class Rating2Test extends MediaTestBase {
-    @Test
-    public void testUnratedHeartRating2() {
-        HeartRating2 rating2 = new HeartRating2();
-        assertEquals(false, rating2.isRated());
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    @Test
-    public void testRatedHeartRating2() {
-        final boolean hasHeart = true;
-        HeartRating2 rating2 = new HeartRating2(hasHeart);
-        assertEquals(true, rating2.isRated());
-        assertEquals(hasHeart, rating2.hasHeart());
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    @Test
-    public void testUnratedPercentageRating2() {
-        PercentageRating2 rating2 = new PercentageRating2();
-        assertEquals(false, rating2.isRated());
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    @Test
-    public void testRatedPercentageRating2() {
-        double delta = 0.000001;
-        float percentage = 20.5f;
-        PercentageRating2 rating2 = new PercentageRating2(percentage);
-        assertEquals(true, rating2.isRated());
-        assertEquals(percentage, rating2.getPercentRating(), delta);
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    @Test
-    public void testUnratedThumbRating2() {
-        ThumbRating2 rating2 = new ThumbRating2();
-        assertEquals(false, rating2.isRated());
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    @Test
-    public void testRatedThumbRating2() {
-        boolean isThumbUp = true;
-        ThumbRating2 rating2 = new ThumbRating2(isThumbUp);
-        assertEquals(true, rating2.isRated());
-        assertEquals(isThumbUp, rating2.isThumbUp());
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    @Test
-    public void testUnratedStarRating2() {
-        int maxStars = 5;
-        StarRating2 rating2 = new StarRating2(maxStars);
-        assertEquals(false, rating2.isRated());
-        assertEquals(maxStars, rating2.getMaxStars());
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    @Test
-    public void testRatedStarRating2() {
-        double delta = 0.000001;
-        int maxStars = 5;
-        float starRating = 3.1f;
-        StarRating2 rating2 = new StarRating2(maxStars, starRating);
-        assertEquals(true, rating2.isRated());
-        assertEquals(maxStars, rating2.getMaxStars());
-        assertEquals(starRating, rating2.getStarRating(), delta);
-        assertEquals(rating2, writeToParcelAndCreateRating2(rating2));
-    }
-
-    private Rating2 writeToParcelAndCreateRating2(Rating2 rating2) {
-        ParcelImpl parcelImpl = MediaUtils2.toParcelable(rating2);
-        Parcel parcel = Parcel.obtain();
-        parcelImpl.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        ParcelImpl newParcelImpl = ParcelImpl.CREATOR.createFromParcel(parcel);
-        parcel.recycle();
-        return MediaUtils2.fromParcelable(newParcelImpl);
-    }
-}
diff --git a/media2/src/androidTest/java/androidx/media2/RatingTest.java b/media2/src/androidTest/java/androidx/media2/RatingTest.java
new file mode 100644
index 0000000..fe4df76
--- /dev/null
+++ b/media2/src/androidTest/java/androidx/media2/RatingTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2;
+
+import static org.junit.Assert.assertEquals;
+
+import android.os.Build;
+import android.os.Parcel;
+
+import androidx.test.filters.SdkSuppress;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+import androidx.versionedparcelable.ParcelImpl;
+import androidx.versionedparcelable.ParcelUtils;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests {@link Rating} and its subclasses.
+ */
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class RatingTest extends MediaTestBase {
+    @Test
+    public void testUnratedHeartRating() {
+        HeartRating rating = new HeartRating();
+        assertEquals(false, rating.isRated());
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    @Test
+    public void testRatedHeartRating() {
+        final boolean hasHeart = true;
+        HeartRating rating = new HeartRating(hasHeart);
+        assertEquals(true, rating.isRated());
+        assertEquals(hasHeart, rating.hasHeart());
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    @Test
+    public void testUnratedPercentageRating() {
+        PercentageRating rating = new PercentageRating();
+        assertEquals(false, rating.isRated());
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    @Test
+    public void testRatedPercentageRating() {
+        double delta = 0.000001;
+        float percentage = 20.5f;
+        PercentageRating rating = new PercentageRating(percentage);
+        assertEquals(true, rating.isRated());
+        assertEquals(percentage, rating.getPercentRating(), delta);
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    @Test
+    public void testUnratedThumbRating() {
+        ThumbRating rating = new ThumbRating();
+        assertEquals(false, rating.isRated());
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    @Test
+    public void testRatedThumbRating() {
+        boolean isThumbUp = true;
+        ThumbRating rating = new ThumbRating(isThumbUp);
+        assertEquals(true, rating.isRated());
+        assertEquals(isThumbUp, rating.isThumbUp());
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    @Test
+    public void testUnratedStarRating() {
+        int maxStars = 5;
+        StarRating rating = new StarRating(maxStars);
+        assertEquals(false, rating.isRated());
+        assertEquals(maxStars, rating.getMaxStars());
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    @Test
+    public void testRatedStarRating() {
+        double delta = 0.000001;
+        int maxStars = 5;
+        float starRating = 3.1f;
+        StarRating rating = new StarRating(maxStars, starRating);
+        assertEquals(true, rating.isRated());
+        assertEquals(maxStars, rating.getMaxStars());
+        assertEquals(starRating, rating.getStarRating(), delta);
+        assertEquals(rating, writeToParcelAndCreateRating(rating));
+    }
+
+    private Rating writeToParcelAndCreateRating(Rating rating) {
+        ParcelImpl parcelImpl = (ParcelImpl) ParcelUtils.toParcelable(rating);
+        Parcel parcel = Parcel.obtain();
+        parcelImpl.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        ParcelImpl newParcelImpl = ParcelImpl.CREATOR.createFromParcel(parcel);
+        parcel.recycle();
+        return ParcelUtils.fromParcelable(newParcelImpl);
+    }
+}
diff --git a/media2/src/androidTest/java/androidx/media2/SubtitleData2Test.java b/media2/src/androidTest/java/androidx/media2/SubtitleDataTest.java
similarity index 87%
rename from media2/src/androidTest/java/androidx/media2/SubtitleData2Test.java
rename to media2/src/androidTest/java/androidx/media2/SubtitleDataTest.java
index a71cc8f..64d9c3f 100644
--- a/media2/src/androidTest/java/androidx/media2/SubtitleData2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/SubtitleDataTest.java
@@ -25,16 +25,16 @@
 import org.junit.runner.RunWith;
 
 /**
- * Tests {@link SubtitleData2}.
+ * Tests {@link SubtitleData}.
  */
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class SubtitleData2Test extends MediaTestBase {
+public class SubtitleDataTest extends MediaTestBase {
 
     @Test
     public void testConstructor() {
         byte[] testData = {4, 3, 2, 1};
-        SubtitleData2 data = new SubtitleData2(2, 123, 456, testData);
+        SubtitleData data = new SubtitleData(2, 123, 456, testData);
         assertEquals(2, data.getTrackIndex());
         assertEquals(123, data.getStartTimeUs());
         assertEquals(456, data.getDurationUs());
diff --git a/media2/src/androidTest/java/androidx/media2/SyncListenableFuture.java b/media2/src/androidTest/java/androidx/media2/SyncListenableFuture.java
index e8a4b46..c6dd00e 100644
--- a/media2/src/androidTest/java/androidx/media2/SyncListenableFuture.java
+++ b/media2/src/androidTest/java/androidx/media2/SyncListenableFuture.java
@@ -16,7 +16,7 @@
 
 package androidx.media2;
 
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_SUCCESS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -28,11 +28,11 @@
 /**
  * Implements {@link ListenableFuture} for synchrous calls.
  */
-public class SyncListenableFuture implements ListenableFuture<SessionPlayer2.PlayerResult> {
-    private final SessionPlayer2.PlayerResult mResult;
+public class SyncListenableFuture implements ListenableFuture<SessionPlayer.PlayerResult> {
+    private final SessionPlayer.PlayerResult mResult;
 
-    SyncListenableFuture(MediaItem2 item) {
-        mResult = new SessionPlayer2.PlayerResult(RESULT_CODE_SUCCESS, item);
+    SyncListenableFuture(MediaItem item) {
+        mResult = new SessionPlayer.PlayerResult(RESULT_CODE_SUCCESS, item);
     }
 
     @Override
@@ -56,12 +56,12 @@
     }
 
     @Override
-    public SessionPlayer2.PlayerResult get() throws InterruptedException, ExecutionException {
+    public SessionPlayer.PlayerResult get() throws InterruptedException, ExecutionException {
         return mResult;
     }
 
     @Override
-    public SessionPlayer2.PlayerResult get(long l, TimeUnit timeUnit)
+    public SessionPlayer.PlayerResult get(long l, TimeUnit timeUnit)
             throws InterruptedException, ExecutionException, TimeoutException {
         return mResult;
     }
diff --git a/media2/src/androidTest/java/androidx/media2/TestDataSourceCallback2.java b/media2/src/androidTest/java/androidx/media2/TestDataSourceCallback.java
similarity index 88%
rename from media2/src/androidTest/java/androidx/media2/TestDataSourceCallback2.java
rename to media2/src/androidTest/java/androidx/media2/TestDataSourceCallback.java
index a92cbaa..9a6fa31 100644
--- a/media2/src/androidTest/java/androidx/media2/TestDataSourceCallback2.java
+++ b/media2/src/androidTest/java/androidx/media2/TestDataSourceCallback.java
@@ -23,10 +23,10 @@
 import java.io.InputStream;
 
 /**
- * A DataSourceCallback2 that reads from a byte array for use in tests.
+ * A DataSourceCallback that reads from a byte array for use in tests.
  */
-public class TestDataSourceCallback2 extends DataSourceCallback2 {
-    private static final String TAG = "TestDataSourceCallback2";
+public class TestDataSourceCallback extends DataSourceCallback {
+    private static final String TAG = "TestDataSourceCallback";
 
     private byte[] mData;
 
@@ -37,7 +37,7 @@
     private boolean mIsClosed;
 
     // Read an asset fd into a new byte array media item. Closes afd.
-    public static TestDataSourceCallback2 fromAssetFd(AssetFileDescriptor afd) throws IOException {
+    public static TestDataSourceCallback fromAssetFd(AssetFileDescriptor afd) throws IOException {
         try {
             InputStream in = afd.createInputStream();
             final int size = (int) afd.getDeclaredLength();
@@ -48,13 +48,13 @@
                 numRead = in.read(data, writeIndex, size - writeIndex);
                 writeIndex += numRead;
             } while (numRead >= 0);
-            return new TestDataSourceCallback2(data);
+            return new TestDataSourceCallback(data);
         } finally {
             afd.close();
         }
     }
 
-    public TestDataSourceCallback2(byte[] data) {
+    public TestDataSourceCallback(byte[] data) {
         mData = data;
     }
 
diff --git a/media2/src/androidTest/java/androidx/media2/TestServiceRegistry.java b/media2/src/androidTest/java/androidx/media2/TestServiceRegistry.java
index cde9eb8..00370bd 100644
--- a/media2/src/androidTest/java/androidx/media2/TestServiceRegistry.java
+++ b/media2/src/androidTest/java/androidx/media2/TestServiceRegistry.java
@@ -21,13 +21,13 @@
 import android.os.Handler;
 
 import androidx.annotation.GuardedBy;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
 import androidx.media2.TestUtils.SyncHandler;
 
 import java.util.List;
 
 /**
- * Keeps the instance of currently running {@link MockMediaSessionService2}. And also provides
+ * Keeps the instance of currently running {@link MockMediaSessionService}. And also provides
  * a way to control them in one place.
  * <p>
  * It only support only one service at a time.
@@ -36,7 +36,7 @@
     @GuardedBy("TestServiceRegistry.class")
     private static TestServiceRegistry sInstance;
     @GuardedBy("TestServiceRegistry.class")
-    private MediaSessionService2 mService;
+    private MediaSessionService mService;
     @GuardedBy("TestServiceRegistry.class")
     private SyncHandler mHandler;
     @GuardedBy("TestServiceRegistry.class")
@@ -105,7 +105,7 @@
         }
     }
 
-    public void setServiceInstance(MediaSessionService2 service) {
+    public void setServiceInstance(MediaSessionService service) {
         synchronized (TestServiceRegistry.class) {
             if (mService != null) {
                 fail("Previous service instance is still running. Clean up manually to ensure"
@@ -118,7 +118,7 @@
         }
     }
 
-    public MediaSessionService2 getServiceInstance() {
+    public MediaSessionService getServiceInstance() {
         synchronized (TestServiceRegistry.class) {
             return mService;
         }
@@ -128,7 +128,7 @@
         synchronized (TestServiceRegistry.class) {
             if (mService != null) {
                 // TODO(jaewan): Remove this, and override SessionService#onDestroy() to do this
-                List<MediaSession2> sessions = mService.getSessions();
+                List<MediaSession> sessions = mService.getSessions();
                 for (int i = 0; i < sessions.size(); i++) {
                     sessions.get(i).close();
                 }
@@ -151,6 +151,6 @@
     }
 
     public interface OnGetSessionHandler {
-        MediaSession2 onGetSession();
+        MediaSession onGetSession();
     }
 }
diff --git a/media2/src/androidTest/java/androidx/media2/TestUtils.java b/media2/src/androidTest/java/androidx/media2/TestUtils.java
index 34b4ef2..9a6250a 100644
--- a/media2/src/androidTest/java/androidx/media2/TestUtils.java
+++ b/media2/src/androidTest/java/androidx/media2/TestUtils.java
@@ -16,6 +16,12 @@
 
 package androidx.media2;
 
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_NONE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_BROWSABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DURATION;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_ID;
+import static androidx.media2.MediaMetadata.METADATA_KEY_PLAYABLE;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -28,11 +34,12 @@
 import android.os.Looper;
 
 import androidx.core.util.ObjectsCompat;
-import androidx.media2.MediaLibraryService2.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryParams;
 
 import java.io.FileDescriptor;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -49,14 +56,14 @@
      * @param id
      * @return
      */
-    public static SessionToken2 getServiceToken(Context context, String id) {
+    public static SessionToken getServiceToken(Context context, String id) {
         switch (id) {
-            case MockMediaSessionService2.ID:
-                return new SessionToken2(context, new ComponentName(
-                        context.getPackageName(), MockMediaSessionService2.class.getName()));
-            case MockMediaLibraryService2.ID:
-                return new SessionToken2(context, new ComponentName(
-                        context.getPackageName(), MockMediaLibraryService2.class.getName()));
+            case MockMediaSessionService.ID:
+                return new SessionToken(context, new ComponentName(
+                        context.getPackageName(), MockMediaSessionService.class.getName()));
+            case MockMediaLibraryService.ID:
+                return new SessionToken(context, new ComponentName(
+                        context.getPackageName(), MockMediaLibraryService.class.getName()));
         }
         fail("Unknown id=" + id);
         return null;
@@ -108,17 +115,15 @@
      * @param size list size
      * @return the newly created media item list
      */
-    public static List<MediaItem2> createMediaItems(int size) {
-        final List<MediaItem2> list = new ArrayList<>();
+    public static List<MediaItem> createMediaItems(int size) {
+        final List<MediaItem> list = new ArrayList<>();
         String caller = Thread.currentThread().getStackTrace()[3].getMethodName();
         for (int i = 0; i < size; i++) {
-            MediaItem2 item = new FileMediaItem2.Builder(new FileDescriptor())
-                    .setMetadata(new MediaMetadata2.Builder()
-                            .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID,
-                                    caller + "_item_" + (size + 1))
-                            .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE,
-                                    MediaMetadata2.BROWSABLE_TYPE_NONE)
-                            .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+            MediaItem item = new FileMediaItem.Builder(new FileDescriptor())
+                    .setMetadata(new MediaMetadata.Builder()
+                            .putString(METADATA_KEY_MEDIA_ID, caller + "_item_" + (size + 1))
+                            .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
+                            .putLong(METADATA_KEY_PLAYABLE, 1)
                             .build())
                     .build();
             list.add(item);
@@ -149,8 +154,8 @@
      * @return the newly created media item
      * @see #createMetadata()
      */
-    public static MediaItem2 createMediaItemWithMetadata() {
-        return new FileMediaItem2.Builder(new FileDescriptor())
+    public static MediaItem createMediaItemWithMetadata() {
+        return new FileMediaItem.Builder(new FileDescriptor())
                 .setMetadata(createMetadata()).build();
     }
 
@@ -161,12 +166,12 @@
      *
      * @return the newly created media item
      */
-    public static MediaMetadata2 createMetadata() {
+    public static MediaMetadata createMetadata() {
         String mediaId = Thread.currentThread().getStackTrace()[3].getMethodName();
-        return new MediaMetadata2.Builder()
-                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId)
-                .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE, MediaMetadata2.BROWSABLE_TYPE_NONE)
-                .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+        return new MediaMetadata.Builder()
+                .putString(METADATA_KEY_MEDIA_ID, mediaId)
+                .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
+                .putLong(METADATA_KEY_PLAYABLE, 1)
                 .build();
     }
 
@@ -175,22 +180,22 @@
      *
      * @return the newly created media item
      */
-    public static MediaMetadata2 createMetadata(String mediaId, long duration) {
-        return new MediaMetadata2.Builder()
-                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId)
-                .putLong(MediaMetadata2.METADATA_KEY_DURATION, duration)
-                .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE, MediaMetadata2.BROWSABLE_TYPE_NONE)
-                .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+    public static MediaMetadata createMetadata(String mediaId, long duration) {
+        return new MediaMetadata.Builder()
+                .putString(METADATA_KEY_MEDIA_ID, mediaId)
+                .putLong(METADATA_KEY_DURATION, duration)
+                .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
+                .putLong(METADATA_KEY_PLAYABLE, 1)
                 .build();
     }
 
     /**
-     * Create a {@link MediaItem2} with the id.
+     * Create a {@link MediaItem} with the id.
      *
      * @return the newly created media item.
      */
-    public static MediaItem2 createMediaItem(String mediaId) {
-        return new MediaItem2.Builder().setMetadata(createMetadata(mediaId, 0)).build();
+    public static MediaItem createMediaItem(String mediaId) {
+        return new MediaItem.Builder().setMetadata(createMetadata(mediaId, 0)).build();
     }
 
     public static LibraryParams createLibraryParams() {
@@ -207,15 +212,15 @@
      * @param a a list
      * @param b another list
      */
-    public static void assertMediaItemListEquals(List<MediaItem2> a, List<MediaItem2> b) {
+    public static void assertMediaItemListEquals(List<MediaItem> a, List<MediaItem> b) {
         if (a == null || b == null) {
             assertEquals(a, b);
         }
         assertEquals(a.size(), b.size());
 
         for (int i = 0; i < a.size(); i++) {
-            MediaItem2 aItem = a.get(i);
-            MediaItem2 bItem = b.get(i);
+            MediaItem aItem = a.get(i);
+            MediaItem bItem = b.get(i);
 
             if (aItem == null || bItem == null) {
                 assertEquals(aItem, bItem);
@@ -225,13 +230,13 @@
             assertEquals(aItem.getMediaId(), bItem.getMediaId());
             TestUtils.assertMetadataEquals(aItem.getMetadata(), bItem.getMetadata());
 
-            // Note: Here it does not check whether MediaItem2 are equal,
+            // Note: Here it does not check whether MediaItem are equal,
             // since there DataSourceDec is not comparable.
         }
     }
 
-    public static void assertPaginatedListEquals(List<MediaItem2> fullList, int page, int pageSize,
-            List<MediaItem2> paginatedList) {
+    public static void assertPaginatedListEquals(List<MediaItem> fullList, int page, int pageSize,
+            List<MediaItem> paginatedList) {
         int fromIndex = page * pageSize;
         int toIndex = Math.min((page + 1) * pageSize, fullList.size());
         // Compare the given results with originals.
@@ -241,22 +246,28 @@
         }
     }
 
-    public static void assertMetadataEquals(MediaMetadata2 a, MediaMetadata2 b) {
-        if (a == null || b == null) {
-            assertEquals(a, b);
+    public static void assertMetadataEquals(MediaMetadata expected, MediaMetadata actual) {
+        if (expected == null || actual == null) {
+            assertEquals(expected, actual);
         } else {
-            assertTrue(TestUtils.equals(a.toBundle(), b.toBundle()));
+            Set<String> expectedKeySet = expected.keySet();
+            Set<String> actualKeySet = actual.keySet();
+
+            assertEquals(expectedKeySet, actualKeySet);
+            for (String key : expectedKeySet) {
+                assertEquals(expected.getObject(key), actual.getObject(key));
+            }
         }
     }
 
-    public static void assertMediaItemWithId(String expectedId, MediaItem2 item) {
+    public static void assertMediaItemWithId(String expectedId, MediaItem item) {
         assertNotNull(item);
         assertNotNull(item.getMetadata());
         assertEquals(expectedId, item.getMetadata().getString(
-                MediaMetadata2.METADATA_KEY_MEDIA_ID));
+                METADATA_KEY_MEDIA_ID));
     }
 
-    public static void assertMediaItemEquals(MediaItem2 a, MediaItem2 b) {
+    public static void assertMediaItemEquals(MediaItem a, MediaItem b) {
         if (a == null || b == null) {
             assertEquals(a, b);
         } else {
diff --git a/media2/src/androidTest/java/androidx/media2/TimedMetaData2Test.java b/media2/src/androidTest/java/androidx/media2/TimedMetaDataTest.java
similarity index 88%
rename from media2/src/androidTest/java/androidx/media2/TimedMetaData2Test.java
rename to media2/src/androidTest/java/androidx/media2/TimedMetaDataTest.java
index ac7e218..052d00c 100644
--- a/media2/src/androidTest/java/androidx/media2/TimedMetaData2Test.java
+++ b/media2/src/androidTest/java/androidx/media2/TimedMetaDataTest.java
@@ -28,16 +28,16 @@
 import java.util.Arrays;
 
 /**
- * Tests {@link TimedMetaData2}.
+ * Tests {@link TimedMetaData}.
  */
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-public class TimedMetaData2Test extends MediaTestBase {
+public class TimedMetaDataTest extends MediaTestBase {
 
     @Test
     public void testConstructor() {
         byte[] meta = new byte[] { 0x42, 0x4f };
-        TimedMetaData2 timedMeta = new TimedMetaData2(123, meta);
+        TimedMetaData timedMeta = new TimedMetaData(123, meta);
         assertEquals(123, timedMeta.getTimestamp());
         assertTrue(Arrays.equals(meta, timedMeta.getMetaData()));
     }
diff --git a/media2/src/main/aidl/androidx/media2/IMediaController2.aidl b/media2/src/main/aidl/androidx/media2/IMediaController.aidl
similarity index 83%
rename from media2/src/main/aidl/androidx/media2/IMediaController2.aidl
rename to media2/src/main/aidl/androidx/media2/IMediaController.aidl
index df889c8..55c85ecad5 100644
--- a/media2/src/main/aidl/androidx/media2/IMediaController2.aidl
+++ b/media2/src/main/aidl/androidx/media2/IMediaController.aidl
@@ -19,18 +19,18 @@
 import android.app.PendingIntent;
 import android.os.Bundle;
 
-import androidx.media2.IMediaSession2;
+import androidx.media2.IMediaSession;
 import androidx.media2.ParcelImplListSlice;
 import androidx.versionedparcelable.ParcelImpl;
 
 /**
- * Interface from MediaSession2 to MediaController2.
+ * Interface from MediaSession to MediaController.
  * <p>
  * Keep this interface oneway. Otherwise a malicious app may implement fake version of this,
  * and holds calls from session to make session owner(s) frozen.
  * @hide
  */
-oneway interface IMediaController2 {
+oneway interface IMediaController {
     void onCurrentMediaItemChanged(in ParcelImpl item) = 0;
     void onPlayerStateChanged(long eventTimeMs, long positionMs, int state) = 1;
     void onPlaybackSpeedChanged(long eventTimeMs, long positionMs, float speed) = 2;
@@ -40,27 +40,26 @@
     void onPlaybackInfoChanged(in ParcelImpl playbackInfo) = 6;
     void onRepeatModeChanged(int repeatMode) = 7;
     void onShuffleModeChanged(int shuffleMode) = 8;
-    void onPlaybackCompleted() = 23;
-    void onSeekCompleted(long eventTimeMs, long positionMs, long seekPositionMs) = 9;
-    void onRoutesInfoChanged(in List<Bundle> routes) = 11;
+    void onPlaybackCompleted() = 9;
+    void onSeekCompleted(long eventTimeMs, long positionMs, long seekPositionMs) = 10;
 
-    void onConnected(IMediaSession2 sessionBinder, in ParcelImpl commandGroup, int playerState,
+    void onConnected(IMediaSession sessionBinder, in ParcelImpl commandGroup, int playerState,
         in ParcelImpl currentItem, long positionEventTimeMs, long positionMs, float playbackSpeed,
         long bufferedPositionMs, in ParcelImpl playbackInfo, int repeatMode, int shuffleMode,
-        in ParcelImplListSlice listSlice, in PendingIntent sessionActivity) = 12;
-    void onDisconnected() = 13;
+        in ParcelImplListSlice listSlice, in PendingIntent sessionActivity) = 11;
+    void onDisconnected() = 12;
 
-    void onSetCustomLayout(int seq, in List<ParcelImpl> commandButtonlist) = 14;
-    void onAllowedCommandsChanged(in ParcelImpl commandGroup) = 15;
-    void onCustomCommand(int seq, in ParcelImpl command, in Bundle args) = 16;
+    void onSetCustomLayout(int seq, in List<ParcelImpl> commandButtonlist) = 13;
+    void onAllowedCommandsChanged(in ParcelImpl commandGroup) = 14;
+    void onCustomCommand(int seq, in ParcelImpl command, in Bundle args) = 15;
 
-    void onSessionResult(int seq, in ParcelImpl sessionResult) = 24;
-    void onLibraryResult(int seq, in ParcelImpl libraryResult) = 25;
+    void onSessionResult(int seq, in ParcelImpl sessionResult) = 16;
+    void onLibraryResult(int seq, in ParcelImpl libraryResult) = 17;
 
     //////////////////////////////////////////////////////////////////////////////////////////////
     // Browser sepcific
     //////////////////////////////////////////////////////////////////////////////////////////////
-    void onChildrenChanged(String parentId, int itemCount, in ParcelImpl libraryParams) = 19;
-    void onSearchResultChanged(String query, int itemCount, in ParcelImpl libraryParams) = 21;
-    // Next Id : 26
+    void onChildrenChanged(String parentId, int itemCount, in ParcelImpl libraryParams) = 18;
+    void onSearchResultChanged(String query, int itemCount, in ParcelImpl libraryParams) = 19;
+    // Next Id : 20
 }
diff --git a/media2/src/main/aidl/androidx/media2/IMediaSession.aidl b/media2/src/main/aidl/androidx/media2/IMediaSession.aidl
new file mode 100644
index 0000000..5d4dc0f
--- /dev/null
+++ b/media2/src/main/aidl/androidx/media2/IMediaSession.aidl
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2;
+
+import android.os.Bundle;
+import android.net.Uri;
+
+import androidx.media2.IMediaController;
+import androidx.media2.ParcelImplListSlice;
+import androidx.versionedparcelable.ParcelImpl;
+
+/**
+ * Interface from MediaController to MediaSession.
+ * <p>
+ * Keep this interface oneway. Otherwise a malicious app may implement fake version of this,
+ * and holds calls from session to make session owner(s) frozen.
+ * @hide
+ */
+oneway interface IMediaSession {
+    void connect(IMediaController caller, int seq, String callingPackage) = 0;
+    void release(IMediaController caller, int seq) = 1;
+
+    void setVolumeTo(IMediaController caller, int seq, int value, int flags) = 2;
+    void adjustVolume(IMediaController caller, int seq, int direction, int flags) = 3;
+
+    void play(IMediaController caller, int seq) = 4;
+    void pause(IMediaController caller, int seq) = 5;
+    void prepare(IMediaController caller, int seq) = 6;
+    void fastForward(IMediaController caller, int seq) = 7;
+    void rewind(IMediaController caller, int seq) = 8;
+    void skipForward(IMediaController caller, int seq) = 9;
+    void skipBackward(IMediaController caller, int seq) = 10;
+    void seekTo(IMediaController caller, int seq, long pos) = 11;
+    void onCustomCommand(IMediaController caller, int seq, in ParcelImpl sessionCommand,
+            in Bundle args) = 12;
+    void prepareFromUri(IMediaController caller, int seq, in Uri uri, in Bundle extras) = 13;
+    void prepareFromSearch(IMediaController caller, int seq, String query, in Bundle extras) = 14;
+    void prepareFromMediaId(IMediaController caller, int seq, String mediaId,
+            in Bundle extras) = 15;
+    void playFromUri(IMediaController caller, int seq, in Uri uri, in Bundle extras) = 16;
+    void playFromSearch(IMediaController caller, int seq, String query, in Bundle extras) = 17;
+    void playFromMediaId(IMediaController caller, int seq, String mediaId, in Bundle extras) = 18;
+    void setRating(IMediaController caller, int seq, String mediaId, in ParcelImpl rating) = 19;
+    void setPlaybackSpeed(IMediaController caller, int seq, float speed) = 20;
+
+    void setPlaylist(IMediaController caller, int seq, in List<String> list,
+            in ParcelImpl metadata) = 21;
+    void setMediaItem(IMediaController caller, int seq, String mediaId) = 22;
+    void updatePlaylistMetadata(IMediaController caller, int seq, in ParcelImpl metadata) = 23;
+    void addPlaylistItem(IMediaController caller, int seq, int index, String mediaId) = 24;
+    void removePlaylistItem(IMediaController caller, int seq, int index) = 25;
+    void replacePlaylistItem(IMediaController caller, int seq, int index, String mediaId) = 26;
+    void skipToPlaylistItem(IMediaController caller, int seq, int index) = 27;
+    void skipToPreviousItem(IMediaController caller, int seq) = 28;
+    void skipToNextItem(IMediaController caller, int seq) = 29;
+    void setRepeatMode(IMediaController caller, int seq, int repeatMode) = 30;
+    void setShuffleMode(IMediaController caller, int seq, int shuffleMode) = 31;
+
+    void onControllerResult(IMediaController caller, int seq,
+            in ParcelImpl controllerResult) = 32;
+
+    //////////////////////////////////////////////////////////////////////////////////////////////
+    // library service specific
+    //////////////////////////////////////////////////////////////////////////////////////////////
+    void getLibraryRoot(IMediaController caller, int seq, in ParcelImpl libraryParams) = 33;
+    void getItem(IMediaController caller, int seq, String mediaId) = 34;
+    void getChildren(IMediaController caller, int seq, String parentId, int page, int pageSize,
+            in ParcelImpl libraryParams) = 35;
+    void search(IMediaController caller, int seq, String query, in ParcelImpl libraryParams) = 36;
+    void getSearchResult(IMediaController caller, int seq, String query, int page, int pageSize,
+            in ParcelImpl libraryParams) = 37;
+    void subscribe(IMediaController caller, int seq, String parentId,
+            in ParcelImpl libraryParams) = 38;
+    void unsubscribe(IMediaController caller, int seq, String parentId) = 39;
+    // Next Id : 40
+}
diff --git a/media2/src/main/aidl/androidx/media2/IMediaSession2.aidl b/media2/src/main/aidl/androidx/media2/IMediaSession2.aidl
deleted file mode 100644
index ca995f6..0000000
--- a/media2/src/main/aidl/androidx/media2/IMediaSession2.aidl
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media2;
-
-import android.os.Bundle;
-import android.net.Uri;
-
-import androidx.media2.IMediaController2;
-import androidx.media2.ParcelImplListSlice;
-import androidx.versionedparcelable.ParcelImpl;
-
-/**
- * Interface from MediaController2 to MediaSession2.
- * <p>
- * Keep this interface oneway. Otherwise a malicious app may implement fake version of this,
- * and holds calls from session to make session owner(s) frozen.
- * @hide
- */
-oneway interface IMediaSession2 {
-    void connect(IMediaController2 caller, int seq, String callingPackage) = 0;
-    void release(IMediaController2 caller, int seq) = 1;
-
-    void setVolumeTo(IMediaController2 caller, int seq, int value, int flags) = 2;
-    void adjustVolume(IMediaController2 caller, int seq, int direction, int flags) = 3;
-
-    void play(IMediaController2 caller, int seq) = 4;
-    void pause(IMediaController2 caller, int seq) = 5;
-    void prepare(IMediaController2 caller, int seq) = 7;
-    void fastForward(IMediaController2 caller, int seq) = 8;
-    void rewind(IMediaController2 caller, int seq) = 9;
-    void skipForward(IMediaController2 caller, int seq) = 10;
-    void skipBackward(IMediaController2 caller, int seq) = 11;
-    void seekTo(IMediaController2 caller, int seq, long pos) = 12;
-    void onCustomCommand(IMediaController2 caller, int seq, in ParcelImpl sessionCommand2,
-            in Bundle args) = 13;
-    void prepareFromUri(IMediaController2 caller, int seq, in Uri uri, in Bundle extras) = 14;
-    void prepareFromSearch(IMediaController2 caller, int seq, String query, in Bundle extras) = 15;
-    void prepareFromMediaId(IMediaController2 caller, int seq, String mediaId,
-            in Bundle extras) = 16;
-    void playFromUri(IMediaController2 caller, int seq, in Uri uri, in Bundle extras) = 17;
-    void playFromSearch(IMediaController2 caller, int seq, String query, in Bundle extras) = 18;
-    void playFromMediaId(IMediaController2 caller, int seq, String mediaId, in Bundle extras) = 19;
-    void setRating(IMediaController2 caller, int seq, String mediaId, in ParcelImpl rating2) = 20;
-    void setPlaybackSpeed(IMediaController2 caller, int seq, float speed) = 21;
-
-    void setPlaylist(IMediaController2 caller, int seq, in List<String> list,
-            in ParcelImpl metadata) = 22;
-    void setMediaItem(IMediaController2 caller, int seq, String mediaId) = 23;
-    void updatePlaylistMetadata(IMediaController2 caller, int seq, in ParcelImpl metadata) = 24;
-    void addPlaylistItem(IMediaController2 caller, int seq, int index, String mediaId) = 25;
-    void removePlaylistItem(IMediaController2 caller, int seq, int index) = 26;
-    void replacePlaylistItem(IMediaController2 caller, int seq, int index, String mediaId) = 27;
-    void skipToPlaylistItem(IMediaController2 caller, int seq, int index) = 28;
-    void skipToPreviousItem(IMediaController2 caller, int seq) = 29;
-    void skipToNextItem(IMediaController2 caller, int seq) = 30;
-    void setRepeatMode(IMediaController2 caller, int seq, int repeatMode) = 31;
-    void setShuffleMode(IMediaController2 caller, int seq, int shuffleMode) = 32;
-
-    void subscribeRoutesInfo(IMediaController2 caller, int seq) = 33;
-    void unsubscribeRoutesInfo(IMediaController2 caller, int seq) = 34;
-    void selectRoute(IMediaController2 caller, int seq, in Bundle route) = 35;
-
-    void onControllerResult(IMediaController2 caller, int seq,
-            in ParcelImpl controllerResult) = 46;
-
-    //////////////////////////////////////////////////////////////////////////////////////////////
-    // library service specific
-    //////////////////////////////////////////////////////////////////////////////////////////////
-    void getLibraryRoot(IMediaController2 caller, int seq, in ParcelImpl libraryParams) = 37;
-    void getItem(IMediaController2 caller, int seq, String mediaId) = 38;
-    void getChildren(IMediaController2 caller, int seq, String parentId, int page, int pageSize,
-            in ParcelImpl libraryParams) = 39;
-    void search(IMediaController2 caller, int seq, String query, in ParcelImpl libraryParams) = 40;
-    void getSearchResult(IMediaController2 caller, int seq, String query, int page, int pageSize,
-            in ParcelImpl libraryParams) = 41;
-    void subscribe(IMediaController2 caller, int seq, String parentId,
-            in ParcelImpl libraryParams) = 42;
-    void unsubscribe(IMediaController2 caller, int seq, String parentId) = 43;
-    // Next Id : 44
-}
diff --git a/media2/src/main/aidl/androidx/media2/IMediaSessionService2.aidl b/media2/src/main/aidl/androidx/media2/IMediaSessionService.aidl
similarity index 81%
rename from media2/src/main/aidl/androidx/media2/IMediaSessionService2.aidl
rename to media2/src/main/aidl/androidx/media2/IMediaSessionService.aidl
index 65f7cee..835979a 100644
--- a/media2/src/main/aidl/androidx/media2/IMediaSessionService2.aidl
+++ b/media2/src/main/aidl/androidx/media2/IMediaSessionService.aidl
@@ -20,17 +20,17 @@
 import android.os.ResultReceiver;
 import android.net.Uri;
 
-import androidx.media2.IMediaController2;
+import androidx.media2.IMediaController;
 import androidx.versionedparcelable.ParcelImpl;
 
 /**
- * Interface from MediaController2 to MediaSessionService2.
+ * Interface from MediaController to MediaSessionService.
  * <p>
  * Keep this interface oneway. Otherwise a malicious app may implement fake version of this,
  * and holds calls from session to make session owner(s) frozen.
  * @hide
  */
-oneway interface IMediaSessionService2 {
-    void connect(IMediaController2 caller, String callingPackage) = 0;
+oneway interface IMediaSessionService {
+    void connect(IMediaController caller, String callingPackage) = 0;
     // Next Id : 1
 }
diff --git a/media2/src/main/java/androidx/media2/AudioFocusHandler.java b/media2/src/main/java/androidx/media2/AudioFocusHandler.java
index 7d41b71..324623ee 100644
--- a/media2/src/main/java/androidx/media2/AudioFocusHandler.java
+++ b/media2/src/main/java/androidx/media2/AudioFocusHandler.java
@@ -17,7 +17,7 @@
 package androidx.media2;
 
 import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE;
-import static androidx.media2.SessionPlayer2.PLAYER_STATE_PAUSED;
+import static androidx.media2.SessionPlayer.PLAYER_STATE_PAUSED;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -271,7 +271,7 @@
 
         // Converts {@link AudioAttributesCompat} to one of the audio focus request. This follows
         // the class Javadoc of {@link AudioFocusRequest}.
-        // Note: Any change here should also reflects public Javadoc of {@link MediaSession2}.
+        // Note: Any change here should also reflects public Javadoc of {@link MediaSession}.
         private static int convertAudioAttributesToFocusGain(
                 final AudioAttributesCompat audioAttributesCompat) {
 
diff --git a/media2/src/main/java/androidx/media2/BaseResult2.java b/media2/src/main/java/androidx/media2/BaseResult.java
similarity index 91%
rename from media2/src/main/java/androidx/media2/BaseResult2.java
rename to media2/src/main/java/androidx/media2/BaseResult.java
index c316ef3..2978e63d 100644
--- a/media2/src/main/java/androidx/media2/BaseResult2.java
+++ b/media2/src/main/java/androidx/media2/BaseResult.java
@@ -19,8 +19,8 @@
 import androidx.annotation.Nullable;
 
 /**
- * Base interface for all result classes in {@link MediaSession2}, {@link MediaController2},
- * and {@link SessionPlayer2}, for defining result codes in one place with documentation.
+ * Base interface for all result classes in {@link MediaSession}, {@link MediaController},
+ * and {@link SessionPlayer}, for defining result codes in one place with documentation.
  * <p>
  * Error code: Negative integer
  * Success code: 0
@@ -31,7 +31,7 @@
  *  500 <= |code| < 1000: Browser/Library session specific code.
  * 1000 <= |code|       : Custom session player result code.
  */
-interface BaseResult2 {
+interface BaseResult {
     /**
      * Result code representing that the command is successfully completed.
      */
@@ -86,5 +86,5 @@
     long getCompletionTime();
 
     // Subclasses should write its own documentation.
-    @Nullable MediaItem2 getMediaItem();
+    @Nullable MediaItem getMediaItem();
 }
diff --git a/media2/src/main/java/androidx/media2/CallbackMediaItem2.java b/media2/src/main/java/androidx/media2/CallbackMediaItem.java
similarity index 63%
rename from media2/src/main/java/androidx/media2/CallbackMediaItem2.java
rename to media2/src/main/java/androidx/media2/CallbackMediaItem.java
index db2aba2..5ccbc97 100644
--- a/media2/src/main/java/androidx/media2/CallbackMediaItem2.java
+++ b/media2/src/main/java/androidx/media2/CallbackMediaItem.java
@@ -23,67 +23,67 @@
 import androidx.versionedparcelable.VersionedParcelize;
 
 /**
- * Structure for media item descriptor for {@link DataSourceCallback2}.
+ * Structure for media item descriptor for {@link DataSourceCallback}.
  * <p>
- * Users should use {@link Builder} to create {@link CallbackMediaItem2}.
+ * Users should use {@link Builder} to create {@link CallbackMediaItem}.
  * <p>
  * You cannot directly send this object across the process through {@link ParcelUtils}. See
- * {@link MediaItem2} for detail.
+ * {@link MediaItem} for detail.
  *
- * @see MediaItem2
+ * @see MediaItem
  */
 @VersionedParcelize(isCustom = true)
-public class CallbackMediaItem2 extends MediaItem2 {
+public class CallbackMediaItem extends MediaItem {
     @NonParcelField
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    DataSourceCallback2 mDataSourceCallback2;
+            DataSourceCallback mDataSourceCallback;
 
     /**
      * Used for VersionedParcelable
      */
-    CallbackMediaItem2() {
+    CallbackMediaItem() {
         // no-op
     }
 
-    CallbackMediaItem2(Builder builder) {
+    CallbackMediaItem(Builder builder) {
         super(builder);
-        mDataSourceCallback2 = builder.mDataSourceCallback2;
+        mDataSourceCallback = builder.mDataSourceCallback;
     }
 
     /**
-     * Return the DataSourceCallback2 that implements the callback for the data source of this media
+     * Return the DataSourceCallback that implements the callback for the data source of this media
      * item.
      *
-     * @return the DataSourceCallback2 that implements the callback for the data source of this
+     * @return the DataSourceCallback that implements the callback for the data source of this
      *         media item,
      */
-    public @NonNull DataSourceCallback2 getDataSourceCallback2() {
-        return mDataSourceCallback2;
+    public @NonNull DataSourceCallback getDataSourceCallback() {
+        return mDataSourceCallback;
     }
 
     /**
-     * This Builder class simplifies the creation of a {@link CallbackMediaItem2} object.
+     * This Builder class simplifies the creation of a {@link CallbackMediaItem} object.
      */
     public static final class Builder extends BuilderBase<Builder> {
 
         @SuppressWarnings("WeakerAccess") /* synthetic access */
-        DataSourceCallback2 mDataSourceCallback2;
+                DataSourceCallback mDataSourceCallback;
 
         /**
          * Creates a new Builder object.
-         * @param dsc2 the DataSourceCallback2 for the media you want to play
+         * @param dsc2 the DataSourceCallback for the media you want to play
          */
-        public Builder(@NonNull DataSourceCallback2 dsc2) {
+        public Builder(@NonNull DataSourceCallback dsc2) {
             Preconditions.checkNotNull(dsc2);
-            mDataSourceCallback2 = dsc2;
+            mDataSourceCallback = dsc2;
         }
 
         /**
-         * @return A new CallbackMediaItem2 with values supplied by the Builder.
+         * @return A new CallbackMediaItem with values supplied by the Builder.
          */
         @Override
-        public @NonNull CallbackMediaItem2 build() {
-            return new CallbackMediaItem2(this);
+        public @NonNull CallbackMediaItem build() {
+            return new CallbackMediaItem(this);
         }
     }
 }
diff --git a/media2/src/main/java/androidx/media2/ConnectedControllersManager.java b/media2/src/main/java/androidx/media2/ConnectedControllersManager.java
index c9d81db..1fb9c73 100644
--- a/media2/src/main/java/androidx/media2/ConnectedControllersManager.java
+++ b/media2/src/main/java/androidx/media2/ConnectedControllersManager.java
@@ -22,9 +22,9 @@
 import androidx.annotation.Nullable;
 import androidx.collection.ArrayMap;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.MediaSession2Impl;
-import androidx.media2.SessionCommand2.CommandCode;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.MediaSessionImpl;
+import androidx.media2.SessionCommand.CommandCode;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,7 +38,7 @@
 
     private final Object mLock = new Object();
     @GuardedBy("mLock")
-    private final ArrayMap<ControllerInfo, SessionCommandGroup2> mAllowedCommandGroupMap =
+    private final ArrayMap<ControllerInfo, SessionCommandGroup> mAllowedCommandGroupMap =
             new ArrayMap<>();
     @GuardedBy("mLock")
     private final ArrayMap<ControllerInfo, SequencedFutureManager>
@@ -49,13 +49,13 @@
     private final ArrayMap<ControllerInfo, T> mKeys = new ArrayMap<>();
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    final MediaSession2Impl mSessionImpl;
+    final MediaSessionImpl mSessionImpl;
 
-    ConnectedControllersManager(MediaSession2Impl session) {
+    ConnectedControllersManager(MediaSessionImpl session) {
         mSessionImpl = session;
     }
 
-    public void addController(T key, ControllerInfo controller, SessionCommandGroup2 commands) {
+    public void addController(T key, ControllerInfo controller, SessionCommandGroup commands) {
         if (key == null || controller == null) {
             if (DEBUG) {
                 throw new IllegalArgumentException("key nor controller shouldn't be null");
@@ -71,7 +71,7 @@
         // TODO: Also notify controller connected.
     }
 
-    public void updateAllowedCommands(ControllerInfo controller, SessionCommandGroup2 commands) {
+    public void updateAllowedCommands(ControllerInfo controller, SessionCommandGroup commands) {
         synchronized (mLock) {
             if (!mAllowedCommandGroupMap.containsKey(controller)) {
                 if (DEBUG) {
@@ -186,8 +186,8 @@
         }
     }
 
-    public boolean isAllowedCommand(ControllerInfo controller, SessionCommand2 command) {
-        SessionCommandGroup2 allowedCommands;
+    public boolean isAllowedCommand(ControllerInfo controller, SessionCommand command) {
+        SessionCommandGroup allowedCommands;
         synchronized (mLock) {
             allowedCommands = mAllowedCommandGroupMap.get(controller);
         }
@@ -195,7 +195,7 @@
     }
 
     public boolean isAllowedCommand(ControllerInfo controller, @CommandCode int commandCode) {
-        SessionCommandGroup2 allowedCommands;
+        SessionCommandGroup allowedCommands;
         synchronized (mLock) {
             allowedCommands = mAllowedCommandGroupMap.get(controller);
         }
diff --git a/media2/src/main/java/androidx/media2/DataSourceCallback2.java b/media2/src/main/java/androidx/media2/DataSourceCallback.java
similarity index 89%
rename from media2/src/main/java/androidx/media2/DataSourceCallback2.java
rename to media2/src/main/java/androidx/media2/DataSourceCallback.java
index fe53777..8e3ba24 100644
--- a/media2/src/main/java/androidx/media2/DataSourceCallback2.java
+++ b/media2/src/main/java/androidx/media2/DataSourceCallback.java
@@ -28,12 +28,12 @@
  *
  * <p class="note">Methods of this interface may be called on multiple different
  * threads. There will be a thread synchronization point between each call to ensure that
- * modifications to the state of your DataSourceCallback2 are visible to future calls. This means
+ * modifications to the state of your DataSourceCallback are visible to future calls. This means
  * you don't need to do your own synchronization unless you're modifying the
- * DataSourceCallback2 from another thread while it's being used by the media library.</p>
+ * DataSourceCallback from another thread while it's being used by the media library.</p>
  *
  */
-public abstract class DataSourceCallback2 implements Closeable {
+public abstract class DataSourceCallback implements Closeable {
     /**
      * Called to request data from the given position.
      *
diff --git a/media2/src/main/java/androidx/media2/FileMediaItem2.java b/media2/src/main/java/androidx/media2/FileMediaItem.java
similarity index 92%
rename from media2/src/main/java/androidx/media2/FileMediaItem2.java
rename to media2/src/main/java/androidx/media2/FileMediaItem.java
index a2f941f..fc07021 100644
--- a/media2/src/main/java/androidx/media2/FileMediaItem2.java
+++ b/media2/src/main/java/androidx/media2/FileMediaItem.java
@@ -27,15 +27,15 @@
 /**
  * Structure for media item for a file.
  * <p>
- * Users should use {@link Builder} to create {@link FileMediaItem2}.
+ * Users should use {@link Builder} to create {@link FileMediaItem}.
  * <p>
  * You cannot directly send this object across the process through {@link ParcelUtils}. See
- * {@link MediaItem2} for detail.
+ * {@link MediaItem} for detail.
  *
- * @see MediaItem2
+ * @see MediaItem
  */
 @VersionedParcelize(isCustom = true)
-public class FileMediaItem2 extends MediaItem2 {
+public class FileMediaItem extends MediaItem {
     /**
      * Used when the length of file descriptor is unknown.
      *
@@ -56,11 +56,11 @@
     /**
      * Used for VersionedParcelable
      */
-    FileMediaItem2() {
+    FileMediaItem() {
         // no-op
     }
 
-    FileMediaItem2(Builder builder) {
+    FileMediaItem(Builder builder) {
         super(builder);
         mFD = builder.mFD;
         mFDOffset = builder.mFDOffset;
@@ -77,7 +77,7 @@
 
     /**
      * Return the offset associated with the FileDescriptor of this media item.
-     * It's meaningful only when it has been set by the {@link MediaItem2.Builder}.
+     * It's meaningful only when it has been set by the {@link MediaItem.Builder}.
      * @return the offset associated with the FileDescriptor of this media item
      */
     public long getFileDescriptorOffset() {
@@ -94,7 +94,7 @@
     }
 
     /**
-     * This Builder class simplifies the creation of a {@link FileMediaItem2} object.
+     * This Builder class simplifies the creation of a {@link FileMediaItem} object.
      */
     public static final class Builder extends BuilderBase<Builder> {
 
@@ -145,11 +145,11 @@
         }
 
         /**
-         * @return A new FileMediaItem2 with values supplied by the Builder.
+         * @return A new FileMediaItem with values supplied by the Builder.
          */
         @Override
-        public @NonNull FileMediaItem2 build() {
-            return new FileMediaItem2(this);
+        public @NonNull FileMediaItem build() {
+            return new FileMediaItem(this);
         }
     }
 }
diff --git a/media2/src/main/java/androidx/media2/HeartRating2.java b/media2/src/main/java/androidx/media2/HeartRating.java
similarity index 83%
rename from media2/src/main/java/androidx/media2/HeartRating2.java
rename to media2/src/main/java/androidx/media2/HeartRating.java
index 638f73a..d58127e 100644
--- a/media2/src/main/java/androidx/media2/HeartRating2.java
+++ b/media2/src/main/java/androidx/media2/HeartRating.java
@@ -25,7 +25,7 @@
  * This can be used to indicate the content referred to is a favorite (or not).
  */
 @VersionedParcelize
-public final class HeartRating2 implements Rating2 {
+public final class HeartRating implements Rating {
     @ParcelField(1)
     boolean mIsRated;
 
@@ -33,18 +33,18 @@
     boolean mHasHeart;
 
     /**
-     * Creates a unrated HeartRating2 instance.
+     * Creates a unrated HeartRating instance.
      */
-    public HeartRating2() {
+    public HeartRating() {
         mIsRated = false;
     }
 
     /**
-     * Creates a HeartRating2 instance.
+     * Creates a HeartRating instance.
      *
      * @param hasHeart true for a "heart selected" rating, false for "heart unselected".
      */
-    public HeartRating2(boolean hasHeart) {
+    public HeartRating(boolean hasHeart) {
         mHasHeart = hasHeart;
         mIsRated = true;
     }
@@ -61,16 +61,16 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof HeartRating2)) {
+        if (!(obj instanceof HeartRating)) {
             return false;
         }
-        HeartRating2 other = (HeartRating2) obj;
+        HeartRating other = (HeartRating) obj;
         return mHasHeart == other.mHasHeart && mIsRated == other.mIsRated;
     }
 
     @Override
     public String toString() {
-        return "HeartRating2: " + (mIsRated ? "hasHeart=" + mHasHeart : "unrated");
+        return "HeartRating: " + (mIsRated ? "hasHeart=" + mHasHeart : "unrated");
     }
 
     /**
diff --git a/media2/src/main/java/androidx/media2/MediaBrowser2.java b/media2/src/main/java/androidx/media2/MediaBrowser.java
similarity index 88%
rename from media2/src/main/java/androidx/media2/MediaBrowser2.java
rename to media2/src/main/java/androidx/media2/MediaBrowser.java
index cfd9305..9739381 100644
--- a/media2/src/main/java/androidx/media2/MediaBrowser2.java
+++ b/media2/src/main/java/androidx/media2/MediaBrowser.java
@@ -30,9 +30,9 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.concurrent.futures.ResolvableFuture;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaLibraryService.MediaLibrarySession;
 import androidx.versionedparcelable.NonParcelField;
 import androidx.versionedparcelable.ParcelField;
 
@@ -44,16 +44,16 @@
 import java.util.concurrent.Executor;
 
 /**
- * Browses media content offered by a {@link MediaLibraryService2}.
+ * Browses media content offered by a {@link MediaLibraryService}.
  */
-public class MediaBrowser2 extends MediaController2 {
-    static final String TAG = "MediaBrowser2";
+public class MediaBrowser extends MediaController {
+    static final String TAG = "MediaBrowser";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     /**
-     * Callback to listen events from {@link MediaLibraryService2}.
+     * Callback to listen events from {@link MediaLibraryService}.
      */
-    public static class BrowserCallback extends MediaController2.ControllerCallback {
+    public static class BrowserCallback extends MediaController.ControllerCallback {
         /**
          * Called when there's change in the parent's children after you've subscribed to the parent
          * with {@link #subscribe}.
@@ -68,12 +68,12 @@
          * @param params library params from the library service. Can be differ from params
          *               that you've specified with {@link #subscribe(String, LibraryParams)}.
          */
-        public void onChildrenChanged(@NonNull MediaBrowser2 browser, @NonNull String parentId,
+        public void onChildrenChanged(@NonNull MediaBrowser browser, @NonNull String parentId,
                 @IntRange(from = 0) int itemCount, @Nullable LibraryParams params) { }
 
         /**
          * Called when there's change in the search result requested by the previous
-         * {@link MediaBrowser2#search(String, LibraryParams)}.
+         * {@link MediaBrowser#search(String, LibraryParams)}.
          *
          * @param browser the browser for this event
          * @param query non-empty search query that you've specified with
@@ -82,30 +82,30 @@
          * @param params library params from the library service. Can be differ from params
          *               that you've specified with {@link #search(String, LibraryParams)}.
          */
-        public void onSearchResultChanged(@NonNull MediaBrowser2 browser, @NonNull String query,
+        public void onSearchResultChanged(@NonNull MediaBrowser browser, @NonNull String query,
                 @IntRange(from = 0) int itemCount, @Nullable LibraryParams params) { }
     }
 
-    public MediaBrowser2(@NonNull Context context, @NonNull SessionToken2 token,
+    public MediaBrowser(@NonNull Context context, @NonNull SessionToken token,
             @NonNull /*@CallbackExecutor*/ Executor executor, @NonNull BrowserCallback callback) {
         super(context, token, executor, callback);
     }
 
     @Override
-    MediaBrowser2Impl createImpl(@NonNull Context context, @NonNull SessionToken2 token,
-            @NonNull Executor executor, @NonNull MediaController2.ControllerCallback callback) {
+    MediaBrowserImpl createImpl(@NonNull Context context, @NonNull SessionToken token,
+            @NonNull Executor executor, @NonNull MediaController.ControllerCallback callback) {
         if (token.isLegacySession()) {
-            return new MediaBrowser2ImplLegacy(
+            return new MediaBrowserImplLegacy(
                     context, this, token, executor, (BrowserCallback) callback);
         } else {
-            return new MediaBrowser2ImplBase(
+            return new MediaBrowserImplBase(
                     context, this, token, executor, (BrowserCallback) callback);
         }
     }
 
     @Override
-    MediaBrowser2Impl getImpl() {
-        return (MediaBrowser2Impl) super.getImpl();
+    MediaBrowserImpl getImpl() {
+        return (MediaBrowserImpl) super.getImpl();
     }
 
     @Override
@@ -132,7 +132,7 @@
 
     /**
      * Subscribes to a parent id for the change in its children. When there's a change,
-     * {@link BrowserCallback#onChildrenChanged(MediaBrowser2, String, int, LibraryParams)} will be
+     * {@link BrowserCallback#onChildrenChanged(MediaBrowser, String, int, LibraryParams)} will be
      * called with the library params. You should call
      * {@link #getChildren(String, int, int, LibraryParams)} to get the items under the parent.
      *
@@ -283,7 +283,7 @@
     // Specify full name to workaround build error 'cannot find symbol'
     @androidx.versionedparcelable.VersionedParcelize(isCustom = true)
     public static class BrowserResult extends androidx.versionedparcelable.CustomVersionedParcelable
-            implements RemoteResult2 {
+            implements RemoteResult {
         /**
          * @hide
          */
@@ -313,12 +313,12 @@
         @ParcelField(2)
         long mCompletionTime;
         @ParcelField(3)
-        MediaItem2 mItem;
+        MediaItem mItem;
         @ParcelField(4)
         LibraryParams mParams;
         // Mark list of media items NonParcelField to send the list through the ParcelImpListSlice.
         @NonParcelField
-        List<MediaItem2> mItemList;
+        List<MediaItem> mItemList;
         @ParcelField(5)
         ParcelImplListSlice mItemListSlice;
 
@@ -331,23 +331,23 @@
             this(resultCode, null, null, null);
         }
 
-        BrowserResult(@ResultCode int resultCode, @Nullable MediaItem2 item,
+        BrowserResult(@ResultCode int resultCode, @Nullable MediaItem item,
                 @Nullable LibraryParams params) {
             this(resultCode, item, null, params);
         }
 
-        BrowserResult(@ResultCode int resultCode, @Nullable List<MediaItem2> items,
+        BrowserResult(@ResultCode int resultCode, @Nullable List<MediaItem> items,
                 @Nullable LibraryParams params) {
             this(resultCode, null, items, params);
         }
 
-        BrowserResult(@ResultCode int resultCode, @Nullable MediaItem2 item,
-                @Nullable List<MediaItem2> items, @Nullable LibraryParams params) {
+        BrowserResult(@ResultCode int resultCode, @Nullable MediaItem item,
+                @Nullable List<MediaItem> items, @Nullable LibraryParams params) {
             this(resultCode, item, items, params, SystemClock.elapsedRealtime());
         }
 
-        BrowserResult(@ResultCode int resultCode, @Nullable MediaItem2 item,
-                @Nullable List<MediaItem2> items, @Nullable LibraryParams params,
+        BrowserResult(@ResultCode int resultCode, @Nullable MediaItem item,
+                @Nullable List<MediaItem> items, @Nullable LibraryParams params,
                 long elapsedTime) {
             mResultCode = resultCode;
             mItem = item;
@@ -413,11 +413,11 @@
          * Can be {@code null} if an error happened or the command doesn't return a media item.
          *
          * @return media item
-         * @see MediaBrowser2#getLibraryRoot(LibraryParams)
-         * @see MediaBrowser2#getItem(String)
+         * @see MediaBrowser#getLibraryRoot(LibraryParams)
+         * @see MediaBrowser#getItem(String)
          */
         @Override
-        public @Nullable MediaItem2 getMediaItem() {
+        public @Nullable MediaItem getMediaItem() {
             return mItem;
         }
 
@@ -428,10 +428,10 @@
          * items.
          *
          * @return list of media item
-         * @see MediaBrowser2#getSearchResult(String, int, int, LibraryParams)
-         * @see MediaBrowser2#getChildren(String, int, int, LibraryParams)
+         * @see MediaBrowser#getSearchResult(String, int, int, LibraryParams)
+         * @see MediaBrowser#getChildren(String, int, int, LibraryParams)
          **/
-        public @Nullable List<MediaItem2> getMediaItems() {
+        public @Nullable List<MediaItem> getMediaItems() {
             return mItemList;
         }
 
@@ -451,7 +451,7 @@
         @RestrictTo(LIBRARY)
         @Override
         public void onPreParceling(boolean isStream) {
-            mItemListSlice = MediaUtils2.convertMediaItem2ListToParcelImplListSlice(mItemList);
+            mItemListSlice = MediaUtils.convertMediaItemListToParcelImplListSlice(mItemList);
         }
 
         /**
@@ -460,12 +460,12 @@
         @RestrictTo(LIBRARY)
         @Override
         public void onPostParceling() {
-            mItemList = MediaUtils2.convertParcelImplListSliceToMediaItem2List(mItemListSlice);
+            mItemList = MediaUtils.convertParcelImplListSliceToMediaItemList(mItemListSlice);
             mItemListSlice = null;
         }
     }
 
-    interface MediaBrowser2Impl extends MediaController2Impl {
+    interface MediaBrowserImpl extends MediaControllerImpl {
         ListenableFuture<BrowserResult> getLibraryRoot(@Nullable LibraryParams rootHints);
         ListenableFuture<BrowserResult> subscribe(@NonNull String parentId,
                 @Nullable LibraryParams params);
diff --git a/media2/src/main/java/androidx/media2/MediaBrowser2ImplBase.java b/media2/src/main/java/androidx/media2/MediaBrowserImplBase.java
similarity index 60%
rename from media2/src/main/java/androidx/media2/MediaBrowser2ImplBase.java
rename to media2/src/main/java/androidx/media2/MediaBrowserImplBase.java
index 9e7482e..0efcb9a 100644
--- a/media2/src/main/java/androidx/media2/MediaBrowser2ImplBase.java
+++ b/media2/src/main/java/androidx/media2/MediaBrowserImplBase.java
@@ -16,24 +16,24 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_DISCONNECTED;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_PERMISSION_DENIED;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_SKIPPED;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_LIBRARY_GET_CHILDREN;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_LIBRARY_GET_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_LIBRARY_SEARCH;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_LIBRARY_SUBSCRIBE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_LIBRARY_UNSUBSCRIBE;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_DISCONNECTED;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_PERMISSION_DENIED;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_SKIPPED;
+import static androidx.media2.SessionCommand.COMMAND_CODE_LIBRARY_GET_CHILDREN;
+import static androidx.media2.SessionCommand.COMMAND_CODE_LIBRARY_GET_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT;
+import static androidx.media2.SessionCommand.COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT;
+import static androidx.media2.SessionCommand.COMMAND_CODE_LIBRARY_SEARCH;
+import static androidx.media2.SessionCommand.COMMAND_CODE_LIBRARY_SUBSCRIBE;
+import static androidx.media2.SessionCommand.COMMAND_CODE_LIBRARY_UNSUBSCRIBE;
 
 import android.content.Context;
 import android.os.RemoteException;
 import android.util.Log;
 
-import androidx.media2.MediaBrowser2.BrowserCallback;
-import androidx.media2.MediaBrowser2.BrowserResult;
-import androidx.media2.MediaLibraryService2.LibraryParams;
+import androidx.media2.MediaBrowser.BrowserCallback;
+import androidx.media2.MediaBrowser.BrowserResult;
+import androidx.media2.MediaLibraryService.LibraryParams;
 import androidx.media2.SequencedFutureManager.SequencedFuture;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -41,14 +41,14 @@
 import java.util.concurrent.Executor;
 
 /**
- * Base implementation of MediaBrowser2.
+ * Base implementation of MediaBrowser.
  */
-class MediaBrowser2ImplBase extends MediaController2ImplBase implements
-        MediaBrowser2.MediaBrowser2Impl {
+class MediaBrowserImplBase extends MediaControllerImplBase implements
+        MediaBrowser.MediaBrowserImpl {
     private static final BrowserResult RESULT_WHEN_CLOSED =
             new BrowserResult(RESULT_CODE_SKIPPED);
 
-    MediaBrowser2ImplBase(Context context, MediaController2 instance, SessionToken2 token,
+    MediaBrowserImplBase(Context context, MediaController instance, SessionToken token,
             Executor executor, BrowserCallback callback) {
         super(context, instance, token, executor, callback);
     }
@@ -63,9 +63,9 @@
         return dispatchRemoteLibrarySessionTask(COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT,
                 new RemoteLibrarySessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.getLibraryRoot(mControllerStub, seq,
-                                MediaUtils2.toParcelable(params));
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.getLibraryRoot(mControllerStub, seq,
+                                MediaUtils.toParcelable(params));
                     }
                 });
     }
@@ -76,9 +76,9 @@
         return dispatchRemoteLibrarySessionTask(COMMAND_CODE_LIBRARY_SUBSCRIBE,
                 new RemoteLibrarySessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.subscribe(mControllerStub, seq, parentId,
-                                MediaUtils2.toParcelable(params));
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.subscribe(mControllerStub, seq, parentId,
+                                MediaUtils.toParcelable(params));
                     }
                 });
     }
@@ -88,8 +88,8 @@
         return dispatchRemoteLibrarySessionTask(COMMAND_CODE_LIBRARY_UNSUBSCRIBE,
                 new RemoteLibrarySessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.unsubscribe(mControllerStub, seq, parentId);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.unsubscribe(mControllerStub, seq, parentId);
                     }
                 });
     }
@@ -100,9 +100,9 @@
         return dispatchRemoteLibrarySessionTask(COMMAND_CODE_LIBRARY_GET_CHILDREN,
                 new RemoteLibrarySessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.getChildren(mControllerStub, seq, parentId, page, pageSize,
-                                MediaUtils2.toParcelable(params));
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.getChildren(mControllerStub, seq, parentId, page, pageSize,
+                                MediaUtils.toParcelable(params));
                     }
                 });
     }
@@ -112,8 +112,8 @@
         return dispatchRemoteLibrarySessionTask(COMMAND_CODE_LIBRARY_GET_ITEM,
                 new RemoteLibrarySessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.getItem(mControllerStub, seq, mediaId);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.getItem(mControllerStub, seq, mediaId);
                     }
                 });
     }
@@ -123,9 +123,9 @@
         return dispatchRemoteLibrarySessionTask(COMMAND_CODE_LIBRARY_SEARCH,
                 new RemoteLibrarySessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.search(mControllerStub, seq, query,
-                                MediaUtils2.toParcelable(params));
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.search(mControllerStub, seq, query,
+                                MediaUtils.toParcelable(params));
                     }
                 });
     }
@@ -136,26 +136,26 @@
         return dispatchRemoteLibrarySessionTask(COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT,
                 new RemoteLibrarySessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.getSearchResult(mControllerStub, seq, query, page, pageSize,
-                                MediaUtils2.toParcelable(params));
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.getSearchResult(mControllerStub, seq, query, page, pageSize,
+                                MediaUtils.toParcelable(params));
                     }
                 });
     }
 
     @FunctionalInterface
     private interface RemoteLibrarySessionTask {
-        void run(IMediaSession2 iSession2, int seq) throws RemoteException;
+        void run(IMediaSession iSession, int seq) throws RemoteException;
     }
 
     private ListenableFuture<BrowserResult> dispatchRemoteLibrarySessionTask(int commandCode,
             RemoteLibrarySessionTask task) {
-        final IMediaSession2 iSession2 = getSessionInterfaceIfAble(commandCode);
-        if (iSession2 != null) {
+        final IMediaSession iSession = getSessionInterfaceIfAble(commandCode);
+        if (iSession != null) {
             final SequencedFuture<BrowserResult> result =
                     mSequencedFutureManager.createSequencedFuture(RESULT_WHEN_CLOSED);
             try {
-                task.run(iSession2, result.getSequenceNumber());
+                task.run(iSession, result.getSequenceNumber());
             } catch (RemoteException e) {
                 Log.w(TAG, "Cannot connect to the service or the session is gone", e);
                 result.set(new BrowserResult(RESULT_CODE_DISCONNECTED));
diff --git a/media2/src/main/java/androidx/media2/MediaBrowser2ImplLegacy.java b/media2/src/main/java/androidx/media2/MediaBrowserImplLegacy.java
similarity index 74%
rename from media2/src/main/java/androidx/media2/MediaBrowser2ImplLegacy.java
rename to media2/src/main/java/androidx/media2/MediaBrowserImplLegacy.java
index bb07a19..5397685 100644
--- a/media2/src/main/java/androidx/media2/MediaBrowser2ImplLegacy.java
+++ b/media2/src/main/java/androidx/media2/MediaBrowserImplLegacy.java
@@ -16,16 +16,19 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_DISCONNECTED;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaBrowser2.BrowserResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_DISCONNECTED;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaBrowser.BrowserResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_MIXED;
+import static androidx.media2.MediaMetadata.METADATA_KEY_BROWSABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_ID;
+import static androidx.media2.MediaMetadata.METADATA_KEY_PLAYABLE;
 
 import android.content.Context;
 import android.os.Bundle;
 import android.support.v4.media.MediaBrowserCompat;
 import android.support.v4.media.MediaBrowserCompat.ItemCallback;
-import android.support.v4.media.MediaBrowserCompat.MediaItem;
 import android.support.v4.media.MediaBrowserCompat.SubscriptionCallback;
 import android.text.TextUtils;
 import android.util.Log;
@@ -34,10 +37,10 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.concurrent.futures.ResolvableFuture;
-import androidx.media2.MediaBrowser2.BrowserCallback;
-import androidx.media2.MediaBrowser2.BrowserResult;
-import androidx.media2.MediaBrowser2.MediaBrowser2Impl;
-import androidx.media2.MediaLibraryService2.LibraryParams;
+import androidx.media2.MediaBrowser.BrowserCallback;
+import androidx.media2.MediaBrowser.BrowserResult;
+import androidx.media2.MediaBrowser.MediaBrowserImpl;
+import androidx.media2.MediaLibraryService.LibraryParams;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -47,9 +50,9 @@
 import java.util.concurrent.Executor;
 
 /**
- * Implementation of MediaBrowser2 with the {@link MediaBrowserCompat} for legacy support.
+ * Implementation of MediaBrowser with the {@link MediaBrowserCompat} for legacy support.
  */
-class MediaBrowser2ImplLegacy extends MediaController2ImplLegacy implements MediaBrowser2Impl {
+class MediaBrowserImplLegacy extends MediaControllerImplLegacy implements MediaBrowserImpl {
     private static final String TAG = "MB2ImplLegacy";
 
     @GuardedBy("mLock")
@@ -58,22 +61,22 @@
     @GuardedBy("mLock")
     private final HashMap<String, List<SubscribeCallback>> mSubscribeCallbacks = new HashMap<>();
 
-    MediaBrowser2ImplLegacy(@NonNull Context context, MediaBrowser2 instance,
-            @NonNull SessionToken2 token, @NonNull /*@CallbackExecutor*/ Executor executor,
+    MediaBrowserImplLegacy(@NonNull Context context, MediaBrowser instance,
+            @NonNull SessionToken token, @NonNull /*@CallbackExecutor*/ Executor executor,
             @NonNull BrowserCallback callback) {
         super(context, instance, token, executor, callback);
     }
 
     @Override
-    public MediaBrowser2 getInstance() {
-        return (MediaBrowser2) super.getInstance();
+    public MediaBrowser getInstance() {
+        return (MediaBrowser) super.getInstance();
     }
 
     @Override
     public void close() {
         synchronized (mLock) {
-            for (MediaBrowserCompat browser : mBrowserCompats.values()) {
-                browser.disconnect();
+            for (MediaBrowserCompat browserCompat : mBrowserCompats.values()) {
+                browserCompat.disconnect();
             }
             mBrowserCompats.clear();
             // Ensure that ControllerCallback#onDisconnected() is called by super.close().
@@ -84,17 +87,18 @@
     @Override
     public ListenableFuture<BrowserResult> getLibraryRoot(@Nullable final LibraryParams params) {
         final ResolvableFuture<BrowserResult> result = ResolvableFuture.create();
-        final MediaBrowserCompat browser = getBrowserCompat(params);
-        if (browser != null) {
+        final MediaBrowserCompat browserCompat = getBrowserCompat(params);
+        if (browserCompat != null) {
             // Already connected with the given extras.
-            result.set(new BrowserResult(RESULT_CODE_SUCCESS, createRootMediaItem(browser), null));
+            result.set(new BrowserResult(RESULT_CODE_SUCCESS, createRootMediaItem(browserCompat),
+                    null));
         } else {
             getCallbackExecutor().execute(new Runnable() {
                 @Override
                 public void run() {
                     // Do this on the callback executor to set the looper of MediaBrowserCompat's
                     // callback handler to this looper.
-                    Bundle rootHints = MediaUtils2.convertToRootHints(params);
+                    Bundle rootHints = MediaUtils.convertToRootHints(params);
                     MediaBrowserCompat newBrowser = new MediaBrowserCompat(getContext(),
                             getConnectedSessionToken().getComponentName(),
                             new GetLibraryRootCallback(result, params), rootHints);
@@ -111,8 +115,8 @@
     @Override
     public ListenableFuture<BrowserResult> subscribe(@NonNull String parentId,
             @Nullable LibraryParams params) {
-        MediaBrowserCompat browser = getBrowserCompat();
-        if (browser == null) {
+        MediaBrowserCompat browserCompat = getBrowserCompat();
+        if (browserCompat == null) {
             return BrowserResult.createFutureWithResult(RESULT_CODE_DISCONNECTED);
         }
         SubscribeCallback callback = new SubscribeCallback();
@@ -124,7 +128,7 @@
             }
             list.add(callback);
         }
-        browser.subscribe(parentId, getExtras(params), callback);
+        browserCompat.subscribe(parentId, getExtras(params), callback);
 
         // No way to get result. Just return success.
         return BrowserResult.createFutureWithResult(BrowserResult.RESULT_CODE_SUCCESS);
@@ -132,8 +136,8 @@
 
     @Override
     public ListenableFuture<BrowserResult> unsubscribe(@NonNull String parentId) {
-        MediaBrowserCompat browser = getBrowserCompat();
-        if (browser == null) {
+        MediaBrowserCompat browserCompat = getBrowserCompat();
+        if (browserCompat == null) {
             return BrowserResult.createFutureWithResult(RESULT_CODE_DISCONNECTED);
         }
         // Note: don't use MediaBrowserCompat#unsubscribe(String) here, to keep the subscription
@@ -144,7 +148,7 @@
                 return BrowserResult.createFutureWithResult(RESULT_CODE_BAD_VALUE);
             }
             for (int i = 0; i < list.size(); i++) {
-                browser.unsubscribe(parentId, list.get(i));
+                browserCompat.unsubscribe(parentId, list.get(i));
             }
         }
 
@@ -155,8 +159,8 @@
     @Override
     public ListenableFuture<BrowserResult> getChildren(@NonNull String parentId, int page,
             int pageSize, @Nullable LibraryParams params) {
-        MediaBrowserCompat browser = getBrowserCompat();
-        if (browser == null) {
+        MediaBrowserCompat browserCompat = getBrowserCompat();
+        if (browserCompat == null) {
             return BrowserResult.createFutureWithResult(RESULT_CODE_DISCONNECTED);
         }
 
@@ -164,26 +168,26 @@
         Bundle options = createBundle(params);
         options.putInt(MediaBrowserCompat.EXTRA_PAGE, page);
         options.putInt(MediaBrowserCompat.EXTRA_PAGE_SIZE, pageSize);
-        browser.subscribe(parentId, options, new GetChildrenCallback(future, parentId));
+        browserCompat.subscribe(parentId, options, new GetChildrenCallback(future, parentId));
         return future;
     }
 
     @Override
     public ListenableFuture<BrowserResult> getItem(@NonNull final String mediaId) {
-        MediaBrowserCompat browser = getBrowserCompat();
-        if (browser == null) {
+        MediaBrowserCompat browserCompat = getBrowserCompat();
+        if (browserCompat == null) {
             return BrowserResult.createFutureWithResult(RESULT_CODE_DISCONNECTED);
         }
         final ResolvableFuture<BrowserResult> result = ResolvableFuture.create();
-        browser.getItem(mediaId, new ItemCallback() {
+        browserCompat.getItem(mediaId, new ItemCallback() {
             @Override
-            public void onItemLoaded(final MediaItem item) {
+            public void onItemLoaded(final MediaBrowserCompat.MediaItem item) {
                 getCallbackExecutor().execute(new Runnable() {
                     @Override
                     public void run() {
                         if (item != null) {
                             result.set(new BrowserResult(RESULT_CODE_SUCCESS,
-                                    MediaUtils2.convertToMediaItem2(item), null));
+                                    MediaUtils.convertToMediaItem(item), null));
                         } else {
                             result.set(new BrowserResult(RESULT_CODE_BAD_VALUE));
                         }
@@ -207,21 +211,21 @@
     @Override
     public ListenableFuture<BrowserResult> search(@NonNull String query,
             @Nullable LibraryParams params) {
-        MediaBrowserCompat browser = getBrowserCompat();
-        if (browser == null) {
+        MediaBrowserCompat browserCompat = getBrowserCompat();
+        if (browserCompat == null) {
             return BrowserResult.createFutureWithResult(RESULT_CODE_DISCONNECTED);
         }
-        browser.search(query, getExtras(params), new MediaBrowserCompat.SearchCallback() {
+        browserCompat.search(query, getExtras(params), new MediaBrowserCompat.SearchCallback() {
             @Override
             public void onSearchResult(final String query, final Bundle extras,
-                    final List<MediaItem> items) {
+                    final List<MediaBrowserCompat.MediaItem> items) {
                 getCallbackExecutor().execute(new Runnable() {
                     @Override
                     public void run() {
                         // Set extra null here, because 'extra' have different meanings between old
                         // API and new API as follows.
                         // - Old API: Extra/Option specified with search().
-                        // - New API: Extra from MediaLibraryService2 to MediaBrowser2
+                        // - New API: Extra from MediaLibraryService to MediaBrowser
                         // TODO(Post-P): Cache search result for later getSearchResult() calls.
                         getCallback().onSearchResultChanged(
                                 getInstance(), query, items.size(), null);
@@ -237,7 +241,7 @@
                         // Set extra null here, because 'extra' have different meanings between old
                         // API and new API as follows.
                         // - Old API: Extra/Option specified with search().
-                        // - New API: Extra from MediaLibraryService2 to MediaBrowser2
+                        // - New API: Extra from MediaLibraryService to MediaBrowser
                         getCallback().onSearchResultChanged(
                                 getInstance(), query, 0, null);
                     }
@@ -251,8 +255,8 @@
     @Override
     public ListenableFuture<BrowserResult> getSearchResult(final @NonNull String query,
             final int page, final int pageSize, final @Nullable LibraryParams param) {
-        MediaBrowserCompat browser = getBrowserCompat();
-        if (browser == null) {
+        MediaBrowserCompat browserCompat = getBrowserCompat();
+        if (browserCompat == null) {
             return BrowserResult.createFutureWithResult(RESULT_CODE_DISCONNECTED);
         }
 
@@ -260,15 +264,15 @@
         Bundle options = createBundle(param);
         options.putInt(MediaBrowserCompat.EXTRA_PAGE, page);
         options.putInt(MediaBrowserCompat.EXTRA_PAGE_SIZE, pageSize);
-        browser.search(query, options, new MediaBrowserCompat.SearchCallback() {
+        browserCompat.search(query, options, new MediaBrowserCompat.SearchCallback() {
             @Override
             public void onSearchResult(final String query, final Bundle extrasSent,
-                    final List<MediaItem> items) {
+                    final List<MediaBrowserCompat.MediaItem> items) {
                 getCallbackExecutor().execute(new Runnable() {
                     @Override
                     public void run() {
-                        List<MediaItem2> item2List =
-                                MediaUtils2.convertMediaItemListToMediaItem2List(items);
+                        List<MediaItem> item2List =
+                                MediaUtils.convertMediaItemListToMediaItemList(items);
                         future.set(new BrowserResult(RESULT_CODE_SUCCESS, item2List, null));
                     }
                 });
@@ -308,15 +312,15 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaItem2 createRootMediaItem(@NonNull MediaBrowserCompat browser) {
+    MediaItem createRootMediaItem(@NonNull MediaBrowserCompat browserCompat) {
         // TODO: Query again with getMediaItem() to get real media item.
-        MediaMetadata2 metadata = new MediaMetadata2.Builder()
-                .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, browser.getRoot())
-                .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE, MediaMetadata2.BROWSABLE_TYPE_MIXED)
-                .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 0)
-                .setExtras(browser.getExtras())
+        MediaMetadata metadata = new MediaMetadata.Builder()
+                .putString(METADATA_KEY_MEDIA_ID, browserCompat.getRoot())
+                .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_MIXED)
+                .putLong(METADATA_KEY_PLAYABLE, 0)
+                .setExtras(browserCompat.getExtras())
                 .build();
-        return new MediaItem2.Builder().setMetadata(metadata).build();
+        return new MediaItem.Builder().setMetadata(metadata).build();
     }
 
     private class GetLibraryRootCallback extends MediaBrowserCompat.ConnectionCallback {
@@ -331,16 +335,17 @@
 
         @Override
         public void onConnected() {
-            MediaBrowserCompat browser;
+            MediaBrowserCompat browserCompat;
             synchronized (mLock) {
-                browser = mBrowserCompats.get(mParams);
+                browserCompat = mBrowserCompats.get(mParams);
             }
-            if (browser == null) {
+            if (browserCompat == null) {
                 // Shouldn't be happen. Internal error?
                 mResult.set(new BrowserResult(RESULT_CODE_UNKNOWN_ERROR));
             } else {
-                mResult.set(new BrowserResult(RESULT_CODE_SUCCESS, createRootMediaItem(browser),
-                        MediaUtils2.convertToLibraryParams(mContext, browser.getExtras())));
+                mResult.set(new BrowserResult(RESULT_CODE_SUCCESS,
+                        createRootMediaItem(browserCompat),
+                        MediaUtils.convertToLibraryParams(mContext, browserCompat.getExtras())));
             }
         }
 
@@ -372,19 +377,19 @@
         }
 
         @Override
-        public void onChildrenLoaded(String parentId, List<MediaItem> children) {
+        public void onChildrenLoaded(String parentId, List<MediaBrowserCompat.MediaItem> children) {
             onChildrenLoaded(parentId, children, null);
         }
 
         @Override
-        public void onChildrenLoaded(final String parentId, List<MediaItem> children,
-                final Bundle options) {
+        public void onChildrenLoaded(final String parentId,
+                List<MediaBrowserCompat.MediaItem> children, final Bundle options) {
             if (TextUtils.isEmpty(parentId)) {
                 Log.w(TAG, "SubscribeCallback.onChildrenLoaded(): Ignoring empty parentId");
                 return;
             }
-            final MediaBrowserCompat browser = getBrowserCompat();
-            if (browser == null) {
+            final MediaBrowserCompat browserCompat = getBrowserCompat();
+            if (browserCompat == null) {
                 // Browser is closed.
                 return;
             }
@@ -392,12 +397,12 @@
             if (children != null) {
                 itemCount = children.size();
             } else {
-                // Currently no way to tell failures in MediaBrowser2#subscribe().
+                // Currently no way to tell failures in MediaBrowser#subscribe().
                 return;
             }
 
-            final LibraryParams params = MediaUtils2.convertToLibraryParams(mContext,
-                    browser.getNotifyChildrenChangedOptions());
+            final LibraryParams params = MediaUtils.convertToLibraryParams(mContext,
+                    browserCompat.getNotifyChildrenChangedOptions());
             getCallbackExecutor().execute(new Runnable() {
                 @Override
                 public void run() {
@@ -429,36 +434,36 @@
         }
 
         @Override
-        public void onChildrenLoaded(String parentId, List<MediaItem> children) {
+        public void onChildrenLoaded(String parentId, List<MediaBrowserCompat.MediaItem> children) {
             onChildrenLoaded(parentId, children, null);
         }
 
         @Override
-        public void onChildrenLoaded(final String parentId, List<MediaItem> children,
-                Bundle options) {
+        public void onChildrenLoaded(final String parentId,
+                List<MediaBrowserCompat.MediaItem> children, Bundle options) {
             if (TextUtils.isEmpty(parentId)) {
                 Log.w(TAG, "GetChildrenCallback.onChildrenLoaded(): Ignoring empty parentId");
                 return;
             }
-            MediaBrowserCompat browser = getBrowserCompat();
-            if (browser == null) {
+            MediaBrowserCompat browserCompat = getBrowserCompat();
+            if (browserCompat == null) {
                 mFuture.set(new BrowserResult(RESULT_CODE_DISCONNECTED));
                 return;
             }
-            browser.unsubscribe(mParentId, GetChildrenCallback.this);
+            browserCompat.unsubscribe(mParentId, GetChildrenCallback.this);
 
-            final List<MediaItem2> items = new ArrayList<>();
+            final List<MediaItem> items = new ArrayList<>();
             if (children == null) {
                 // list are non-Null, so it must be internal error.
                 mFuture.set(new BrowserResult(RESULT_CODE_UNKNOWN_ERROR));
             } else {
                 for (int i = 0; i < children.size(); i++) {
-                    items.add(MediaUtils2.convertToMediaItem2(children.get(i)));
+                    items.add(MediaUtils.convertToMediaItem(children.get(i)));
                 }
                 // Don't set extra here, because 'extra' have different meanings between old
                 // API and new API as follows.
                 // - Old API: Extra/Option specified with subscribe().
-                // - New API: Extra from MediaLibraryService2 to MediaBrowser2
+                // - New API: Extra from MediaLibraryService to MediaBrowser
                 mFuture.set(new BrowserResult(RESULT_CODE_SUCCESS, items, null));
             }
         }
diff --git a/media2/src/main/java/androidx/media2/MediaConstants.java b/media2/src/main/java/androidx/media2/MediaConstants.java
new file mode 100644
index 0000000..c655232
--- /dev/null
+++ b/media2/src/main/java/androidx/media2/MediaConstants.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2;
+
+class MediaConstants {
+    static final String CONTROLLER_COMMAND_BY_COMMAND_CODE =
+            "androidx.media2.controller.command.BY_COMMAND_CODE";
+
+    static final String ARGUMENT_COMMAND_CODE = "androidx.media2.argument.COMMAND_CODE";
+    static final String ARGUMENT_ICONTROLLER_CALLBACK =
+            "androidx.media2.argument.ICONTROLLER_CALLBACK";
+    static final String ARGUMENT_UID = "androidx.media2.argument.UID";
+    static final String ARGUMENT_PID = "androidx.media2.argument.PID";
+    static final String ARGUMENT_PACKAGE_NAME = "androidx.media2.argument.PACKAGE_NAME";
+
+    static final String ROOT_EXTRA_DEFAULT = "androidx.media2.root_default_root";
+
+    private MediaConstants() {
+    }
+}
diff --git a/media2/src/main/java/androidx/media2/MediaConstants2.java b/media2/src/main/java/androidx/media2/MediaConstants2.java
deleted file mode 100644
index 5c398ea..0000000
--- a/media2/src/main/java/androidx/media2/MediaConstants2.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media2;
-
-class MediaConstants2 {
-
-    static final int CONNECT_RESULT_CONNECTED = 0;
-    static final int CONNECT_RESULT_DISCONNECTED = -1;
-
-    // Event string used by IMediaControllerCallback.onEvent()
-    static final String SESSION_EVENT_ON_PLAYER_STATE_CHANGED =
-            "androidx.media2.session.event.ON_PLAYER_STATE_CHANGED";
-    static final String SESSION_EVENT_ON_CURRENT_MEDIA_ITEM_CHANGED =
-            "androidx.media2.session.event.ON_CURRENT_MEDIA_ITEM_CHANGED";
-    static final String SESSION_EVENT_ON_ERROR = "androidx.media2.session.event.ON_ERROR";
-    static final String SESSION_EVENT_ON_ROUTES_INFO_CHANGED =
-            "androidx.media2.session.event.ON_ROUTES_INFO_CHANGED";
-    static final String SESSION_EVENT_ON_PLAYBACK_INFO_CHANGED =
-            "androidx.media2.session.event.ON_PLAYBACK_INFO_CHANGED";
-    static final String SESSION_EVENT_ON_PLAYBACK_SPEED_CHANGED =
-            "androidx.media2.session.event.ON_PLAYBACK_SPEED_CHANGED";
-    static final String SESSION_EVENT_ON_BUFFERING_STATE_CHANGED =
-            "androidx.media2.session.event.ON_BUFFERING_STATE_CHANGED";
-    static final String SESSION_EVENT_ON_SEEK_COMPLETED =
-            "androidx.media2.session.event.ON_SEEK_COMPLETED";
-    static final String SESSION_EVENT_ON_REPEAT_MODE_CHANGED =
-            "androidx.media2.session.event.ON_REPEAT_MODE_CHANGED";
-    static final String SESSION_EVENT_ON_SHUFFLE_MODE_CHANGED =
-            "androidx.media2.session.event.ON_SHUFFLE_MODE_CHANGED";
-    static final String SESSION_EVENT_ON_PLAYLIST_CHANGED =
-            "androidx.media2.session.event.ON_PLAYLIST_CHANGED";
-    static final String SESSION_EVENT_ON_PLAYLIST_METADATA_CHANGED =
-            "androidx.media2.session.event.ON_PLAYLIST_METADATA_CHANGED";
-    static final String SESSION_EVENT_ON_ALLOWED_COMMANDS_CHANGED =
-            "androidx.media2.session.event.ON_ALLOWED_COMMANDS_CHANGED";
-    static final String SESSION_EVENT_ON_CHILDREN_CHANGED =
-            "androidx.media2.session.event.ON_CHILDREN_CHANGED";
-    static final String SESSION_EVENT_ON_SEARCH_RESULT_CHANGED =
-            "androidx.media2.session.event.ON_SEARCH_RESULT_CHANGED";
-    static final String SESSION_EVENT_SEND_CUSTOM_COMMAND =
-            "androidx.media2.session.event.SEND_CUSTOM_COMMAND";
-    static final String SESSION_EVENT_SET_CUSTOM_LAYOUT =
-            "androidx.media2.session.event.SET_CUSTOM_LAYOUT";
-
-    // Command string used by MediaControllerCompat.sendCommand()
-    static final String CONTROLLER_COMMAND_CONNECT = "androidx.media2.controller.command.CONNECT";
-    static final String CONTROLLER_COMMAND_DISCONNECT =
-            "androidx.media2.controller.command.DISCONNECT";
-    static final String CONTROLLER_COMMAND_BY_COMMAND_CODE =
-            "androidx.media2.controller.command.BY_COMMAND_CODE";
-    static final String CONTROLLER_COMMAND_BY_CUSTOM_COMMAND =
-            "androidx.media2.controller.command.BY_CUSTOM_COMMAND";
-
-
-    static final String ARGUMENT_COMMAND_CODE = "androidx.media2.argument.COMMAND_CODE";
-    static final String ARGUMENT_CUSTOM_COMMAND = "androidx.media2.argument.CUSTOM_COMMAND";
-    static final String ARGUMENT_ALLOWED_COMMANDS = "androidx.media2.argument.ALLOWED_COMMANDS";
-    static final String ARGUMENT_SEEK_POSITION = "androidx.media2.argument.SEEK_POSITION";
-    static final String ARGUMENT_PLAYER_STATE = "androidx.media2.argument.PLAYER_STATE";
-    static final String ARGUMENT_PLAYBACK_SPEED = "androidx.media2.argument.PLAYBACK_SPEED";
-    static final String ARGUMENT_BUFFERING_STATE = "androidx.media2.argument.BUFFERING_STATE";
-    static final String ARGUMENT_ERROR_CODE = "androidx.media2.argument.ERROR_CODE";
-    static final String ARGUMENT_REPEAT_MODE = "androidx.media2.argument.REPEAT_MODE";
-    static final String ARGUMENT_SHUFFLE_MODE = "androidx.media2.argument.SHUFFLE_MODE";
-    static final String ARGUMENT_PLAYLIST = "androidx.media2.argument.PLAYLIST";
-    static final String ARGUMENT_PLAYLIST_INDEX = "androidx.media2.argument.PLAYLIST_INDEX";
-    static final String ARGUMENT_PLAYLIST_METADATA = "androidx.media2.argument.PLAYLIST_METADATA";
-    static final String ARGUMENT_RATING = "androidx.media2.argument.RATING";
-    static final String ARGUMENT_MEDIA_ITEM = "androidx.media2.argument.MEDIA_ITEM";
-    static final String ARGUMENT_MEDIA_ID = "androidx.media2.argument.MEDIA_ID";
-    static final String ARGUMENT_QUERY = "androidx.media2.argument.QUERY";
-    static final String ARGUMENT_URI = "androidx.media2.argument.URI";
-    static final String ARGUMENT_PLAYBACK_STATE_COMPAT =
-            "androidx.media2.argument.PLAYBACK_STATE_COMPAT";
-    static final String ARGUMENT_VOLUME = "androidx.media2.argument.VOLUME";
-    static final String ARGUMENT_VOLUME_DIRECTION = "androidx.media2.argument.VOLUME_DIRECTION";
-    static final String ARGUMENT_VOLUME_FLAGS = "androidx.media2.argument.VOLUME_FLAGS";
-    static final String ARGUMENT_EXTRAS = "androidx.media2.argument.EXTRAS";
-    static final String ARGUMENT_ARGUMENTS = "androidx.media2.argument.ARGUMENTS";
-    static final String ARGUMENT_RESULT_RECEIVER = "androidx.media2.argument.RESULT_RECEIVER";
-    static final String ARGUMENT_COMMAND_BUTTONS = "androidx.media2.argument.COMMAND_BUTTONS";
-    static final String ARGUMENT_ROUTE_BUNDLE = "androidx.media2.argument.ROUTE_BUNDLE";
-    static final String ARGUMENT_PLAYBACK_INFO = "androidx.media2.argument.PLAYBACK_INFO";
-    static final String ARGUMENT_ITEM_COUNT = "androidx.media2.argument.ITEM_COUNT";
-
-    static final String ARGUMENT_ICONTROLLER_CALLBACK =
-            "androidx.media2.argument.ICONTROLLER_CALLBACK";
-    static final String ARGUMENT_UID = "androidx.media2.argument.UID";
-    static final String ARGUMENT_PID = "androidx.media2.argument.PID";
-    static final String ARGUMENT_PACKAGE_NAME = "androidx.media2.argument.PACKAGE_NAME";
-
-    static final String ROOT_EXTRA_DEFAULT = "androidx.media2.root_default_root";
-
-    private MediaConstants2() {
-    }
-}
diff --git a/media2/src/main/java/androidx/media2/MediaController2.java b/media2/src/main/java/androidx/media2/MediaController.java
similarity index 81%
rename from media2/src/main/java/androidx/media2/MediaController2.java
rename to media2/src/main/java/androidx/media2/MediaController.java
index bbd2b84..51d2231 100644
--- a/media2/src/main/java/androidx/media2/MediaController2.java
+++ b/media2/src/main/java/androidx/media2/MediaController.java
@@ -17,11 +17,11 @@
 package androidx.media2;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static androidx.media2.SessionPlayer2.BUFFERING_STATE_UNKNOWN;
-import static androidx.media2.SessionPlayer2.PLAYER_STATE_IDLE;
-import static androidx.media2.SessionPlayer2.REPEAT_MODE_NONE;
-import static androidx.media2.SessionPlayer2.SHUFFLE_MODE_NONE;
-import static androidx.media2.SessionPlayer2.UNKNOWN_TIME;
+import static androidx.media2.SessionPlayer.BUFFERING_STATE_UNKNOWN;
+import static androidx.media2.SessionPlayer.PLAYER_STATE_IDLE;
+import static androidx.media2.SessionPlayer.REPEAT_MODE_NONE;
+import static androidx.media2.SessionPlayer.SHUFFLE_MODE_NONE;
+import static androidx.media2.SessionPlayer.UNKNOWN_TIME;
 
 import android.annotation.TargetApi;
 import android.app.PendingIntent;
@@ -46,11 +46,11 @@
 import androidx.core.util.ObjectsCompat;
 import androidx.media.AudioAttributesCompat;
 import androidx.media.VolumeProviderCompat;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionResult;
-import androidx.media2.SessionPlayer2.RepeatMode;
-import androidx.media2.SessionPlayer2.ShuffleMode;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionResult;
+import androidx.media2.SessionPlayer.RepeatMode;
+import androidx.media2.SessionPlayer.ShuffleMode;
 import androidx.versionedparcelable.ParcelField;
 import androidx.versionedparcelable.VersionedParcelable;
 import androidx.versionedparcelable.VersionedParcelize;
@@ -63,11 +63,11 @@
 import java.util.concurrent.Executor;
 
 /**
- * Allows an app to interact with an active {@link MediaSession2} or a
- * {@link MediaSessionService2} which would provide {@link MediaSession2}. Media buttons and other
+ * Allows an app to interact with an active {@link MediaSession} or a
+ * {@link MediaSessionService} which would provide {@link MediaSession}. Media buttons and other
  * commands can be sent to the session.
  * <p>
- * MediaController2 objects are thread-safe.
+ * MediaController objects are thread-safe.
  * <p>
  * Topic covered here:
  * <ol>
@@ -76,32 +76,32 @@
  * <a name="ControllerLifeCycle"></a>
  * <h3>Controller Lifecycle</h3>
  * <p>
- * When a controller is created with the {@link SessionToken2} for a {@link MediaSession2} (i.e.
- * session token type is {@link SessionToken2#TYPE_SESSION}), the controller will connect to the
+ * When a controller is created with the {@link SessionToken} for a {@link MediaSession} (i.e.
+ * session token type is {@link SessionToken#TYPE_SESSION}), the controller will connect to the
  * specific session.
  * <p>
- * When a controller is created with the {@link SessionToken2} for a {@link MediaSessionService2}
- * (i.e. session token type is {@link SessionToken2#TYPE_SESSION_SERVICE} or
- * {@link SessionToken2#TYPE_LIBRARY_SERVICE}), the controller binds to the service for connecting
- * to a {@link MediaSession2} in it. {@link MediaSessionService2} will provide a session to connect.
+ * When a controller is created with the {@link SessionToken} for a {@link MediaSessionService}
+ * (i.e. session token type is {@link SessionToken#TYPE_SESSION_SERVICE} or
+ * {@link SessionToken#TYPE_LIBRARY_SERVICE}), the controller binds to the service for connecting
+ * to a {@link MediaSession} in it. {@link MediaSessionService} will provide a session to connect.
  * <p>
  * When a controller connects to a session,
- * {@link MediaSession2.SessionCallback#onConnect(MediaSession2, ControllerInfo)} will be called to
+ * {@link MediaSession.SessionCallback#onConnect(MediaSession, ControllerInfo)} will be called to
  * either accept or reject the connection. Wait
- * {@link ControllerCallback#onConnected(MediaController2, SessionCommandGroup2)} or
- * {@link ControllerCallback#onDisconnected(MediaController2)} for the result.
+ * {@link ControllerCallback#onConnected(MediaController, SessionCommandGroup)} or
+ * {@link ControllerCallback#onDisconnected(MediaController)} for the result.
  * <p>
  * When the connected session is closed, the controller will receive
- * {@link ControllerCallback#onDisconnected(MediaController2)}.
+ * {@link ControllerCallback#onDisconnected(MediaController)}.
  * <p>
  * When you're done, use {@link #close()} to clean up resources. This also helps session service
  * to be destroyed when there's no controller associated with it.
  *
- * @see MediaSession2
- * @see MediaSessionService2
+ * @see MediaSession
+ * @see MediaSessionService
  */
 @TargetApi(Build.VERSION_CODES.P)
-public class MediaController2 implements AutoCloseable {
+public class MediaController implements AutoCloseable {
     /**
      * @hide
      */
@@ -123,7 +123,7 @@
 
     final Object mLock = new Object();
     @GuardedBy("mLock")
-    MediaController2Impl mImpl;
+    MediaControllerImpl mImpl;
     @GuardedBy("mLock")
     boolean mClosed;
 
@@ -131,7 +131,7 @@
     Long mTimeDiff;
 
     /**
-     * Create a {@link MediaController2} from the {@link SessionToken2}.
+     * Create a {@link MediaController} from the {@link SessionToken}.
      * This connects to the session and may wake up the service if it's not available.
      *
      * @param context Context
@@ -139,7 +139,7 @@
      * @param executor executor to run callbacks on.
      * @param callback controller callback to receive changes in
      */
-    public MediaController2(@NonNull final Context context, @NonNull final SessionToken2 token,
+    public MediaController(@NonNull final Context context, @NonNull final SessionToken token,
             @NonNull final Executor executor, @NonNull final ControllerCallback callback) {
         if (context == null) {
             throw new IllegalArgumentException("context shouldn't be null");
@@ -159,7 +159,7 @@
     }
 
     /**
-     * Create a {@link MediaController2} from the {@link MediaSessionCompat.Token}.
+     * Create a {@link MediaController} from the {@link MediaSessionCompat.Token}.
      * This connects to the session and may wake up the service if it's not available.
      *
      * @param context Context
@@ -167,7 +167,7 @@
      * @param executor executor to run callbacks on.
      * @param callback controller callback to receive changes in
      */
-    public MediaController2(@NonNull final Context context,
+    public MediaController(@NonNull final Context context,
             @NonNull final MediaSessionCompat.Token token,
             @NonNull final Executor executor, @NonNull final ControllerCallback callback) {
         if (context == null) {
@@ -182,11 +182,11 @@
         if (executor == null) {
             throw new IllegalArgumentException("executor shouldn't be null");
         }
-        SessionToken2.createSessionToken2(context, token, executor,
-                new SessionToken2.OnSessionToken2CreatedListener() {
+        SessionToken.createSessionToken(context, token, executor,
+                new SessionToken.OnSessionTokenCreatedListener() {
                     @Override
-                    public void onSessionToken2Created(MediaSessionCompat.Token token,
-                            SessionToken2 token2) {
+                    public void onSessionTokenCreated(MediaSessionCompat.Token token,
+                            SessionToken token2) {
                         synchronized (mLock) {
                             if (!mClosed) {
                                 mImpl = createImpl(context, token2, executor, callback);
@@ -194,7 +194,7 @@
                                 executor.execute(new Runnable() {
                                     @Override
                                     public void run() {
-                                        callback.onDisconnected(MediaController2.this);
+                                        callback.onDisconnected(MediaController.this);
                                     }
                                 });
                             }
@@ -203,16 +203,16 @@
                 });
     }
 
-    MediaController2Impl createImpl(@NonNull Context context, @NonNull SessionToken2 token,
+    MediaControllerImpl createImpl(@NonNull Context context, @NonNull SessionToken token,
             @NonNull Executor executor, @NonNull ControllerCallback callback) {
         if (token.isLegacySession()) {
-            return new MediaController2ImplLegacy(context, this, token, executor, callback);
+            return new MediaControllerImplLegacy(context, this, token, executor, callback);
         } else {
-            return new MediaController2ImplBase(context, this, token, executor, callback);
+            return new MediaControllerImplBase(context, this, token, executor, callback);
         }
     }
 
-    MediaController2Impl getImpl() {
+    MediaControllerImpl getImpl() {
         synchronized (mLock) {
             return mImpl;
         }
@@ -225,7 +225,7 @@
     @Override
     public void close() {
         try {
-            MediaController2Impl impl;
+            MediaControllerImpl impl;
             synchronized (mLock) {
                 if (mClosed) {
                     return;
@@ -242,25 +242,25 @@
     }
 
     /**
-     * Returns {@link SessionToken2} of the connected session.
+     * Returns {@link SessionToken} of the connected session.
      * If it is not connected yet, it returns {@code null}.
      * <p>
-     * This may differ with the {@link SessionToken2} from the constructor. For example, if the
-     * controller is created with the token for {@link MediaSessionService2}, this would return
-     * token for the {@link MediaSession2} in the service.
+     * This may differ with the {@link SessionToken} from the constructor. For example, if the
+     * controller is created with the token for {@link MediaSessionService}, this would return
+     * token for the {@link MediaSession} in the service.
      *
-     * @return SessionToken2 of the connected session, or {@code null} if not connected
+     * @return SessionToken of the connected session, or {@code null} if not connected
      */
     @Nullable
-    public SessionToken2 getConnectedSessionToken() {
+    public SessionToken getConnectedSessionToken() {
         return isConnected() ? getImpl().getConnectedSessionToken() : null;
     }
 
     /**
-     * Returns whether this class is connected to active {@link MediaSession2} or not.
+     * Returns whether this class is connected to active {@link MediaSession} or not.
      */
     public boolean isConnected() {
-        MediaController2Impl impl = getImpl();
+        MediaControllerImpl impl = getImpl();
         return impl != null && impl.isConnected();
     }
 
@@ -290,7 +290,7 @@
      * Requests that the player prepare the media items for playback. In other words, other
      * sessions can continue to play during the prepare of this session. This method can be used
      * to speed up the start of the playback. Once the prepare is done, the player will change
-     * its playback state to {@link SessionPlayer2#PLAYER_STATE_PAUSED}. Afterwards, {@link #play}
+     * its playback state to {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play}
      * can be called to start playback.
      */
     @NonNull
@@ -304,7 +304,7 @@
     /**
      * Requests session to increase the playback speed.
      *
-     * @see MediaSession2.SessionCallback#onFastForward(MediaSession2, ControllerInfo)
+     * @see MediaSession.SessionCallback#onFastForward(MediaSession, ControllerInfo)
      */
     @NonNull
     public ListenableFuture<ControllerResult> fastForward() {
@@ -317,7 +317,7 @@
     /**
      * Requests session to decrease the playback speed.
      *
-     * @see MediaSession2.SessionCallback#onRewind(MediaSession2, ControllerInfo)
+     * @see MediaSession.SessionCallback#onRewind(MediaSession, ControllerInfo)
      */
     @NonNull
     public ListenableFuture<ControllerResult> rewind() {
@@ -330,7 +330,7 @@
     /**
      * Requests session to skip backward within the current media item.
      *
-     * @see MediaSession2.SessionCallback#onSkipForward(MediaSession2, ControllerInfo)
+     * @see MediaSession.SessionCallback#onSkipForward(MediaSession, ControllerInfo)
      */
     @NonNull
     public ListenableFuture<ControllerResult> skipForward() {
@@ -344,7 +344,7 @@
     /**
      * Requests session to skip forward within the current media item.
      *
-     * @see MediaSession2.SessionCallback#onSkipBackward(MediaSession2, ControllerInfo)
+     * @see MediaSession.SessionCallback#onSkipBackward(MediaSession, ControllerInfo)
      */
     @NonNull
     public ListenableFuture<ControllerResult> skipBackward() {
@@ -432,7 +432,7 @@
      * In other words, other sessions can continue to play during the preparation of this session.
      * This method can be used to speed up the start of the playback.
      * Once the prepare is done, the session will change its playback state to
-     * {@link SessionPlayer2#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
+     * {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
      * playback. If the prepare is not needed, {@link #playFromMediaId} can be directly called
      * without this method.
      *
@@ -458,7 +458,7 @@
      * In other words, other sessions can continue to play during the preparation of this session.
      * This method can be used to speed up the start of the playback.
      * Once the prepare is done, the session will change its playback state to
-     * {@link SessionPlayer2#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
+     * {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
      * playback. If the prepare is not needed, {@link #playFromSearch} can be directly called
      * without this method.
      *
@@ -483,7 +483,7 @@
      * In other words, other sessions can continue to play during the preparation of this session.
      * This method can be used to speed up the start of the playback.
      * Once the prepare is done, the session will change its playback state to
-     * {@link SessionPlayer2#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
+     * {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play} can be called to start
      * playback. If the prepare is not needed, {@link #playFromUri} can be directly called
      * without this method.
      *
@@ -569,8 +569,8 @@
 
     /**
      * Get the lastly cached player state from
-     * {@link ControllerCallback#onPlayerStateChanged(MediaController2, int)}.
-     * If it is not connected yet, it returns {@link SessionPlayer2#PLAYER_STATE_IDLE}.
+     * {@link ControllerCallback#onPlayerStateChanged(MediaController, int)}.
+     * If it is not connected yet, it returns {@link SessionPlayer#PLAYER_STATE_IDLE}.
      *
      * @return player state
      */
@@ -579,10 +579,10 @@
     }
 
     /**
-     * Gets the duration of the current media item, or {@link SessionPlayer2#UNKNOWN_TIME} if
+     * Gets the duration of the current media item, or {@link SessionPlayer#UNKNOWN_TIME} if
      * unknown or not connected.
      *
-     * @return the duration in ms, or {@link SessionPlayer2#UNKNOWN_TIME}
+     * @return the duration in ms, or {@link SessionPlayer#UNKNOWN_TIME}
      */
     public long getDuration() {
         return isConnected() ? getImpl().getDuration() : UNKNOWN_TIME;
@@ -594,7 +594,7 @@
      * This returns the calculated value of the position, based on the difference between the
      * update time and current time.
      *
-     * @return the current playback position in ms, or {@link SessionPlayer2#UNKNOWN_TIME}
+     * @return the current playback position in ms, or {@link SessionPlayer#UNKNOWN_TIME}
      *         if unknown or not connected
      */
     public long getCurrentPosition() {
@@ -603,7 +603,7 @@
 
     /**
      * Get the lastly cached playback speed from
-     * {@link ControllerCallback#onPlaybackSpeedChanged(MediaController2, float)}.
+     * {@link ControllerCallback#onPlaybackSpeedChanged(MediaController, float)}.
      *
      * @return speed the lastly cached playback speed, or 0f if unknown or not connected
      */
@@ -627,19 +627,19 @@
      * During buffering, see {@link #getBufferedPosition()} for the quantifying the amount already
      * buffered.
      *
-     * @return the buffering state, or {@link SessionPlayer2#BUFFERING_STATE_UNKNOWN}
+     * @return the buffering state, or {@link SessionPlayer#BUFFERING_STATE_UNKNOWN}
      *         if unknown or not connected
      */
-    public @SessionPlayer2.BuffState int getBufferingState() {
+    public @SessionPlayer.BuffState int getBufferingState() {
         return isConnected() ? getImpl().getBufferingState() : BUFFERING_STATE_UNKNOWN;
     }
 
     /**
      * Gets the lastly cached buffered position from the session when
-     * {@link ControllerCallback#onBufferingStateChanged(MediaController2, MediaItem2, int)} is
+     * {@link ControllerCallback#onBufferingStateChanged(MediaController, MediaItem, int)} is
      * called.
      *
-     * @return buffering position in millis, or {@link SessionPlayer2#UNKNOWN_TIME} if
+     * @return buffering position in millis, or {@link SessionPlayer#UNKNOWN_TIME} if
      *         unknown or not connected
      */
     public long getBufferedPosition() {
@@ -661,8 +661,8 @@
      * Rate the media. This will cause the rating to be set for the current user.
      * The rating style must follow the user rating style from the session.
      * You can get the rating style from the session through the
-     * {@link MediaMetadata2#getRating(String)} with the key
-     * {@link MediaMetadata2#METADATA_KEY_USER_RATING}.
+     * {@link MediaMetadata#getRating(String)} with the key
+     * {@link MediaMetadata#METADATA_KEY_USER_RATING}.
      * <p>
      * If the user rating was {@code null}, the media item does not accept setting user rating.
      *
@@ -671,7 +671,7 @@
      */
     @NonNull
     public ListenableFuture<ControllerResult> setRating(@NonNull String mediaId,
-            @NonNull Rating2 rating) {
+            @NonNull Rating rating) {
         if (TextUtils.isEmpty(mediaId)) {
             throw new IllegalArgumentException("mediaId shouldn't be empty");
         }
@@ -697,12 +697,12 @@
      * @param args optional argument
      */
     @NonNull
-    public ListenableFuture<ControllerResult> sendCustomCommand(@NonNull SessionCommand2 command,
+    public ListenableFuture<ControllerResult> sendCustomCommand(@NonNull SessionCommand command,
             @Nullable Bundle args) {
         if (command == null) {
             throw new IllegalArgumentException("command shouldn't be null");
         }
-        if (command.getCommandCode() != SessionCommand2.COMMAND_CODE_CUSTOM) {
+        if (command.getCommandCode() != SessionCommand.COMMAND_CODE_CUSTOM) {
             throw new IllegalArgumentException("command should be a custom command");
         }
         if (isConnected()) {
@@ -715,16 +715,16 @@
      * Returns the cached playlist from {@link ControllerCallback#onPlaylistChanged}.
      * <p>
      * This list may differ with the list that was specified with
-     * {@link #setPlaylist(List, MediaMetadata2)} depending on the {@link SessionPlayer2}
+     * {@link #setPlaylist(List, MediaMetadata)} depending on the {@link SessionPlayer}
      * implementation. Use media items returned here for other playlist agent APIs such as
-     * {@link SessionPlayer2#skipToPlaylistItem(MediaItem2)}.
+     * {@link SessionPlayer#skipToPlaylistItem(MediaItem)}.
      *
      * @return playlist, or {@code null} if the playlist hasn't set, controller isn't connected,
      *         or it doesn't have enough permission
-     * @see SessionCommand2#COMMAND_CODE_PLAYER_GET_PLAYLIST
+     * @see SessionCommand#COMMAND_CODE_PLAYER_GET_PLAYLIST
      */
     @Nullable
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         return isConnected() ? getImpl().getPlaylist() : null;
     }
 
@@ -735,11 +735,11 @@
      * @param metadata metadata of the playlist
      * @see #getPlaylist()
      * @see ControllerCallback#onPlaylistChanged
-     * @see MediaMetadata2#METADATA_KEY_MEDIA_ID
+     * @see MediaMetadata#METADATA_KEY_MEDIA_ID
      */
     @NonNull
     public ListenableFuture<ControllerResult> setPlaylist(@NonNull List<String> list,
-            @Nullable MediaMetadata2 metadata) {
+            @Nullable MediaMetadata metadata) {
         if (list == null) {
             throw new IllegalArgumentException("list shouldn't be null");
         }
@@ -755,10 +755,10 @@
     }
 
     /**
-     * Sets a {@link MediaItem2} for playback.
+     * Sets a {@link MediaItem} for playback.
      *
      * @param mediaId The non-empty media id of the item to play
-     * @see MediaMetadata2#METADATA_KEY_MEDIA_ID
+     * @see MediaMetadata#METADATA_KEY_MEDIA_ID
      */
     @NonNull
     public ListenableFuture<ControllerResult> setMediaItem(@NonNull String mediaId) {
@@ -778,7 +778,7 @@
      */
     @NonNull
     public ListenableFuture<ControllerResult> updatePlaylistMetadata(
-            @Nullable MediaMetadata2 metadata) {
+            @Nullable MediaMetadata metadata) {
         if (isConnected()) {
             return getImpl().updatePlaylistMetadata(metadata);
         }
@@ -794,7 +794,7 @@
      *         connected
      */
     @Nullable
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         return isConnected() ? getImpl().getPlaylistMetadata() : null;
     }
 
@@ -809,7 +809,7 @@
      *
      * @param index the index you want to add
      * @param mediaId The non-empty media id of the new item
-     * @see MediaMetadata2#METADATA_KEY_MEDIA_ID
+     * @see MediaMetadata#METADATA_KEY_MEDIA_ID
      */
     @NonNull
     public ListenableFuture<ControllerResult> addPlaylistItem(@IntRange(from = 0) int index,
@@ -850,7 +850,7 @@
      *
      * @param index the index of the item to replace
      * @param mediaId The non-empty media id of the new item
-     * @see MediaMetadata2#METADATA_KEY_MEDIA_ID
+     * @see MediaMetadata#METADATA_KEY_MEDIA_ID
      */
     @NonNull
     public ListenableFuture<ControllerResult> replacePlaylistItem(@IntRange(from = 0) int index,
@@ -869,19 +869,19 @@
 
     /**
      * Get the lastly cached current item from
-     * {@link ControllerCallback#onCurrentMediaItemChanged(MediaController2, MediaItem2)}.
+     * {@link ControllerCallback#onCurrentMediaItemChanged(MediaController, MediaItem)}.
      *
      * @return the currently playing item, or null if unknown or not connected
      */
     @Nullable
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return isConnected() ? getImpl().getCurrentMediaItem() : null;
     }
 
     /**
      * Skips to the previous item in the playlist.
      * <p>
-     * This calls {@link SessionPlayer2#skipToPreviousPlaylistItem()}.
+     * This calls {@link SessionPlayer#skipToPreviousPlaylistItem()}.
      */
     @NonNull
     public ListenableFuture<ControllerResult> skipToPreviousPlaylistItem() {
@@ -894,7 +894,7 @@
     /**
      * Skips to the next item in the playlist.
      * <p>
-     * This calls {@link SessionPlayer2#skipToNextPlaylistItem()}.
+     * This calls {@link SessionPlayer#skipToNextPlaylistItem()}.
      */
     @NonNull
     public ListenableFuture<ControllerResult> skipToNextPlaylistItem() {
@@ -907,7 +907,7 @@
     /**
      * Skips to the item in the playlist at the index.
      * <p>
-     * This calls {@link SessionPlayer2#skipToPlaylistItem(MediaItem2)}.
+     * This calls {@link SessionPlayer#skipToPlaylistItem(MediaItem)}.
      *
      * @param index The item in the playlist you want to play
      */
@@ -924,13 +924,13 @@
 
     /**
      * Gets the cached repeat mode from the {@link ControllerCallback#onRepeatModeChanged}.
-     * If it is not connected yet, it returns {@link SessionPlayer2#REPEAT_MODE_NONE}.
+     * If it is not connected yet, it returns {@link SessionPlayer#REPEAT_MODE_NONE}.
      *
      * @return repeat mode
-     * @see SessionPlayer2#REPEAT_MODE_NONE
-     * @see SessionPlayer2#REPEAT_MODE_ONE
-     * @see SessionPlayer2#REPEAT_MODE_ALL
-     * @see SessionPlayer2#REPEAT_MODE_GROUP
+     * @see SessionPlayer#REPEAT_MODE_NONE
+     * @see SessionPlayer#REPEAT_MODE_ONE
+     * @see SessionPlayer#REPEAT_MODE_ALL
+     * @see SessionPlayer#REPEAT_MODE_GROUP
      */
     public @RepeatMode int getRepeatMode() {
         return isConnected() ? getImpl().getRepeatMode() : REPEAT_MODE_NONE;
@@ -940,10 +940,10 @@
      * Sets the repeat mode.
      *
      * @param repeatMode repeat mode
-     * @see SessionPlayer2#REPEAT_MODE_NONE
-     * @see SessionPlayer2#REPEAT_MODE_ONE
-     * @see SessionPlayer2#REPEAT_MODE_ALL
-     * @see SessionPlayer2#REPEAT_MODE_GROUP
+     * @see SessionPlayer#REPEAT_MODE_NONE
+     * @see SessionPlayer#REPEAT_MODE_ONE
+     * @see SessionPlayer#REPEAT_MODE_ALL
+     * @see SessionPlayer#REPEAT_MODE_GROUP
      */
     @NonNull
     public ListenableFuture<ControllerResult> setRepeatMode(@RepeatMode int repeatMode) {
@@ -955,12 +955,12 @@
 
     /**
      * Gets the cached shuffle mode from the {@link ControllerCallback#onShuffleModeChanged}.
-     * If it is not connected yet, it returns {@link SessionPlayer2#SHUFFLE_MODE_NONE}.
+     * If it is not connected yet, it returns {@link SessionPlayer#SHUFFLE_MODE_NONE}.
      *
      * @return The shuffle mode
-     * @see SessionPlayer2#SHUFFLE_MODE_NONE
-     * @see SessionPlayer2#SHUFFLE_MODE_ALL
-     * @see SessionPlayer2#SHUFFLE_MODE_GROUP
+     * @see SessionPlayer#SHUFFLE_MODE_NONE
+     * @see SessionPlayer#SHUFFLE_MODE_ALL
+     * @see SessionPlayer#SHUFFLE_MODE_GROUP
      */
     public @ShuffleMode int getShuffleMode() {
         return isConnected() ? getImpl().getShuffleMode() : SHUFFLE_MODE_NONE;
@@ -970,9 +970,9 @@
      * Sets the shuffle mode.
      *
      * @param shuffleMode The shuffle mode
-     * @see SessionPlayer2#SHUFFLE_MODE_NONE
-     * @see SessionPlayer2#SHUFFLE_MODE_ALL
-     * @see SessionPlayer2#SHUFFLE_MODE_GROUP
+     * @see SessionPlayer#SHUFFLE_MODE_NONE
+     * @see SessionPlayer#SHUFFLE_MODE_ALL
+     * @see SessionPlayer#SHUFFLE_MODE_GROUP
      */
     @NonNull
     public ListenableFuture<ControllerResult> setShuffleMode(@ShuffleMode int shuffleMode) {
@@ -983,51 +983,6 @@
     }
 
     /**
-     * Queries for information about the routes currently known.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public ListenableFuture<ControllerResult> subscribeRoutesInfo() {
-        if (isConnected()) {
-            return getImpl().subscribeRoutesInfo();
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
-     * Unsubscribes for changes to the routes.
-     * <p>
-     * The {@link ControllerCallback#onRoutesInfoChanged callback} will no longer be invoked for
-     * the routes once this method returns.
-     * </p>
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public ListenableFuture<ControllerResult> unsubscribeRoutesInfo() {
-        if (isConnected()) {
-            return getImpl().unsubscribeRoutesInfo();
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
-     * Selects the specified route.
-     *
-     * @param route The route to select.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public ListenableFuture<ControllerResult> selectRoute(@NonNull Bundle route) {
-        if (route == null) {
-            throw new IllegalArgumentException("route shouldn't be null");
-        }
-        if (isConnected()) {
-            return getImpl().selectRoute(route);
-        }
-        return createDisconnectedFuture();
-    }
-
-    /**
      * Sets the time diff forcefully when calculating current position.
      * @param timeDiff {@code null} for reset.
      *
@@ -1050,8 +1005,8 @@
         return isConnected() ? getImpl().getCallbackExecutor() : null;
     }
 
-    interface MediaController2Impl extends AutoCloseable {
-        @Nullable SessionToken2 getConnectedSessionToken();
+    interface MediaControllerImpl extends AutoCloseable {
+        @Nullable SessionToken getConnectedSessionToken();
         boolean isConnected();
         ListenableFuture<ControllerResult> play();
         ListenableFuture<ControllerResult> pause();
@@ -1081,25 +1036,25 @@
         long getCurrentPosition();
         float getPlaybackSpeed();
         ListenableFuture<ControllerResult> setPlaybackSpeed(float speed);
-        @SessionPlayer2.BuffState int getBufferingState();
+        @SessionPlayer.BuffState int getBufferingState();
         long getBufferedPosition();
         @Nullable PlaybackInfo getPlaybackInfo();
         ListenableFuture<ControllerResult> setRating(@NonNull String mediaId,
-                @NonNull Rating2 rating);
-        ListenableFuture<ControllerResult> sendCustomCommand(@NonNull SessionCommand2 command,
+                @NonNull Rating rating);
+        ListenableFuture<ControllerResult> sendCustomCommand(@NonNull SessionCommand command,
                 @Nullable Bundle args);
-        @Nullable List<MediaItem2> getPlaylist();
+        @Nullable List<MediaItem> getPlaylist();
         ListenableFuture<ControllerResult> setPlaylist(@NonNull List<String> list,
-                @Nullable MediaMetadata2 metadata);
+                @Nullable MediaMetadata metadata);
         ListenableFuture<ControllerResult> setMediaItem(@NonNull String mediaId);
         ListenableFuture<ControllerResult> updatePlaylistMetadata(
-                @Nullable MediaMetadata2 metadata);
-        @Nullable MediaMetadata2 getPlaylistMetadata();
+                @Nullable MediaMetadata metadata);
+        @Nullable MediaMetadata getPlaylistMetadata();
         ListenableFuture<ControllerResult> addPlaylistItem(int index, @NonNull String mediaId);
         ListenableFuture<ControllerResult> removePlaylistItem(@NonNull int index);
         ListenableFuture<ControllerResult> replacePlaylistItem(int index,
                 @NonNull String mediaId);
-        MediaItem2 getCurrentMediaItem();
+        MediaItem getCurrentMediaItem();
         ListenableFuture<ControllerResult> skipToPreviousItem();
         ListenableFuture<ControllerResult> skipToNextItem();
         ListenableFuture<ControllerResult> skipToPlaylistItem(@NonNull int index);
@@ -1107,12 +1062,9 @@
         ListenableFuture<ControllerResult> setRepeatMode(@RepeatMode int repeatMode);
         @ShuffleMode int getShuffleMode();
         ListenableFuture<ControllerResult> setShuffleMode(@ShuffleMode int shuffleMode);
-        ListenableFuture<ControllerResult> subscribeRoutesInfo();
-        ListenableFuture<ControllerResult> unsubscribeRoutesInfo();
-        ListenableFuture<ControllerResult> selectRoute(@NonNull Bundle route);
 
         // Internally used methods
-        @NonNull MediaController2 getInstance();
+        @NonNull MediaController getInstance();
         @NonNull Context getContext();
         @NonNull ControllerCallback getCallback();
         @NonNull Executor getCallbackExecutor();
@@ -1120,7 +1072,7 @@
     }
 
     /**
-     * Interface for listening to change in activeness of the {@link MediaSession2}.  It's
+     * Interface for listening to change in activeness of the {@link MediaSession}.  It's
      * active if and only if it has set a player.
      */
     public abstract static class ControllerCallback {
@@ -1131,8 +1083,8 @@
          * @param controller the controller for this event
          * @param allowedCommands commands that's allowed by the session.
          */
-        public void onConnected(@NonNull MediaController2 controller,
-                @NonNull SessionCommandGroup2 allowedCommands) { }
+        public void onConnected(@NonNull MediaController controller,
+                @NonNull SessionCommandGroup allowedCommands) { }
 
         /**
          * Called when the session refuses the controller or the controller is disconnected from
@@ -1144,13 +1096,13 @@
          *
          * @param controller the controller for this event
          */
-        public void onDisconnected(@NonNull MediaController2 controller) { }
+        public void onDisconnected(@NonNull MediaController controller) { }
 
         /**
          * Called when the session set the custom layout through the
-         * {@link MediaSession2#setCustomLayout(ControllerInfo, List)}.
+         * {@link MediaSession#setCustomLayout(ControllerInfo, List)}.
          * <p>
-         * Can be called before {@link #onConnected(MediaController2, SessionCommandGroup2)}
+         * Can be called before {@link #onConnected(MediaController, SessionCommandGroup)}
          * is called.
          * <p>
          * Default implementation returns {@link ControllerResult#RESULT_CODE_NOT_SUPPORTED}.
@@ -1159,7 +1111,7 @@
          * @param layout
          */
         public @ControllerResult.ResultCode int onSetCustomLayout(
-                @NonNull MediaController2 controller, @NonNull List<CommandButton> layout) {
+                @NonNull MediaController controller, @NonNull List<CommandButton> layout) {
             return ControllerResult.RESULT_CODE_NOT_SUPPORTED;
         }
 
@@ -1183,7 +1135,7 @@
          * @param controller the controller for this event
          * @param info new playback info
          */
-        public void onPlaybackInfoChanged(@NonNull MediaController2 controller,
+        public void onPlaybackInfoChanged(@NonNull MediaController controller,
                 @NonNull PlaybackInfo info) { }
 
         /**
@@ -1192,8 +1144,8 @@
          * @param controller the controller for this event
          * @param commands newly allowed commands
          */
-        public void onAllowedCommandsChanged(@NonNull MediaController2 controller,
-                @NonNull SessionCommandGroup2 commands) { }
+        public void onAllowedCommandsChanged(@NonNull MediaController controller,
+                @NonNull SessionCommandGroup commands) { }
 
         /**
          * Called when the session sent a custom command. Returns a {@link ControllerResult} for
@@ -1208,8 +1160,8 @@
          * @return result of handling custom command
          */
         @NonNull
-        public ControllerResult onCustomCommand(@NonNull MediaController2 controller,
-                @NonNull SessionCommand2 command, @Nullable Bundle args) {
+        public ControllerResult onCustomCommand(@NonNull MediaController controller,
+                @NonNull SessionCommand command, @Nullable Bundle args) {
             return new ControllerResult(ControllerResult.RESULT_CODE_NOT_SUPPORTED);
         }
 
@@ -1219,8 +1171,8 @@
          * @param controller the controller for this event
          * @param state the new player state
          */
-        public void onPlayerStateChanged(@NonNull MediaController2 controller,
-                @SessionPlayer2.PlayerState int state) { }
+        public void onPlayerStateChanged(@NonNull MediaController controller,
+                @SessionPlayer.PlayerState int state) { }
 
         /**
          * Called when playback speed is changed.
@@ -1228,7 +1180,7 @@
          * @param controller the controller for this event
          * @param speed speed
          */
-        public void onPlaybackSpeedChanged(@NonNull MediaController2 controller,
+        public void onPlaybackSpeedChanged(@NonNull MediaController controller,
                 float speed) { }
 
         /**
@@ -1240,8 +1192,8 @@
          * @param item the media item for which buffering is happening.
          * @param state the new buffering state.
          */
-        public void onBufferingStateChanged(@NonNull MediaController2 controller,
-                @NonNull MediaItem2 item, @SessionPlayer2.BuffState int state) { }
+        public void onBufferingStateChanged(@NonNull MediaController controller,
+                @NonNull MediaItem item, @SessionPlayer.BuffState int state) { }
 
         /**
          * Called to indicate that seeking is completed.
@@ -1249,7 +1201,7 @@
          * @param controller the controller for this event.
          * @param position the previous seeking request.
          */
-        public void onSeekCompleted(@NonNull MediaController2 controller, long position) { }
+        public void onSeekCompleted(@NonNull MediaController controller, long position) { }
 
         /**
          * Called when the player's currently playing item is changed
@@ -1259,10 +1211,10 @@
          *
          * @param controller the controller for this event
          * @param item new item
-         * @see #onBufferingStateChanged(MediaController2, MediaItem2, int)
+         * @see #onBufferingStateChanged(MediaController, MediaItem, int)
          */
-        public void onCurrentMediaItemChanged(@NonNull MediaController2 controller,
-                @Nullable MediaItem2 item) { }
+        public void onCurrentMediaItemChanged(@NonNull MediaController controller,
+                @Nullable MediaItem item) { }
 
         /**
          * Called when a playlist is changed.
@@ -1271,8 +1223,8 @@
          * @param list new playlist
          * @param metadata new metadata
          */
-        public void onPlaylistChanged(@NonNull MediaController2 controller,
-                @Nullable List<MediaItem2> list, @Nullable MediaMetadata2 metadata) { }
+        public void onPlaylistChanged(@NonNull MediaController controller,
+                @Nullable List<MediaItem> list, @Nullable MediaMetadata metadata) { }
 
         /**
          * Called when a playlist metadata is changed.
@@ -1280,55 +1232,40 @@
          * @param controller the controller for this event
          * @param metadata new metadata
          */
-        public void onPlaylistMetadataChanged(@NonNull MediaController2 controller,
-                @Nullable MediaMetadata2 metadata) { }
+        public void onPlaylistMetadataChanged(@NonNull MediaController controller,
+                @Nullable MediaMetadata metadata) { }
 
         /**
          * Called when the shuffle mode is changed.
          *
          * @param controller the controller for this event
          * @param shuffleMode repeat mode
-         * @see SessionPlayer2#SHUFFLE_MODE_NONE
-         * @see SessionPlayer2#SHUFFLE_MODE_ALL
-         * @see SessionPlayer2#SHUFFLE_MODE_GROUP
+         * @see SessionPlayer#SHUFFLE_MODE_NONE
+         * @see SessionPlayer#SHUFFLE_MODE_ALL
+         * @see SessionPlayer#SHUFFLE_MODE_GROUP
          */
-        public void onShuffleModeChanged(@NonNull MediaController2 controller,
-                @SessionPlayer2.ShuffleMode int shuffleMode) { }
+        public void onShuffleModeChanged(@NonNull MediaController controller,
+                @SessionPlayer.ShuffleMode int shuffleMode) { }
 
         /**
          * Called when the repeat mode is changed.
          *
          * @param controller the controller for this event
          * @param repeatMode repeat mode
-         * @see SessionPlayer2#REPEAT_MODE_NONE
-         * @see SessionPlayer2#REPEAT_MODE_ONE
-         * @see SessionPlayer2#REPEAT_MODE_ALL
-         * @see SessionPlayer2#REPEAT_MODE_GROUP
+         * @see SessionPlayer#REPEAT_MODE_NONE
+         * @see SessionPlayer#REPEAT_MODE_ONE
+         * @see SessionPlayer#REPEAT_MODE_ALL
+         * @see SessionPlayer#REPEAT_MODE_GROUP
          */
-        public void onRepeatModeChanged(@NonNull MediaController2 controller,
-                @SessionPlayer2.RepeatMode int repeatMode) { }
+        public void onRepeatModeChanged(@NonNull MediaController controller,
+                @SessionPlayer.RepeatMode int repeatMode) { }
 
         /**
          * Called when the playback is completed.
          *
          * @param controller the controller for this event
          */
-        public void onPlaybackCompleted(@NonNull MediaController2 controller) { }
-
-        /**
-         * Called when a property of the indicated media route has changed.
-         *
-         * @param controller the controller for this event
-         * @param routes The list of Bundle from {@link
-         *               androidx.mediarouter.media.MediaRouter.RouteInfo
-         *               #getUniqueRouteDescriptorBundle RouteInfo}.
-         * @see androidx.mediarouter.media.MediaRouter.RouteInfo#getUniqueRouteDescriptorBundle
-         * @see androidx.mediarouter.media.MediaRouter#getRoute
-         * @hide
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public void onRoutesInfoChanged(@NonNull MediaController2 controller,
-                @Nullable List<Bundle> routes) { }
+        public void onPlaybackCompleted(@NonNull MediaController controller) { }
     }
 
     /**
@@ -1463,7 +1400,7 @@
      * Result class to be used with {@link ListenableFuture} for asynchronous calls.
      */
     @VersionedParcelize
-    public static class ControllerResult implements RemoteResult2, VersionedParcelable {
+    public static class ControllerResult implements RemoteResult, VersionedParcelable {
         /**
          * Result code representing that the command is successfully completed.
          * <p>
@@ -1505,11 +1442,11 @@
         @ParcelField(3)
         Bundle mCustomCommandResult;
         @ParcelField(4)
-        MediaItem2 mItem;
+        MediaItem mItem;
 
         /**
          * Constructor to be used by
-         * {@link ControllerCallback#onCustomCommand(MediaController2, SessionCommand2, Bundle)}.
+         * {@link ControllerCallback#onCustomCommand(MediaController, SessionCommand, Bundle)}.
          *
          * @param resultCode result code
          * @param customCommandResult custom command result
@@ -1528,12 +1465,12 @@
         }
 
         ControllerResult(@ResultCode int resultCode, @Nullable Bundle customCommandResult,
-                @Nullable MediaItem2 item) {
+                @Nullable MediaItem item) {
             this(resultCode, customCommandResult, item, SystemClock.elapsedRealtime());
         }
 
         ControllerResult(@ResultCode int resultCode, @Nullable Bundle customCommandResult,
-                @Nullable MediaItem2 item, long completionTime) {
+                @Nullable MediaItem item, long completionTime) {
             mResultCode = resultCode;
             mCustomCommandResult = customCommandResult;
             mItem = item;
@@ -1593,11 +1530,11 @@
         }
 
         /**
-         * Gets the result of {@link #sendCustomCommand(SessionCommand2, Bundle)}. This is only
-         * valid when it's returned by the {@link #sendCustomCommand(SessionCommand2, Bundle)} and
+         * Gets the result of {@link #sendCustomCommand(SessionCommand, Bundle)}. This is only
+         * valid when it's returned by the {@link #sendCustomCommand(SessionCommand, Bundle)} and
          * will be {@code null} otherwise.
          *
-         * @see #sendCustomCommand(SessionCommand2, Bundle)
+         * @see #sendCustomCommand(SessionCommand, Bundle)
          * @return result of send custom command
          */
         @Nullable
@@ -1606,7 +1543,7 @@
         }
 
         /**
-         * Gets the {@link MediaItem2} for which the command was executed. In other words, this is
+         * Gets the {@link MediaItem} for which the command was executed. In other words, this is
          * the current media item when the command was completed.
          * <p>
          * Can be {@code null} for many reasons. For examples,
@@ -1621,7 +1558,7 @@
          */
         @Override
         @Nullable
-        public MediaItem2 getMediaItem() {
+        public MediaItem getMediaItem() {
             return mItem;
         }
     }
diff --git a/media2/src/main/java/androidx/media2/MediaController2Stub.java b/media2/src/main/java/androidx/media2/MediaController2Stub.java
deleted file mode 100644
index 14f2050..0000000
--- a/media2/src/main/java/androidx/media2/MediaController2Stub.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.media2;
-
-import android.app.PendingIntent;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-
-import androidx.media2.MediaBrowser2.BrowserResult;
-import androidx.media2.MediaController2.ControllerResult;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.SessionResult;
-import androidx.media2.SessionPlayer2.BuffState;
-import androidx.versionedparcelable.ParcelImpl;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.List;
-
-class MediaController2Stub extends IMediaController2.Stub {
-    private static final String TAG = "MediaController2Stub";
-    private static final boolean DEBUG = true; // TODO(jaewan): Change
-
-    private final WeakReference<MediaController2ImplBase> mController;
-    private final SequencedFutureManager mSequencedFutureManager;
-
-    MediaController2Stub(MediaController2ImplBase controller, SequencedFutureManager manager) {
-        mController = new WeakReference<>(controller);
-        mSequencedFutureManager = manager;
-    }
-
-    @Override
-    public void onSessionResult(int seq, ParcelImpl sessionResult) {
-        if (sessionResult == null) {
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        SessionResult result = MediaUtils2.fromParcelable(sessionResult);
-        if (result == null) {
-            return;
-        }
-        mSequencedFutureManager.setFutureResult(seq, ControllerResult.from(result));
-    }
-
-    @Override
-    public void onLibraryResult(int seq, ParcelImpl libraryResult) {
-        if (libraryResult == null) {
-            return;
-        }
-        try {
-            final MediaBrowser2 browser = getBrowser();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        LibraryResult result = MediaUtils2.fromParcelable(libraryResult);
-        if (result == null) {
-            return;
-        }
-        mSequencedFutureManager.setFutureResult(seq, BrowserResult.from(result));
-    }
-
-    @Override
-    public void onCurrentMediaItemChanged(ParcelImpl item) {
-        if (item == null) {
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifyCurrentMediaItemChanged((MediaItem2) MediaUtils2.fromParcelable(item));
-    }
-
-    @Override
-    public void onPlayerStateChanged(long eventTimeMs, long positionMs, int state) {
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifyPlayerStateChanges(eventTimeMs, positionMs, state);
-    }
-
-    @Override
-    public void onPlaybackSpeedChanged(long eventTimeMs, long positionMs, float speed) {
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifyPlaybackSpeedChanges(eventTimeMs, positionMs, speed);
-    }
-
-    @Override
-    public void onBufferingStateChanged(ParcelImpl item, @BuffState int state,
-            long bufferedPositionMs) {
-        if (item == null) {
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        MediaItem2 item2 = MediaUtils2.fromParcelable(item);
-        if (item2 == null) {
-            Log.w(TAG, "onBufferingStateChanged(): Ignoring null item");
-            return;
-        }
-        controller.notifyBufferingStateChanged(item2, state, bufferedPositionMs);
-    }
-
-    @Override
-    public void onPlaylistChanged(ParcelImplListSlice listSlice, ParcelImpl metadata) {
-        if (metadata == null) {
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        List<MediaItem2> playlist =
-                MediaUtils2.convertParcelImplListSliceToMediaItem2List(listSlice);
-        controller.notifyPlaylistChanges(playlist,
-                (MediaMetadata2) MediaUtils2.fromParcelable(metadata));
-    }
-
-    @Override
-    public void onPlaylistMetadataChanged(ParcelImpl metadata) throws RuntimeException {
-        if (metadata == null) {
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifyPlaylistMetadataChanges(
-                (MediaMetadata2) MediaUtils2.fromParcelable(metadata));
-    }
-
-    @Override
-    public void onRepeatModeChanged(int repeatMode) {
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifyRepeatModeChanges(repeatMode);
-    }
-
-    @Override
-    public void onShuffleModeChanged(int shuffleMode) {
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifyShuffleModeChanges(shuffleMode);
-    }
-
-    @Override
-    public void onPlaybackCompleted() {
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifyPlaybackCompleted();
-    }
-
-    @Override
-    public void onPlaybackInfoChanged(ParcelImpl playbackInfo) throws RuntimeException {
-        if (playbackInfo == null) {
-            return;
-        }
-        if (DEBUG) {
-            Log.d(TAG, "onPlaybackInfoChanged");
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        PlaybackInfo info = MediaUtils2.fromParcelable(playbackInfo);
-        if (info == null) {
-            Log.w(TAG, "onPlaybackInfoChanged(): Ignoring null playbackInfo");
-            return;
-        }
-        controller.notifyPlaybackInfoChanges(info);
-    }
-
-    @Override
-    public void onSeekCompleted(long eventTimeMs, long positionMs, long seekPositionMs) {
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        controller.notifySeekCompleted(eventTimeMs, positionMs, seekPositionMs);
-    }
-
-    @Override
-    public void onRoutesInfoChanged(final List<Bundle> routes) {
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        MediaUtils2.keepUnparcelableBundlesOnly(routes);
-        controller.notifyRoutesInfoChanged(routes);
-    }
-
-    @Override
-    public void onConnected(IMediaSession2 sessionBinder, ParcelImpl commandGroup, int playerState,
-            ParcelImpl currentItem, long positionEventTimeMs, long positionMs, float playbackSpeed,
-            long bufferedPositionMs, ParcelImpl playbackInfo, int shuffleMode, int repeatMode,
-            ParcelImplListSlice listSlice, PendingIntent sessionActivity) {
-        if (sessionBinder == null || commandGroup == null || currentItem == null
-                || playbackInfo == null) {
-            return;
-        }
-        final MediaController2ImplBase controller = mController.get();
-        if (controller == null) {
-            if (DEBUG) {
-                Log.d(TAG, "onConnected after MediaController2.close()");
-            }
-            return;
-        }
-        List<MediaItem2> itemList =
-                MediaUtils2.convertParcelImplListSliceToMediaItem2List(listSlice);
-        controller.onConnectedNotLocked(sessionBinder,
-                (SessionCommandGroup2) MediaUtils2.fromParcelable(commandGroup), playerState,
-                (MediaItem2) MediaUtils2.fromParcelable(currentItem),
-                positionEventTimeMs, positionMs, playbackSpeed, bufferedPositionMs,
-                (PlaybackInfo) MediaUtils2.fromParcelable(playbackInfo), repeatMode, shuffleMode,
-                itemList, sessionActivity);
-    }
-
-    @Override
-    public void onDisconnected() {
-        final MediaController2ImplBase controller = mController.get();
-        if (controller == null) {
-            if (DEBUG) {
-                Log.d(TAG, "onDisconnected after MediaController2.close()");
-            }
-            return;
-        }
-        controller.getInstance().close();
-    }
-
-    @Override
-    public void onSetCustomLayout(int seq, List<ParcelImpl> commandButtonList) {
-        if (commandButtonList == null) {
-            Log.w(TAG, "setCustomLayout(): Ignoring null commandButtonList");
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        if (controller == null) {
-            // TODO(jaewan): Revisit here. Could be a bug
-            return;
-        }
-        List<CommandButton> layout = new ArrayList<>();
-        for (int i = 0; i < commandButtonList.size(); i++) {
-            CommandButton button = MediaUtils2.fromParcelable(commandButtonList.get(i));
-            if (button != null) {
-                layout.add(button);
-            }
-        }
-        controller.onSetCustomLayout(seq, layout);
-    }
-
-    @Override
-    public void onAllowedCommandsChanged(ParcelImpl commands) {
-        if (commands == null) {
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        if (controller == null) {
-            // TODO(jaewan): Revisit here. Could be a bug
-            return;
-        }
-        SessionCommandGroup2 commandGroup = MediaUtils2.fromParcelable(commands);
-        if (commandGroup == null) {
-            Log.w(TAG, "onAllowedCommandsChanged(): Ignoring null commands");
-            return;
-        }
-        controller.onAllowedCommandsChanged(commandGroup);
-    }
-
-    @Override
-    public void onCustomCommand(int seq, ParcelImpl commandParcel, Bundle args) {
-        if (commandParcel == null) {
-            return;
-        }
-        final MediaController2ImplBase controller;
-        try {
-            controller = getController();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        SessionCommand2 command = MediaUtils2.fromParcelable(commandParcel);
-        if (command == null) {
-            Log.w(TAG, "sendCustomCommand(): Ignoring null command");
-            return;
-        }
-        controller.onCustomCommand(seq, command, args);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////////////////////
-    // MediaBrowser specific
-    ////////////////////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void onSearchResultChanged(final String query, final int itemCount,
-            final ParcelImpl libraryParams) throws RuntimeException {
-        if (libraryParams == null) {
-            return;
-        }
-        if (TextUtils.isEmpty(query)) {
-            Log.w(TAG, "onSearchResultChanged(): Ignoring empty query");
-            return;
-        }
-        if (itemCount < 0) {
-            Log.w(TAG, "onSearchResultChanged(): Ignoring negative itemCount: " + itemCount);
-            return;
-        }
-        final MediaBrowser2 browser;
-        try {
-            browser = getBrowser();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        if (browser == null) {
-            return;
-        }
-        browser.getCallbackExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                browser.getCallback().onSearchResultChanged(browser, query, itemCount,
-                        (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
-            }
-        });
-    }
-
-    @Override
-    public void onChildrenChanged(final String parentId, final int itemCount,
-            final ParcelImpl libraryParams) {
-        if (libraryParams == null) {
-            return;
-        }
-        if (TextUtils.isEmpty(parentId)) {
-            Log.w(TAG, "onChildrenChanged(): Ignoring empty parentId");
-            return;
-        }
-        if (itemCount < 0) {
-            Log.w(TAG, "onChildrenChanged(): Ignoring negative itemCount: " + itemCount);
-            return;
-        }
-        final MediaBrowser2 browser;
-        try {
-            browser = getBrowser();
-        } catch (IllegalStateException e) {
-            Log.w(TAG, "Don't fail silently here. Highly likely a bug");
-            return;
-        }
-        if (browser == null) {
-            return;
-        }
-        browser.getCallbackExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                // TODO (b/118472216): Find all ParcelUtils.fromParcelable usages, and null check
-                // before calling it.
-                browser.getCallback().onChildrenChanged(browser, parentId, itemCount,
-                        (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
-            }
-        });
-    }
-
-    public void destroy() {
-        mController.clear();
-    }
-
-    private MediaController2ImplBase getController() throws IllegalStateException {
-        final MediaController2ImplBase controller = mController.get();
-        if (controller == null) {
-            throw new IllegalStateException("Controller is released");
-        }
-        return controller;
-    }
-
-    private MediaBrowser2 getBrowser() throws IllegalStateException {
-        final MediaController2ImplBase controller = getController();
-        if (controller.getInstance() instanceof MediaBrowser2) {
-            return (MediaBrowser2) controller.getInstance();
-        }
-        return null;
-    }
-}
diff --git a/media2/src/main/java/androidx/media2/MediaController2ImplBase.java b/media2/src/main/java/androidx/media2/MediaControllerImplBase.java
similarity index 68%
rename from media2/src/main/java/androidx/media2/MediaController2ImplBase.java
rename to media2/src/main/java/androidx/media2/MediaControllerImplBase.java
index 73d4723..d5ab7c0 100644
--- a/media2/src/main/java/androidx/media2/MediaController2ImplBase.java
+++ b/media2/src/main/java/androidx/media2/MediaControllerImplBase.java
@@ -16,47 +16,44 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_DISCONNECTED;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_PERMISSION_DENIED;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_SKIPPED;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_UNKNOWN_ERROR;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_DURATION;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_CUSTOM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_PAUSE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_PLAY;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_PREPARE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_MEDIA_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_PLAYLIST;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_REPEAT_MODE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_SPEED;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_FAST_FORWARD;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_URI;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_URI;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_REWIND;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SELECT_ROUTE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SET_RATING;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SKIP_BACKWARD;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SKIP_FORWARD;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_VOLUME_ADJUST_VOLUME;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_VOLUME_SET_VOLUME;
-import static androidx.media2.SessionPlayer2.BUFFERING_STATE_UNKNOWN;
-import static androidx.media2.SessionPlayer2.UNKNOWN_TIME;
-import static androidx.media2.SessionToken2.TYPE_SESSION;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_DISCONNECTED;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_PERMISSION_DENIED;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_SKIPPED;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DURATION;
+import static androidx.media2.SessionCommand.COMMAND_CODE_CUSTOM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_PAUSE;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_PLAY;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_PREPARE;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_MEDIA_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_PLAYLIST;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_REPEAT_MODE;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_SPEED;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_REWIND;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_SET_RATING;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_SKIP_BACKWARD;
+import static androidx.media2.SessionCommand.COMMAND_CODE_SESSION_SKIP_FORWARD;
+import static androidx.media2.SessionCommand.COMMAND_CODE_VOLUME_ADJUST_VOLUME;
+import static androidx.media2.SessionCommand.COMMAND_CODE_VOLUME_SET_VOLUME;
+import static androidx.media2.SessionPlayer.BUFFERING_STATE_UNKNOWN;
+import static androidx.media2.SessionPlayer.UNKNOWN_TIME;
+import static androidx.media2.SessionToken.TYPE_SESSION;
 
 import android.app.PendingIntent;
 import android.content.ComponentName;
@@ -74,23 +71,23 @@
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaController2.ControllerResult;
-import androidx.media2.MediaController2.MediaController2Impl;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaController2.VolumeDirection;
-import androidx.media2.MediaController2.VolumeFlags;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaController.ControllerResult;
+import androidx.media2.MediaController.MediaControllerImpl;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaController.VolumeDirection;
+import androidx.media2.MediaController.VolumeFlags;
 import androidx.media2.SequencedFutureManager.SequencedFuture;
-import androidx.media2.SessionCommand2.CommandCode;
-import androidx.media2.SessionPlayer2.RepeatMode;
-import androidx.media2.SessionPlayer2.ShuffleMode;
+import androidx.media2.SessionCommand.CommandCode;
+import androidx.media2.SessionPlayer.RepeatMode;
+import androidx.media2.SessionPlayer.ShuffleMode;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
 import java.util.List;
 import java.util.concurrent.Executor;
 
-class MediaController2ImplBase implements MediaController2Impl {
+class MediaControllerImplBase implements MediaControllerImpl {
     private static final boolean THROW_EXCEPTION_FOR_NULL_RESULT = true;
     private static final ControllerResult RESULT_WHEN_CLOSED =
             new ControllerResult(RESULT_CODE_SKIPPED);
@@ -99,29 +96,29 @@
     static final boolean DEBUG = true; //Log.isLoggable(TAG, Log.DEBUG);
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    final MediaController2 mInstance;
+    final MediaController mInstance;
     private final Context mContext;
     private final Object mLock = new Object();
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    final SessionToken2 mToken;
+    final SessionToken mToken;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final ControllerCallback mCallback;
     private final Executor mCallbackExecutor;
     private final IBinder.DeathRecipient mDeathRecipient;
     final SequencedFutureManager mSequencedFutureManager;
-    final MediaController2Stub mControllerStub;
+    final MediaControllerStub mControllerStub;
 
     @GuardedBy("mLock")
-    private SessionToken2 mConnectedToken;
+    private SessionToken mConnectedToken;
     @GuardedBy("mLock")
     private SessionServiceConnection mServiceConnection;
     @GuardedBy("mLock")
     private boolean mIsReleased;
     @GuardedBy("mLock")
-    private List<MediaItem2> mPlaylist;
+    private List<MediaItem> mPlaylist;
     @GuardedBy("mLock")
-    private MediaMetadata2 mPlaylistMetadata;
+    private MediaMetadata mPlaylistMetadata;
     @GuardedBy("mLock")
     private @RepeatMode int mRepeatMode;
     @GuardedBy("mLock")
@@ -135,7 +132,7 @@
     @GuardedBy("mLock")
     private float mPlaybackSpeed;
     @GuardedBy("mLock")
-    private MediaItem2 mCurrentMediaItem;
+    private MediaItem mCurrentMediaItem;
     @GuardedBy("mLock")
     private int mBufferingState;
     @GuardedBy("mLock")
@@ -145,14 +142,14 @@
     @GuardedBy("mLock")
     private PendingIntent mSessionActivity;
     @GuardedBy("mLock")
-    private SessionCommandGroup2 mAllowedCommands;
+    private SessionCommandGroup mAllowedCommands;
 
     // Assignment should be used with the lock hold, but should be used without a lock to prevent
     // potential deadlock.
     @GuardedBy("mLock")
-    private volatile IMediaSession2 mISession2;
+    private volatile IMediaSession mISession;
 
-    MediaController2ImplBase(Context context, MediaController2 instance, SessionToken2 token,
+    MediaControllerImplBase(Context context, MediaController instance, SessionToken token,
             Executor executor, ControllerCallback callback) {
         mInstance = instance;
         if (context == null) {
@@ -169,7 +166,7 @@
         }
         mContext = context;
         mSequencedFutureManager = new SequencedFutureManager();
-        mControllerStub = new MediaController2Stub(this, mSequencedFutureManager);
+        mControllerStub = new MediaControllerStub(this, mSequencedFutureManager);
         mToken = token;
         mCallback = callback;
         mCallbackExecutor = executor;
@@ -180,8 +177,8 @@
             }
         };
 
-        IMediaSession2 iSession2 = IMediaSession2.Stub.asInterface((IBinder) mToken.getBinder());
-        if (mToken.getType() == SessionToken2.TYPE_SESSION) {
+        IMediaSession iSession = IMediaSession.Stub.asInterface((IBinder) mToken.getBinder());
+        if (mToken.getType() == SessionToken.TYPE_SESSION) {
             // Session
             mServiceConnection = null;
             connectToSession();
@@ -196,9 +193,9 @@
         if (DEBUG) {
             Log.d(TAG, "release from " + mToken);
         }
-        final IMediaSession2 iSession2;
+        final IMediaSession iSession;
         synchronized (mLock) {
-            iSession2 = mISession2;
+            iSession = mISession;
             if (mIsReleased) {
                 // Prevent re-enterance from the ControllerCallback.onDisconnected()
                 return;
@@ -208,14 +205,14 @@
                 mContext.unbindService(mServiceConnection);
                 mServiceConnection = null;
             }
-            mISession2 = null;
+            mISession = null;
             mControllerStub.destroy();
         }
-        if (iSession2 != null) {
+        if (iSession != null) {
             int seq = mSequencedFutureManager.obtainNextSequenceNumber();
             try {
-                iSession2.asBinder().unlinkToDeath(mDeathRecipient, 0);
-                iSession2.release(mControllerStub, seq);
+                iSession.asBinder().unlinkToDeath(mDeathRecipient, 0);
+                iSession.release(mControllerStub, seq);
             } catch (RemoteException e) {
                 // No-op.
             }
@@ -230,7 +227,7 @@
     }
 
     @Override
-    public SessionToken2 getConnectedSessionToken() {
+    public SessionToken getConnectedSessionToken() {
         synchronized (mLock) {
             return isConnected() ? mConnectedToken : null;
         }
@@ -239,13 +236,13 @@
     @Override
     public boolean isConnected() {
         synchronized (mLock) {
-            return mISession2 != null;
+            return mISession != null;
         }
     }
 
     @FunctionalInterface
     private interface RemoteSessionTask {
-        void run(IMediaSession2 iSession2, int seq) throws RemoteException;
+        void run(IMediaSession iSession, int seq) throws RemoteException;
     }
 
     private ListenableFuture<ControllerResult> dispatchRemoteSessionTask(int commandCode,
@@ -254,20 +251,20 @@
     }
 
     private ListenableFuture<ControllerResult> dispatchRemoteSessionTask(
-            SessionCommand2 sessionCommand, RemoteSessionTask task) {
+            SessionCommand sessionCommand, RemoteSessionTask task) {
         return dispatchRemoteSessionTaskInternal(COMMAND_CODE_CUSTOM, sessionCommand, task);
     }
 
     private ListenableFuture<ControllerResult> dispatchRemoteSessionTaskInternal(int commandCode,
-            SessionCommand2 sessionCommand, RemoteSessionTask task) {
-        final IMediaSession2 iSession2 = sessionCommand != null
+            SessionCommand sessionCommand, RemoteSessionTask task) {
+        final IMediaSession iSession = sessionCommand != null
                 ? getSessionInterfaceIfAble(sessionCommand)
                 : getSessionInterfaceIfAble(commandCode);
-        if (iSession2 != null) {
+        if (iSession != null) {
             final SequencedFuture<ControllerResult> result =
                     mSequencedFutureManager.createSequencedFuture(RESULT_WHEN_CLOSED);
             try {
-                task.run(iSession2, result.getSequenceNumber());
+                task.run(iSession, result.getSequenceNumber());
             } catch (RemoteException e) {
                 Log.w(TAG, "Cannot connect to the service or the session is gone", e);
                 result.set(new ControllerResult(RESULT_CODE_DISCONNECTED));
@@ -285,8 +282,8 @@
     public ListenableFuture<ControllerResult> play() {
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_PLAY, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.play(mControllerStub, seq);
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.play(mControllerStub, seq);
             }
         });
     }
@@ -295,8 +292,8 @@
     public ListenableFuture<ControllerResult> pause() {
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_PAUSE, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.pause(mControllerStub, seq);
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.pause(mControllerStub, seq);
             }
         });
     }
@@ -305,8 +302,8 @@
     public ListenableFuture<ControllerResult> prepare() {
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_PREPARE, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.prepare(mControllerStub, seq);
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.prepare(mControllerStub, seq);
             }
         });
     }
@@ -316,8 +313,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_FAST_FORWARD,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.fastForward(mControllerStub, seq);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.fastForward(mControllerStub, seq);
                     }
                 });
     }
@@ -326,8 +323,8 @@
     public ListenableFuture<ControllerResult> rewind() {
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_REWIND, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.rewind(mControllerStub, seq);
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.rewind(mControllerStub, seq);
             }
         });
     }
@@ -337,8 +334,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_SKIP_FORWARD,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.skipForward(mControllerStub, seq);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.skipForward(mControllerStub, seq);
                     }
                 });
     }
@@ -348,8 +345,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_SKIP_BACKWARD,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.skipBackward(mControllerStub, seq);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.skipBackward(mControllerStub, seq);
                     }
                 });
     }
@@ -361,8 +358,8 @@
         }
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SEEK_TO, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.seekTo(mControllerStub, seq, pos);
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.seekTo(mControllerStub, seq, pos);
             }
         });
     }
@@ -373,8 +370,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.playFromMediaId(mControllerStub, seq, mediaId, extras);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.playFromMediaId(mControllerStub, seq, mediaId, extras);
                     }
                 });
     }
@@ -385,8 +382,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.playFromSearch(mControllerStub, seq, query, extras);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.playFromSearch(mControllerStub, seq, query, extras);
                     }
                 });
     }
@@ -397,8 +394,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PLAY_FROM_URI,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.playFromUri(mControllerStub, seq, uri, extras);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.playFromUri(mControllerStub, seq, uri, extras);
                     }
                 });
     }
@@ -409,8 +406,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.prepareFromMediaId(mControllerStub, seq, mediaId, extras);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.prepareFromMediaId(mControllerStub, seq, mediaId, extras);
                     }
                 });
     }
@@ -421,8 +418,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.prepareFromSearch(mControllerStub, seq, query, extras);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.prepareFromSearch(mControllerStub, seq, query, extras);
                     }
                 });
     }
@@ -433,8 +430,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_PREPARE_FROM_URI,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.prepareFromUri(mControllerStub, seq, uri, extras);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.prepareFromUri(mControllerStub, seq, uri, extras);
                     }
                 });
     }
@@ -444,8 +441,8 @@
             final @VolumeFlags int flags) {
         return dispatchRemoteSessionTask(COMMAND_CODE_VOLUME_SET_VOLUME, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.setVolumeTo(mControllerStub, seq, value, flags);
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.setVolumeTo(mControllerStub, seq, value, flags);
             }
         });
     }
@@ -456,8 +453,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_VOLUME_ADJUST_VOLUME,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.adjustVolume(mControllerStub, seq, direction, flags);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.adjustVolume(mControllerStub, seq, direction, flags);
                     }
                 });
     }
@@ -479,23 +476,23 @@
     @Override
     public long getDuration() {
         synchronized (mLock) {
-            MediaMetadata2 metadata = mCurrentMediaItem == null ? null
+            MediaMetadata metadata = mCurrentMediaItem == null ? null
                     : mCurrentMediaItem.getMetadata();
             if (metadata != null && metadata.containsKey(METADATA_KEY_DURATION)) {
                 return metadata.getLong(METADATA_KEY_DURATION);
             }
         }
-        return SessionPlayer2.UNKNOWN_TIME;
+        return SessionPlayer.UNKNOWN_TIME;
     }
 
     @Override
     public long getCurrentPosition() {
         synchronized (mLock) {
-            if (mISession2 == null) {
+            if (mISession == null) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return UNKNOWN_TIME;
             }
-            if (mPlayerState == SessionPlayer2.PLAYER_STATE_PLAYING) {
+            if (mPlayerState == SessionPlayer.PLAYER_STATE_PLAYING) {
                 long timeDiff = (mInstance.mTimeDiff != null) ? mInstance.mTimeDiff
                         : SystemClock.elapsedRealtime() - mPositionEventTimeMs;
                 long expectedPosition = mPositionMs + (long) (mPlaybackSpeed * timeDiff);
@@ -508,7 +505,7 @@
     @Override
     public float getPlaybackSpeed() {
         synchronized (mLock) {
-            if (mISession2 == null) {
+            if (mISession == null) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return 0f;
             }
@@ -520,16 +517,16 @@
     public ListenableFuture<ControllerResult> setPlaybackSpeed(final float speed) {
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SET_SPEED, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.setPlaybackSpeed(mControllerStub, seq, speed);
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.setPlaybackSpeed(mControllerStub, seq, speed);
             }
         });
     }
 
     @Override
-    public @SessionPlayer2.BuffState int getBufferingState() {
+    public @SessionPlayer.BuffState int getBufferingState() {
         synchronized (mLock) {
-            if (mISession2 == null) {
+            if (mISession == null) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return BUFFERING_STATE_UNKNOWN;
             }
@@ -540,7 +537,7 @@
     @Override
     public long getBufferedPosition() {
         synchronized (mLock) {
-            if (mISession2 == null) {
+            if (mISession == null) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return UNKNOWN_TIME;
             }
@@ -557,30 +554,30 @@
 
     @Override
     public ListenableFuture<ControllerResult> setRating(final @NonNull String mediaId,
-            final @NonNull Rating2 rating) {
+            final @NonNull Rating rating) {
         return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_SET_RATING, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.setRating(mControllerStub, seq, mediaId,
-                        MediaUtils2.toParcelable(rating));
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.setRating(mControllerStub, seq, mediaId,
+                        MediaUtils.toParcelable(rating));
             }
         });
     }
 
     @Override
     public ListenableFuture<ControllerResult> sendCustomCommand(
-            final @NonNull SessionCommand2 command, final @Nullable Bundle args) {
+            final @NonNull SessionCommand command, final @Nullable Bundle args) {
         return dispatchRemoteSessionTask(command, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.onCustomCommand(mControllerStub, seq, MediaUtils2.toParcelable(command),
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.onCustomCommand(mControllerStub, seq, MediaUtils.toParcelable(command),
                         args);
             }
         });
     }
 
     @Override
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         synchronized (mLock) {
             return mPlaylist;
         }
@@ -588,12 +585,12 @@
 
     @Override
     public ListenableFuture<ControllerResult> setPlaylist(final @NonNull List<String> list,
-            final @Nullable MediaMetadata2 metadata) {
+            final @Nullable MediaMetadata metadata) {
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SET_PLAYLIST, new RemoteSessionTask() {
             @Override
-            public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                iSession2.setPlaylist(mControllerStub, seq, list,
-                        MediaUtils2.toParcelable(metadata));
+            public void run(IMediaSession iSession, int seq) throws RemoteException {
+                iSession.setPlaylist(mControllerStub, seq, list,
+                        MediaUtils.toParcelable(metadata));
             }
         });
     }
@@ -603,27 +600,27 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SET_MEDIA_ITEM,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.setMediaItem(mControllerStub, seq, mediaId);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.setMediaItem(mControllerStub, seq, mediaId);
                     }
                 });
     }
 
     @Override
     public ListenableFuture<ControllerResult> updatePlaylistMetadata(
-            final @Nullable MediaMetadata2 metadata) {
+            final @Nullable MediaMetadata metadata) {
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.updatePlaylistMetadata(mControllerStub, seq,
-                                MediaUtils2.toParcelable(metadata));
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.updatePlaylistMetadata(mControllerStub, seq,
+                                MediaUtils.toParcelable(metadata));
                     }
                 });
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         synchronized (mLock) {
             return mPlaylistMetadata;
         }
@@ -635,8 +632,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.addPlaylistItem(mControllerStub, seq, index, mediaId);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.addPlaylistItem(mControllerStub, seq, index, mediaId);
                     }
                 });
     }
@@ -646,8 +643,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.removePlaylistItem(mControllerStub, seq, index);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.removePlaylistItem(mControllerStub, seq, index);
                     }
                 });
     }
@@ -658,14 +655,14 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.replacePlaylistItem(mControllerStub, seq, index, mediaId);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.replacePlaylistItem(mControllerStub, seq, index, mediaId);
                     }
                 });
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         synchronized (mLock) {
             return mCurrentMediaItem;
         }
@@ -676,8 +673,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.skipToPreviousItem(mControllerStub, seq);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.skipToPreviousItem(mControllerStub, seq);
                     }
                 });
     }
@@ -687,8 +684,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.skipToNextItem(mControllerStub, seq);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.skipToNextItem(mControllerStub, seq);
                     }
                 });
     }
@@ -698,8 +695,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.skipToPlaylistItem(mControllerStub, seq, index);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.skipToPlaylistItem(mControllerStub, seq, index);
                     }
                 });
     }
@@ -716,8 +713,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SET_REPEAT_MODE,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.setRepeatMode(mControllerStub, seq, repeatMode);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.setRepeatMode(mControllerStub, seq, repeatMode);
                     }
                 });
     }
@@ -734,41 +731,8 @@
         return dispatchRemoteSessionTask(COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE,
                 new RemoteSessionTask() {
                     @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.setShuffleMode(mControllerStub, seq, shuffleMode);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<ControllerResult> subscribeRoutesInfo() {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.subscribeRoutesInfo(mControllerStub, seq);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<ControllerResult> unsubscribeRoutesInfo() {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.unsubscribeRoutesInfo(mControllerStub, seq);
-                    }
-                });
-    }
-
-    @Override
-    public ListenableFuture<ControllerResult> selectRoute(final @NonNull Bundle route) {
-        return dispatchRemoteSessionTask(COMMAND_CODE_SESSION_SELECT_ROUTE,
-                new RemoteSessionTask() {
-                    @Override
-                    public void run(IMediaSession2 iSession2, int seq) throws RemoteException {
-                        iSession2.selectRoute(mControllerStub, seq, route);
+                    public void run(IMediaSession iSession, int seq) throws RemoteException {
+                        iSession.setShuffleMode(mControllerStub, seq, shuffleMode);
                     }
                 });
     }
@@ -794,13 +758,13 @@
     }
 
     @Override
-    public @NonNull MediaController2 getInstance() {
+    public @NonNull MediaController getInstance() {
         return mInstance;
     }
 
     private void connectToService() {
         // Service. Needs to get fresh binder whenever connection is needed.
-        final Intent intent = new Intent(MediaSessionService2.SERVICE_INTERFACE);
+        final Intent intent = new Intent(MediaSessionService.SERVICE_INTERFACE);
         intent.setClassName(mToken.getPackageName(), mToken.getServiceName());
 
         // Use bindService() instead of startForegroundService() to start session service for three
@@ -829,10 +793,10 @@
     }
 
     private void connectToSession() {
-        IMediaSession2 iSession2 = IMediaSession2.Stub.asInterface((IBinder) mToken.getBinder());
+        IMediaSession iSession = IMediaSession.Stub.asInterface((IBinder) mToken.getBinder());
         int seq = mSequencedFutureManager.obtainNextSequenceNumber();
         try {
-            iSession2.connect(mControllerStub, seq, mContext.getPackageName());
+            iSession.connect(mControllerStub, seq, mContext.getPackageName());
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to call connection request. Framework will retry"
                     + " automatically");
@@ -840,7 +804,7 @@
     }
 
     // Returns session interface if the controller can send the command.
-    IMediaSession2 getSessionInterfaceIfAble(@CommandCode int commandCode) {
+    IMediaSession getSessionInterfaceIfAble(@CommandCode int commandCode) {
         synchronized (mLock) {
             if (!mAllowedCommands.hasCommand(commandCode)) {
                 // Cannot send because isn't allowed to.
@@ -848,22 +812,22 @@
                         + commandCode);
                 return null;
             }
-            return mISession2;
+            return mISession;
         }
     }
 
     // Returns session binder if the controller can send the command.
-    IMediaSession2 getSessionInterfaceIfAble(SessionCommand2 command) {
+    IMediaSession getSessionInterfaceIfAble(SessionCommand command) {
         synchronized (mLock) {
             if (!mAllowedCommands.hasCommand(command)) {
                 Log.w(TAG, "Controller isn't allowed to call command, command=" + command);
                 return null;
             }
-            return mISession2;
+            return mISession;
         }
     }
 
-    void notifyCurrentMediaItemChanged(final MediaItem2 item) {
+    void notifyCurrentMediaItemChanged(final MediaItem item) {
         synchronized (mLock) {
             mCurrentMediaItem = item;
         }
@@ -913,7 +877,7 @@
         });
     }
 
-    void notifyBufferingStateChanged(final MediaItem2 item, final int state,
+    void notifyBufferingStateChanged(final MediaItem item, final int state,
             long bufferedPositionMs) {
         synchronized (mLock) {
             mBufferingState = state;
@@ -930,7 +894,7 @@
         });
     }
 
-    void notifyPlaylistChanges(final List<MediaItem2> playlist, final MediaMetadata2 metadata) {
+    void notifyPlaylistChanges(final List<MediaItem> playlist, final MediaMetadata metadata) {
         synchronized (mLock) {
             mPlaylist = playlist;
             mPlaylistMetadata = metadata;
@@ -946,7 +910,7 @@
         });
     }
 
-    void notifyPlaylistMetadataChanges(final MediaMetadata2 metadata) {
+    void notifyPlaylistMetadataChanges(final MediaMetadata metadata) {
         synchronized (mLock) {
             mPlaylistMetadata = metadata;
         }
@@ -1035,23 +999,11 @@
         });
     }
 
-    void notifyRoutesInfoChanged(final List<Bundle> routes) {
-        mCallbackExecutor.execute(new Runnable() {
-            @Override
-            public void run() {
-                if (!mInstance.isConnected()) {
-                    return;
-                }
-                mCallback.onRoutesInfoChanged(mInstance, routes);
-            }
-        });
-    }
-
     // Should be used without a lock to prevent potential deadlock.
-    void onConnectedNotLocked(IMediaSession2 sessionBinder,
-            final SessionCommandGroup2 allowedCommands,
+    void onConnectedNotLocked(IMediaSession sessionBinder,
+            final SessionCommandGroup allowedCommands,
             final int playerState,
-            final MediaItem2 currentMediaItem,
+            final MediaItem currentMediaItem,
             final long positionEventTimeMs,
             final long positionMs,
             final float playbackSpeed,
@@ -1059,7 +1011,7 @@
             final PlaybackInfo info,
             final int repeatMode,
             final int shuffleMode,
-            final List<MediaItem2> playlist,
+            final List<MediaItem> playlist,
             final PendingIntent sessionActivity) {
         if (DEBUG) {
             Log.d(TAG, "onConnectedNotLocked sessionBinder=" + sessionBinder
@@ -1077,7 +1029,7 @@
                 if (mIsReleased) {
                     return;
                 }
-                if (mISession2 != null) {
+                if (mISession != null) {
                     Log.e(TAG, "Cannot be notified about the connection result many times."
                             + " Probably a bug or malicious app.");
                     close = true;
@@ -1095,11 +1047,11 @@
                 mShuffleMode = shuffleMode;
                 mPlaylist = playlist;
                 mSessionActivity = sessionActivity;
-                mISession2 = sessionBinder;
+                mISession = sessionBinder;
                 try {
                     // Implementation for the local binder is no-op,
                     // so can be used without worrying about deadlock.
-                    mISession2.asBinder().linkToDeath(mDeathRecipient, 0);
+                    mISession.asBinder().linkToDeath(mDeathRecipient, 0);
                 } catch (RemoteException e) {
                     if (DEBUG) {
                         Log.d(TAG, "Session died too early.", e);
@@ -1107,7 +1059,7 @@
                     close = true;
                     return;
                 }
-                mConnectedToken = new SessionToken2(new SessionToken2ImplBase(
+                mConnectedToken = new SessionToken(new SessionTokenImplBase(
                         mToken.getUid(), TYPE_SESSION, mToken.getPackageName(), sessionBinder));
             }
             mCallbackExecutor.execute(new Runnable() {
@@ -1127,22 +1079,22 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     void sendControllerResult(int seq, @NonNull ControllerResult result) {
-        final IMediaSession2 iSession2;
+        final IMediaSession iSession;
         synchronized (mLock) {
-            iSession2 = mISession2;
+            iSession = mISession;
         }
-        if (iSession2 == null) {
+        if (iSession == null) {
             return;
         }
         try {
-            iSession2.onControllerResult(mControllerStub, seq,
-                    MediaUtils2.toParcelable(result));
+            iSession.onControllerResult(mControllerStub, seq,
+                    MediaUtils.toParcelable(result));
         } catch (RemoteException e) {
             Log.w(TAG, "Error in sending");
         }
     }
 
-    void onCustomCommand(final int seq, final SessionCommand2 command, final Bundle args) {
+    void onCustomCommand(final int seq, final SessionCommand command, final Bundle args) {
         if (DEBUG) {
             Log.d(TAG, "onCustomCommand cmd=" + command.getCustomCommand());
         }
@@ -1163,7 +1115,7 @@
         });
     }
 
-    void onAllowedCommandsChanged(final SessionCommandGroup2 commands) {
+    void onAllowedCommandsChanged(final SessionCommandGroup commands) {
         mCallbackExecutor.execute(new Runnable() {
             @Override
             public void run() {
@@ -1172,7 +1124,7 @@
         });
     }
 
-    void onSetCustomLayout(final int seq, final List<MediaSession2.CommandButton> layout) {
+    void onSetCustomLayout(final int seq, final List<MediaSession.CommandButton> layout) {
         mCallbackExecutor.execute(new Runnable() {
             @Override
             public void run() {
@@ -1200,7 +1152,7 @@
                         + " connected to " + name);
                 return;
             }
-            IMediaSessionService2 iService = IMediaSessionService2.Stub.asInterface(service);
+            IMediaSessionService iService = IMediaSessionService.Stub.asInterface(service);
             if (iService == null) {
                 Log.wtf(TAG, "Service interface is missing.");
                 return;
diff --git a/media2/src/main/java/androidx/media2/MediaController2ImplLegacy.java b/media2/src/main/java/androidx/media2/MediaControllerImplLegacy.java
similarity index 79%
rename from media2/src/main/java/androidx/media2/MediaController2ImplLegacy.java
rename to media2/src/main/java/androidx/media2/MediaControllerImplLegacy.java
index b81cf27..229ae5c 100644
--- a/media2/src/main/java/androidx/media2/MediaController2ImplLegacy.java
+++ b/media2/src/main/java/androidx/media2/MediaControllerImplLegacy.java
@@ -18,27 +18,20 @@
 
 import static android.support.v4.media.MediaMetadataCompat.METADATA_KEY_DURATION;
 import static android.support.v4.media.MediaMetadataCompat.METADATA_KEY_MEDIA_ID;
-import static android.support.v4.media.session.MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS;
 
-import static androidx.media2.BaseResult2.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.MediaConstants2.ARGUMENT_COMMAND_CODE;
-import static androidx.media2.MediaConstants2.ARGUMENT_ICONTROLLER_CALLBACK;
-import static androidx.media2.MediaConstants2.ARGUMENT_PACKAGE_NAME;
-import static androidx.media2.MediaConstants2.ARGUMENT_PID;
-import static androidx.media2.MediaConstants2.ARGUMENT_ROUTE_BUNDLE;
-import static androidx.media2.MediaConstants2.ARGUMENT_UID;
-import static androidx.media2.MediaConstants2.CONTROLLER_COMMAND_BY_COMMAND_CODE;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_DISCONNECTED;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_NOT_SUPPORTED;
-import static androidx.media2.MediaController2.ControllerResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_PLAYER_SET_SPEED;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SELECT_ROUTE;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO;
-import static androidx.media2.SessionCommand2.COMMAND_VERSION_CURRENT;
-import static androidx.media2.SessionPlayer2.BUFFERING_STATE_UNKNOWN;
-import static androidx.media2.SessionPlayer2.PLAYER_STATE_IDLE;
-import static androidx.media2.SessionPlayer2.UNKNOWN_TIME;
+import static androidx.media2.BaseResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.MediaConstants.ARGUMENT_COMMAND_CODE;
+import static androidx.media2.MediaConstants.ARGUMENT_ICONTROLLER_CALLBACK;
+import static androidx.media2.MediaConstants.ARGUMENT_PACKAGE_NAME;
+import static androidx.media2.MediaConstants.ARGUMENT_PID;
+import static androidx.media2.MediaConstants.ARGUMENT_UID;
+import static androidx.media2.MediaConstants.CONTROLLER_COMMAND_BY_COMMAND_CODE;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_DISCONNECTED;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_NOT_SUPPORTED;
+import static androidx.media2.MediaController.ControllerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.SessionPlayer.BUFFERING_STATE_UNKNOWN;
+import static androidx.media2.SessionPlayer.PLAYER_STATE_IDLE;
+import static androidx.media2.SessionPlayer.UNKNOWN_TIME;
 
 import android.app.PendingIntent;
 import android.content.Context;
@@ -64,45 +57,47 @@
 import androidx.annotation.Nullable;
 import androidx.concurrent.futures.ResolvableFuture;
 import androidx.core.app.BundleCompat;
-import androidx.media2.MediaController2.ControllerCallback;
-import androidx.media2.MediaController2.ControllerResult;
-import androidx.media2.MediaController2.MediaController2Impl;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaController2.VolumeDirection;
-import androidx.media2.MediaController2.VolumeFlags;
-import androidx.media2.SessionCommand2.CommandCode;
-import androidx.media2.SessionPlayer2.BuffState;
-import androidx.media2.SessionPlayer2.RepeatMode;
-import androidx.media2.SessionPlayer2.ShuffleMode;
+import androidx.core.util.ObjectsCompat;
+import androidx.media2.MediaController.ControllerCallback;
+import androidx.media2.MediaController.ControllerResult;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaController.VolumeDirection;
+import androidx.media2.MediaController.VolumeFlags;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.SessionCommand.CommandCode;
+import androidx.media2.SessionPlayer.BuffState;
+import androidx.media2.SessionPlayer.RepeatMode;
+import androidx.media2.SessionPlayer.ShuffleMode;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.Executor;
 
 // TODO: Find better way to return listenable future.
-class MediaController2ImplLegacy implements MediaController2Impl {
+class MediaControllerImplLegacy implements MediaController.MediaControllerImpl {
 
     private static final String TAG = "MC2ImplLegacy";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     private static final long POSITION_DIFF_TOLERANCE = 100;
-    private static final String SESSION_COMMAND_ON_EXTRA_CHANGED =
-            "android.media.session.command.ON_EXTRA_CHANGED";
-    private static final String SESSION_COMMAND_ON_CAPTIONING_ENABLED_CHANGED =
+    static final String SESSION_COMMAND_ON_EXTRAS_CHANGED =
+            "android.media.session.command.ON_EXTRAS_CHANGED";
+    static final String SESSION_COMMAND_ON_CAPTIONING_ENABLED_CHANGED =
             "android.media.session.command.ON_CAPTIONING_ENALBED_CHANGED";
 
     // Note: Using {@code null} doesn't helpful here because MediaBrowserServiceCompat always wraps
     //       the rootHints so it becomes non-null.
     static final Bundle sDefaultRootExtras = new Bundle();
     static {
-        sDefaultRootExtras.putBoolean(MediaConstants2.ROOT_EXTRA_DEFAULT, true);
+        sDefaultRootExtras.putBoolean(MediaConstants.ROOT_EXTRA_DEFAULT, true);
     }
 
     final Context mContext;
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    final SessionToken2 mToken;
+    final SessionToken mToken;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final ControllerCallback mCallback;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
@@ -116,21 +111,22 @@
     final Object mLock = new Object();
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaController2 mInstance;
+            MediaController mInstance;
 
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     MediaBrowserCompat mBrowserCompat;
     @GuardedBy("mLock")
-    private boolean mIsReleased;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+    boolean mIsReleased;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    List<MediaItem2> mPlaylist;
+    List<MediaItem> mPlaylist;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     List<QueueItem> mQueue;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaMetadata2 mPlaylistMetadata;
+            MediaMetadata mPlaylistMetadata;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     @RepeatMode int mRepeatMode;
@@ -142,7 +138,7 @@
     int mPlayerState;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaItem2 mCurrentMediaItem;
+            MediaItem mCurrentMediaItem;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     int mBufferingState;
@@ -159,11 +155,15 @@
     PlaybackInfo mPlaybackInfo;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    SessionCommandGroup2 mAllowedCommands;
+    SessionCommandGroup mAllowedCommands;
+    @GuardedBy("mLock")
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+    List<CommandButton> mCustomLayout;
 
     // Media 1.0 variables
     @GuardedBy("mLock")
-    private MediaControllerCompat mControllerCompat;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+    MediaControllerCompat mControllerCompat;
     @GuardedBy("mLock")
     private ControllerCompatCallback mControllerCompatCallback;
     @GuardedBy("mLock")
@@ -178,19 +178,19 @@
     @GuardedBy("mLock")
     private volatile boolean mConnected;
 
-    MediaController2ImplLegacy(@NonNull Context context, @NonNull MediaController2 instance,
-            @NonNull SessionToken2 token, @NonNull Executor executor,
+    MediaControllerImplLegacy(@NonNull Context context, @NonNull MediaController instance,
+            @NonNull SessionToken token, @NonNull Executor executor,
             @NonNull ControllerCallback callback) {
         mContext = context;
         mInstance = instance;
-        mHandlerThread = new HandlerThread("MediaController2_Thread");
+        mHandlerThread = new HandlerThread("MediaController_Thread");
         mHandlerThread.start();
         mHandler = new Handler(mHandlerThread.getLooper());
         mToken = token;
         mCallback = callback;
         mCallbackExecutor = executor;
 
-        if (mToken.getType() == SessionToken2.TYPE_SESSION) {
+        if (mToken.getType() == SessionToken.TYPE_SESSION) {
             synchronized (mLock) {
                 mBrowserCompat = null;
             }
@@ -239,14 +239,14 @@
     }
 
     @Override
-    public @Nullable SessionToken2 getConnectedSessionToken() {
+    public @Nullable SessionToken getConnectedSessionToken() {
         synchronized (mLock) {
             return mConnected ? mToken : null;
         }
     }
 
     private ListenableFuture<ControllerResult> createFutureWithResult(int resultCode) {
-        final MediaItem2 item;
+        final MediaItem item;
         synchronized (mLock) {
             item = mCurrentMediaItem;
         }
@@ -465,7 +465,7 @@
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return SessionPlayer2.PLAYER_STATE_ERROR;
+                return SessionPlayer.PLAYER_STATE_ERROR;
             }
             return mPlayerState;
         }
@@ -524,8 +524,8 @@
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return BUFFERING_STATE_UNKNOWN;
             }
-            return mPlaybackStateCompat == null ? SessionPlayer2.BUFFERING_STATE_UNKNOWN
-                    : MediaUtils2.toBufferingState(mPlaybackStateCompat.getState());
+            return mPlaybackStateCompat == null ? SessionPlayer.BUFFERING_STATE_UNKNOWN
+                    : MediaUtils.toBufferingState(mPlaybackStateCompat.getState());
         }
     }
 
@@ -554,7 +554,7 @@
 
     @Override
     public ListenableFuture<ControllerResult> setRating(@NonNull String mediaId,
-            @NonNull Rating2 rating) {
+            @NonNull Rating rating) {
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
@@ -562,20 +562,25 @@
             }
             if (mCurrentMediaItem != null && mediaId.equals(mCurrentMediaItem.getMediaId())) {
                 mControllerCompat.getTransportControls().setRating(
-                        MediaUtils2.convertToRatingCompat(rating));
+                        MediaUtils.convertToRatingCompat(rating));
             }
         }
         return createFutureWithResult(RESULT_CODE_SUCCESS);
     }
 
     @Override
-    public ListenableFuture<ControllerResult> sendCustomCommand(@NonNull SessionCommand2 command,
+    public ListenableFuture<ControllerResult> sendCustomCommand(@NonNull SessionCommand command,
             @Nullable Bundle args) {
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return createFutureWithResult(RESULT_CODE_DISCONNECTED);
             }
+            if (mAllowedCommands.hasCommand(command)) {
+                mControllerCompat.getTransportControls().sendCustomAction(
+                        command.getCustomCommand(), args);
+                return createFutureWithResult(RESULT_CODE_SUCCESS);
+            }
             final ResolvableFuture<ControllerResult> result = ResolvableFuture.create();
             ResultReceiver cb = new ResultReceiver(mHandler) {
                 @Override
@@ -589,7 +594,7 @@
     }
 
     @Override
-    public @Nullable List<MediaItem2> getPlaylist() {
+    public @Nullable List<MediaItem> getPlaylist() {
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
@@ -601,7 +606,7 @@
 
     @Override
     public ListenableFuture<ControllerResult> setPlaylist(@NonNull List<String> list,
-            @Nullable MediaMetadata2 metadata) {
+            @Nullable MediaMetadata metadata) {
         return createFutureWithResult(RESULT_CODE_NOT_SUPPORTED);
     }
 
@@ -612,12 +617,12 @@
 
     @Override
     public ListenableFuture<ControllerResult> updatePlaylistMetadata(
-            @Nullable MediaMetadata2 metadata) {
+            @Nullable MediaMetadata metadata) {
         return createFutureWithResult(RESULT_CODE_NOT_SUPPORTED);
     }
 
     @Override
-    public @Nullable MediaMetadata2 getPlaylistMetadata() {
+    public @Nullable MediaMetadata getPlaylistMetadata() {
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
@@ -635,7 +640,7 @@
                 return createFutureWithResult(RESULT_CODE_DISCONNECTED);
             }
             mControllerCompat.addQueueItem(
-                    MediaUtils2.createMediaDescriptionCompat(mediaId), index);
+                    MediaUtils.createMediaDescriptionCompat(mediaId), index);
         }
         return createFutureWithResult(RESULT_CODE_SUCCESS);
     }
@@ -673,7 +678,7 @@
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
@@ -726,7 +731,7 @@
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return SessionPlayer2.REPEAT_MODE_NONE;
+                return SessionPlayer.REPEAT_MODE_NONE;
             }
             return mRepeatMode;
         }
@@ -739,7 +744,7 @@
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return createFutureWithResult(RESULT_CODE_DISCONNECTED);
             }
-            // SessionPlayer2.RepeatMode has the same values with
+            // SessionPlayer.RepeatMode has the same values with
             // PlaybackStateCompat.RepeatMode.
             mControllerCompat.getTransportControls().setRepeatMode(repeatMode);
         }
@@ -751,7 +756,7 @@
         synchronized (mLock) {
             if (!mConnected) {
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return SessionPlayer2.SHUFFLE_MODE_NONE;
+                return SessionPlayer.SHUFFLE_MODE_NONE;
             }
             return mShuffleMode;
         }
@@ -764,7 +769,7 @@
                 Log.w(TAG, "Session isn't active", new IllegalStateException());
                 return createFutureWithResult(RESULT_CODE_DISCONNECTED);
             }
-            // SessionPlayer2.ShuffleMode has the same values with
+            // SessionPlayer.ShuffleMode has the same values with
             // PlaybackStateCompat.ShuffleMode.
             mControllerCompat.getTransportControls().setShuffleMode(shuffleMode);
         }
@@ -772,44 +777,6 @@
     }
 
     @Override
-    public ListenableFuture<ControllerResult> subscribeRoutesInfo() {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_CODE_DISCONNECTED);
-            }
-        }
-        sendCommand(COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO);
-        return createFutureWithResult(RESULT_CODE_SUCCESS);
-    }
-
-    @Override
-    public ListenableFuture<ControllerResult> unsubscribeRoutesInfo() {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_CODE_DISCONNECTED);
-            }
-        }
-        sendCommand(COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO);
-        return createFutureWithResult(RESULT_CODE_SUCCESS);
-    }
-
-    @Override
-    public ListenableFuture<ControllerResult> selectRoute(@NonNull Bundle route) {
-        synchronized (mLock) {
-            if (!mConnected) {
-                Log.w(TAG, "Session isn't active", new IllegalStateException());
-                return createFutureWithResult(RESULT_CODE_DISCONNECTED);
-            }
-        }
-        Bundle args = new Bundle();
-        args.putBundle(ARGUMENT_ROUTE_BUNDLE, route);
-        sendCommand(COMMAND_CODE_SESSION_SELECT_ROUTE, args);
-        return createFutureWithResult(RESULT_CODE_SUCCESS);
-    }
-
-    @Override
     public @NonNull Context getContext() {
         return mContext;
     }
@@ -832,7 +799,7 @@
     }
 
     @Override
-    public @NonNull MediaController2 getInstance() {
+    public @NonNull MediaController getInstance() {
         return mInstance;
     }
 
@@ -841,53 +808,39 @@
         if (DEBUG) {
             Log.d(TAG, "onConnectedNotLocked token=" + mToken);
         }
-        final SessionCommandGroup2.Builder commandsBuilder = new SessionCommandGroup2.Builder();
+        final SessionCommandGroup allowedCommands;
+        final List<CommandButton> customLayout;
 
         synchronized (mLock) {
             if (mIsReleased || mConnected) {
                 return;
             }
-            long sessionFlags = mControllerCompat.getFlags();
-            boolean includePlaylistCommands = (sessionFlags & FLAG_HANDLES_QUEUE_COMMANDS) != 0;
-            commandsBuilder.addAllPlayerCommands(COMMAND_VERSION_CURRENT, includePlaylistCommands);
-            commandsBuilder.addAllVolumeCommands(COMMAND_VERSION_CURRENT);
-            commandsBuilder.addAllSessionCommands(COMMAND_VERSION_CURRENT);
-
-            commandsBuilder.removeCommand(COMMAND_CODE_PLAYER_SET_SPEED);
-            commandsBuilder.removeCommand(COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO);
-            commandsBuilder.removeCommand(COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO);
-            commandsBuilder.removeCommand(COMMAND_CODE_SESSION_SELECT_ROUTE);
-
-            commandsBuilder.addCommand(new SessionCommand2(SESSION_COMMAND_ON_EXTRA_CHANGED, null));
-            commandsBuilder.addCommand(
-                    new SessionCommand2(SESSION_COMMAND_ON_CAPTIONING_ENABLED_CHANGED, null));
-
-            mAllowedCommands = commandsBuilder.build();
-
             mPlaybackStateCompat = mControllerCompat.getPlaybackState();
-            if (mPlaybackStateCompat == null) {
-                mPlayerState = PLAYER_STATE_IDLE;
-                mBufferedPosition = UNKNOWN_TIME;
-            } else {
-                mPlayerState = MediaUtils2.convertToPlayerState(mPlaybackStateCompat);
-                mBufferedPosition = mPlaybackStateCompat.getBufferedPosition();
-            }
+            mAllowedCommands = MediaUtils.convertToSessionCommandGroup(
+                    mControllerCompat.getFlags(), mPlaybackStateCompat);
+            mPlayerState = MediaUtils.convertToPlayerState(mPlaybackStateCompat);
+            mBufferedPosition = mPlaybackStateCompat == null
+                    ? UNKNOWN_TIME : mPlaybackStateCompat.getBufferedPosition();
+            mCustomLayout = MediaUtils.convertToCustomLayout(mPlaybackStateCompat);
 
-            mPlaybackInfo = MediaUtils2.toPlaybackInfo2(mControllerCompat.getPlaybackInfo());
+            allowedCommands = mAllowedCommands;
+            customLayout = mCustomLayout;
+
+            mPlaybackInfo = MediaUtils.toPlaybackInfo2(mControllerCompat.getPlaybackInfo());
 
             mRepeatMode = mControllerCompat.getRepeatMode();
             mShuffleMode = mControllerCompat.getShuffleMode();
 
-            mQueue = MediaUtils2.removeNullElements(mControllerCompat.getQueue());
+            mQueue = MediaUtils.removeNullElements(mControllerCompat.getQueue());
             if (mQueue == null || mQueue.size() == 0) {
-                // MediaSessionCompat can set queue as null or empty. However, SessionPlayer2 should
+                // MediaSessionCompat can set queue as null or empty. However, SessionPlayer should
                 // not set playlist as null or empty. Therefore, we treat them as the same.
                 mQueue = null;
                 mPlaylist = null;
             } else {
-                mPlaylist = MediaUtils2.convertQueueItemListToMediaItem2List(mQueue);
+                mPlaylist = MediaUtils.convertQueueItemListToMediaItemList(mQueue);
             }
-            mPlaylistMetadata = MediaUtils2.convertToMediaMetadata2(
+            mPlaylistMetadata = MediaUtils.convertToMediaMetadata(
                     mControllerCompat.getQueueTitle());
 
             // Call this after set playlist.
@@ -897,9 +850,17 @@
         mCallbackExecutor.execute(new Runnable() {
             @Override
             public void run() {
-                mCallback.onConnected(mInstance, commandsBuilder.build());
+                mCallback.onConnected(mInstance, allowedCommands);
             }
         });
+        if (!customLayout.isEmpty()) {
+            mCallbackExecutor.execute(new Runnable() {
+                @Override
+                public void run() {
+                    mCallback.onSetCustomLayout(mInstance, customLayout);
+                }
+            });
+        }
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
@@ -981,7 +942,7 @@
 
         if (mQueue == null) {
             mCurrentMediaItemIndex = -1;
-            mCurrentMediaItem = MediaUtils2.convertToMediaItem2(metadata);
+            mCurrentMediaItem = MediaUtils.convertToMediaItem(metadata);
             return;
         }
 
@@ -991,7 +952,7 @@
             for (int i = 0; i < mQueue.size(); ++i) {
                 QueueItem item = mQueue.get(i);
                 if (item.getQueueId() == queueId) {
-                    mCurrentMediaItem = MediaUtils2.convertToMediaItem2(metadata);
+                    mCurrentMediaItem = MediaUtils.convertToMediaItem(metadata);
                     mCurrentMediaItemIndex = i;
                     return;
                 }
@@ -1001,7 +962,7 @@
         String mediaId = metadata.getString(METADATA_KEY_MEDIA_ID);
         if (mediaId == null) {
             mCurrentMediaItemIndex = -1;
-            mCurrentMediaItem = MediaUtils2.convertToMediaItem2(metadata);
+            mCurrentMediaItem = MediaUtils.convertToMediaItem(metadata);
             return;
         }
 
@@ -1011,7 +972,7 @@
                 && TextUtils.equals(mediaId,
                         mQueue.get(mSkipToPlaylistIndex).getDescription().getMediaId())) {
             // metadata changed after skipToPlaylistIItem() was called.
-            mCurrentMediaItem = MediaUtils2.convertToMediaItem2(metadata);
+            mCurrentMediaItem = MediaUtils.convertToMediaItem(metadata);
             mCurrentMediaItemIndex = mSkipToPlaylistIndex;
             mSkipToPlaylistIndex = -1;
             return;
@@ -1022,14 +983,14 @@
             QueueItem item = mQueue.get(i);
             if (TextUtils.equals(mediaId, item.getDescription().getMediaId())) {
                 mCurrentMediaItemIndex = i;
-                mCurrentMediaItem = MediaUtils2.convertToMediaItem2(metadata);
+                mCurrentMediaItem = MediaUtils.convertToMediaItem(metadata);
                 return;
             }
         }
 
         // Failed to find media item from the playlist.
         mCurrentMediaItemIndex = -1;
-        mCurrentMediaItem = MediaUtils2.convertToMediaItem2(mMediaMetadataCompat);
+        mCurrentMediaItem = MediaUtils.convertToMediaItem(mMediaMetadataCompat);
     }
 
     private class ConnectionCallback extends MediaBrowserCompat.ConnectionCallback {
@@ -1073,11 +1034,16 @@
 
         @Override
         public void onSessionEvent(final String event, final Bundle extras) {
+            synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
+            }
             mCallbackExecutor.execute(new Runnable() {
                 @Override
                 public void run() {
                     // Ignore return because legacy session cannot get result back.
-                    mCallback.onCustomCommand(mInstance, new SessionCommand2(event, null), extras);
+                    mCallback.onCustomCommand(mInstance, new SessionCommand(event, null), extras);
                 }
             });
         }
@@ -1085,13 +1051,20 @@
         @Override
         public void onPlaybackStateChanged(final PlaybackStateCompat state) {
             final PlaybackStateCompat prevState;
-            final MediaItem2 prevItem;
-            final MediaItem2 currentItem;
+            final MediaItem prevItem;
+            final MediaItem currentItem;
+            final List<CommandButton> prevLayout;
+            final List<CommandButton> currentLayout;
+            final SessionCommandGroup prevAllowedCommands;
+            final SessionCommandGroup currentAllowedCommands;
             synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
                 prevItem = mCurrentMediaItem;
                 prevState = mPlaybackStateCompat;
                 mPlaybackStateCompat = state;
-                mPlayerState = MediaUtils2.convertToPlayerState(state);
+                mPlayerState = MediaUtils.convertToPlayerState(state);
                 mBufferedPosition = state == null ? UNKNOWN_TIME
                         : state.getBufferedPosition();
 
@@ -1104,6 +1077,15 @@
                     }
                 }
                 currentItem = mCurrentMediaItem;
+
+                prevLayout = mCustomLayout;
+                mCustomLayout = MediaUtils.convertToCustomLayout(state);
+                currentLayout = mCustomLayout;
+
+                prevAllowedCommands = mAllowedCommands;
+                mAllowedCommands = MediaUtils.convertToSessionCommandGroup(
+                        mControllerCompat.getFlags(), mPlaybackStateCompat);
+                currentAllowedCommands = mAllowedCommands;
             }
 
             if (prevItem != currentItem) {
@@ -1131,7 +1113,7 @@
                     @Override
                     public void run() {
                         mCallback.onPlayerStateChanged(
-                                mInstance, MediaUtils2.convertToPlayerState(state));
+                                mInstance, MediaUtils.convertToPlayerState(state));
                     }
                 });
             }
@@ -1158,14 +1140,47 @@
                 }
             }
 
+            Set<SessionCommand> prevCommands = prevAllowedCommands.getCommands();
+            Set<SessionCommand> currentCommands = currentAllowedCommands.getCommands();
+            if (prevCommands.size() != currentCommands.size()
+                    || !prevCommands.containsAll(currentCommands)) {
+                mCallbackExecutor.execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        mCallback.onAllowedCommandsChanged(mInstance, currentAllowedCommands);
+                    }
+                });
+            }
+            boolean layoutChanged;
+            if (prevLayout.size() == currentLayout.size()) {
+                layoutChanged = false;
+                for (int i = 0; i < currentLayout.size(); i++) {
+                    if (!ObjectsCompat.equals(prevLayout.get(i).getCommand(),
+                            currentLayout.get(i).getCommand())) {
+                        layoutChanged = true;
+                        break;
+                    }
+                }
+            } else {
+                layoutChanged = true;
+            }
+            if (layoutChanged) {
+                mCallbackExecutor.execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        mCallback.onSetCustomLayout(mInstance, currentLayout);
+                    }
+                });
+            }
+
             if (currentItem == null) {
                 return;
             }
             // Update buffering state if needed
-            final int bufferingState = MediaUtils2.toBufferingState(state.getState());
+            final int bufferingState = MediaUtils.toBufferingState(state.getState());
             final int prevBufferingState = prevState == null
-                    ? SessionPlayer2.BUFFERING_STATE_UNKNOWN
-                    : MediaUtils2.toBufferingState(prevState.getState());
+                    ? SessionPlayer.BUFFERING_STATE_UNKNOWN
+                    : MediaUtils.toBufferingState(prevState.getState());
             if (bufferingState != prevBufferingState) {
                 mCallbackExecutor.execute(new Runnable() {
                     @Override
@@ -1178,9 +1193,12 @@
 
         @Override
         public void onMetadataChanged(MediaMetadataCompat metadata) {
-            final MediaItem2 prevItem;
-            final MediaItem2 currentItem;
+            final MediaItem prevItem;
+            final MediaItem currentItem;
             synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
                 prevItem = mCurrentMediaItem;
                 setCurrentMediaItemLocked(metadata);
                 currentItem = mCurrentMediaItem;
@@ -1197,18 +1215,21 @@
 
         @Override
         public void onQueueChanged(List<QueueItem> queue) {
-            final List<MediaItem2> playlist;
-            final MediaMetadata2 playlistMetadata;
+            final List<MediaItem> playlist;
+            final MediaMetadata playlistMetadata;
             synchronized (mLock) {
-                mQueue = MediaUtils2.removeNullElements(queue);
+                if (mIsReleased) {
+                    return;
+                }
+                mQueue = MediaUtils.removeNullElements(queue);
                 if (mQueue == null || mQueue.size() == 0) {
-                    // MediaSessionCompat can set queue as null or empty. However, SessionPlayer2
+                    // MediaSessionCompat can set queue as null or empty. However, SessionPlayer
                     // should not set playlist as null or empty. Therefore, we treat them as the
                     // same.
                     mQueue = null;
                     mPlaylist = null;
                 } else {
-                    mPlaylist = MediaUtils2.convertQueueItemListToMediaItem2List(mQueue);
+                    mPlaylist = MediaUtils.convertQueueItemListToMediaItemList(mQueue);
                 }
                 playlist = mPlaylist;
                 playlistMetadata = mPlaylistMetadata;
@@ -1223,9 +1244,12 @@
 
         @Override
         public void onQueueTitleChanged(CharSequence title) {
-            final MediaMetadata2 playlistMetadata;
+            final MediaMetadata playlistMetadata;
             synchronized (mLock) {
-                mPlaylistMetadata = MediaUtils2.convertToMediaMetadata2(title);
+                if (mIsReleased) {
+                    return;
+                }
+                mPlaylistMetadata = MediaUtils.convertToMediaMetadata(title);
                 playlistMetadata = mPlaylistMetadata;
             }
             mCallbackExecutor.execute(new Runnable() {
@@ -1238,34 +1262,47 @@
 
         @Override
         public void onExtrasChanged(final Bundle extras) {
+            synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
+            }
             mCallbackExecutor.execute(new Runnable() {
                 @Override
                 public void run() {
-                    mCallback.onCustomCommand(mInstance,
-                            new SessionCommand2(SESSION_COMMAND_ON_EXTRA_CHANGED, null),
-                            extras);
+                    mCallback.onCustomCommand(mInstance, new SessionCommand(
+                            SESSION_COMMAND_ON_EXTRAS_CHANGED, null), extras);
                 }
             });
         }
 
         @Override
         public void onAudioInfoChanged(final MediaControllerCompat.PlaybackInfo info) {
+            synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
+            }
             mCallbackExecutor.execute(new Runnable() {
                 @Override
                 public void run() {
-                    mCallback.onPlaybackInfoChanged(mInstance, MediaUtils2.toPlaybackInfo2(info));
+                    mCallback.onPlaybackInfoChanged(mInstance, MediaUtils.toPlaybackInfo2(info));
                 }
             });
         }
 
         @Override
-        public void onCaptioningEnabledChanged(boolean enabled) {
+        public void onCaptioningEnabledChanged(final boolean enabled) {
+            synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
+            }
             mCallbackExecutor.execute(new Runnable() {
                 @Override
                 public void run() {
-                    mCallback.onCustomCommand(mInstance,
-                            new SessionCommand2(SESSION_COMMAND_ON_CAPTIONING_ENABLED_CHANGED,
-                                    null), null);
+                    mCallback.onCustomCommand(mInstance, new SessionCommand(
+                            SESSION_COMMAND_ON_CAPTIONING_ENABLED_CHANGED, null), null);
                 }
             });
         }
@@ -1273,6 +1310,9 @@
         @Override
         public void onRepeatModeChanged(@PlaybackStateCompat.RepeatMode final int repeatMode) {
             synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
                 mRepeatMode = repeatMode;
             }
             mCallbackExecutor.execute(new Runnable() {
@@ -1286,6 +1326,9 @@
         @Override
         public void onShuffleModeChanged(@PlaybackStateCompat.ShuffleMode final int shuffleMode) {
             synchronized (mLock) {
+                if (mIsReleased) {
+                    return;
+                }
                 mShuffleMode = shuffleMode;
             }
             mCallbackExecutor.execute(new Runnable() {
diff --git a/media2/src/main/java/androidx/media2/MediaControllerStub.java b/media2/src/main/java/androidx/media2/MediaControllerStub.java
new file mode 100644
index 0000000..28347f0
--- /dev/null
+++ b/media2/src/main/java/androidx/media2/MediaControllerStub.java
@@ -0,0 +1,553 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2;
+
+import android.app.PendingIntent;
+import android.os.Binder;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.media2.MediaBrowser.BrowserResult;
+import androidx.media2.MediaController.ControllerResult;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSession.SessionResult;
+import androidx.media2.SessionPlayer.BuffState;
+import androidx.versionedparcelable.ParcelImpl;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
+class MediaControllerStub extends IMediaController.Stub {
+    private static final String TAG = "MediaControllerStub";
+    private static final boolean DEBUG = true; // TODO(jaewan): Change
+
+    private final WeakReference<MediaControllerImplBase> mController;
+    private final SequencedFutureManager mSequencedFutureManager;
+
+    MediaControllerStub(MediaControllerImplBase controller, SequencedFutureManager manager) {
+        mController = new WeakReference<>(controller);
+        mSequencedFutureManager = manager;
+    }
+
+    @Override
+    public void onSessionResult(int seq, ParcelImpl sessionResult) {
+        if (sessionResult == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            SessionResult result = MediaUtils.fromParcelable(sessionResult);
+            if (result == null) {
+                return;
+            }
+            mSequencedFutureManager.setFutureResult(seq, ControllerResult.from(result));
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onLibraryResult(int seq, ParcelImpl libraryResult) {
+        if (libraryResult == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            try {
+                final MediaBrowser browser = getBrowser();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            LibraryResult result = MediaUtils.fromParcelable(libraryResult);
+            if (result == null) {
+                return;
+            }
+            mSequencedFutureManager.setFutureResult(seq, BrowserResult.from(result));
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onCurrentMediaItemChanged(ParcelImpl item) {
+        if (item == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifyCurrentMediaItemChanged((MediaItem) MediaUtils.fromParcelable(item));
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onPlayerStateChanged(long eventTimeMs, long positionMs, int state) {
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifyPlayerStateChanges(eventTimeMs, positionMs, state);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onPlaybackSpeedChanged(long eventTimeMs, long positionMs, float speed) {
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifyPlaybackSpeedChanges(eventTimeMs, positionMs, speed);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onBufferingStateChanged(ParcelImpl item, @BuffState int state,
+            long bufferedPositionMs) {
+        if (item == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            MediaItem itemObj = MediaUtils.fromParcelable(item);
+            if (itemObj == null) {
+                Log.w(TAG, "onBufferingStateChanged(): Ignoring null item");
+                return;
+            }
+            controller.notifyBufferingStateChanged(itemObj, state, bufferedPositionMs);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onPlaylistChanged(ParcelImplListSlice listSlice, ParcelImpl metadata) {
+        if (metadata == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            List<MediaItem> playlist =
+                    MediaUtils.convertParcelImplListSliceToMediaItemList(listSlice);
+            controller.notifyPlaylistChanges(playlist,
+                    (MediaMetadata) MediaUtils.fromParcelable(metadata));
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onPlaylistMetadataChanged(ParcelImpl metadata) throws RuntimeException {
+        if (metadata == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifyPlaylistMetadataChanges(
+                    (MediaMetadata) MediaUtils.fromParcelable(metadata));
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onRepeatModeChanged(int repeatMode) {
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifyRepeatModeChanges(repeatMode);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onShuffleModeChanged(int shuffleMode) {
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifyShuffleModeChanges(shuffleMode);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onPlaybackCompleted() {
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifyPlaybackCompleted();
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onPlaybackInfoChanged(ParcelImpl playbackInfo) throws RuntimeException {
+        if (playbackInfo == null) {
+            return;
+        }
+        if (DEBUG) {
+            Log.d(TAG, "onPlaybackInfoChanged");
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            PlaybackInfo info = MediaUtils.fromParcelable(playbackInfo);
+            if (info == null) {
+                Log.w(TAG, "onPlaybackInfoChanged(): Ignoring null playbackInfo");
+                return;
+            }
+            controller.notifyPlaybackInfoChanges(info);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onSeekCompleted(long eventTimeMs, long positionMs, long seekPositionMs) {
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            controller.notifySeekCompleted(eventTimeMs, positionMs, seekPositionMs);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onConnected(IMediaSession sessionBinder, ParcelImpl commandGroup, int playerState,
+            ParcelImpl currentItem, long positionEventTimeMs, long positionMs, float playbackSpeed,
+            long bufferedPositionMs, ParcelImpl playbackInfo, int shuffleMode, int repeatMode,
+            ParcelImplListSlice listSlice, PendingIntent sessionActivity) {
+        if (sessionBinder == null || commandGroup == null || currentItem == null
+                || playbackInfo == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller = mController.get();
+            if (controller == null) {
+                if (DEBUG) {
+                    Log.d(TAG, "onConnected after MediaController2.close()");
+                }
+                return;
+            }
+            List<MediaItem> itemList =
+                    MediaUtils.convertParcelImplListSliceToMediaItemList(listSlice);
+            controller.onConnectedNotLocked(sessionBinder,
+                    (SessionCommandGroup) MediaUtils.fromParcelable(commandGroup), playerState,
+                    (MediaItem) MediaUtils.fromParcelable(currentItem),
+                    positionEventTimeMs, positionMs, playbackSpeed, bufferedPositionMs,
+                    (PlaybackInfo) MediaUtils.fromParcelable(playbackInfo), repeatMode,
+                    shuffleMode,
+                    itemList, sessionActivity);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onDisconnected() {
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller = mController.get();
+            if (controller == null) {
+                if (DEBUG) {
+                    Log.d(TAG, "onDisconnected after MediaController2.close()");
+                }
+                return;
+            }
+            controller.getInstance().close();
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onSetCustomLayout(int seq, List<ParcelImpl> commandButtonList) {
+        if (commandButtonList == null) {
+            Log.w(TAG, "setCustomLayout(): Ignoring null commandButtonList");
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            if (controller == null) {
+                // TODO(jaewan): Revisit here. Could be a bug
+                return;
+            }
+            List<CommandButton> layout = new ArrayList<>();
+            for (int i = 0; i < commandButtonList.size(); i++) {
+                CommandButton button = MediaUtils.fromParcelable(commandButtonList.get(i));
+                if (button != null) {
+                    layout.add(button);
+                }
+            }
+            controller.onSetCustomLayout(seq, layout);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onAllowedCommandsChanged(ParcelImpl commands) {
+        if (commands == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            if (controller == null) {
+                // TODO(jaewan): Revisit here. Could be a bug
+                return;
+            }
+            SessionCommandGroup commandGroup = MediaUtils.fromParcelable(commands);
+            if (commandGroup == null) {
+                Log.w(TAG, "onAllowedCommandsChanged(): Ignoring null commands");
+                return;
+            }
+            controller.onAllowedCommandsChanged(commandGroup);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onCustomCommand(int seq, ParcelImpl commandParcel, Bundle args) {
+        if (commandParcel == null) {
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaControllerImplBase controller;
+            try {
+                controller = getController();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            SessionCommand command = MediaUtils.fromParcelable(commandParcel);
+            if (command == null) {
+                Log.w(TAG, "sendCustomCommand(): Ignoring null command");
+                return;
+            }
+            controller.onCustomCommand(seq, command, args);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////////////////
+    // MediaBrowser specific
+    ////////////////////////////////////////////////////////////////////////////////////////////
+    @Override
+    public void onSearchResultChanged(final String query, final int itemCount,
+            final ParcelImpl libraryParams) throws RuntimeException {
+        if (libraryParams == null) {
+            return;
+        }
+        if (TextUtils.isEmpty(query)) {
+            Log.w(TAG, "onSearchResultChanged(): Ignoring empty query");
+            return;
+        }
+        if (itemCount < 0) {
+            Log.w(TAG, "onSearchResultChanged(): Ignoring negative itemCount: " + itemCount);
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaBrowser browser;
+            try {
+                browser = getBrowser();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            if (browser == null) {
+                return;
+            }
+            browser.getCallbackExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    browser.getCallback().onSearchResultChanged(browser, query, itemCount,
+                            (LibraryParams) MediaUtils.fromParcelable(libraryParams));
+                }
+            });
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
+    public void onChildrenChanged(final String parentId, final int itemCount,
+            final ParcelImpl libraryParams) {
+        if (libraryParams == null) {
+            return;
+        }
+        if (TextUtils.isEmpty(parentId)) {
+            Log.w(TAG, "onChildrenChanged(): Ignoring empty parentId");
+            return;
+        }
+        if (itemCount < 0) {
+            Log.w(TAG, "onChildrenChanged(): Ignoring negative itemCount: " + itemCount);
+            return;
+        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final MediaBrowser browser;
+            try {
+                browser = getBrowser();
+            } catch (IllegalStateException e) {
+                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
+                return;
+            }
+            if (browser == null) {
+                return;
+            }
+            browser.getCallbackExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    // TODO (b/118472216): Find all ParcelUtils.fromParcelable usages,
+                    // and null check before calling it.
+                    browser.getCallback().onChildrenChanged(browser, parentId, itemCount,
+                            (LibraryParams) MediaUtils.fromParcelable(libraryParams));
+                }
+            });
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    public void destroy() {
+        mController.clear();
+    }
+
+    private MediaControllerImplBase getController() throws IllegalStateException {
+        final MediaControllerImplBase controller = mController.get();
+        if (controller == null) {
+            throw new IllegalStateException("Controller is released");
+        }
+        return controller;
+    }
+
+    private MediaBrowser getBrowser() throws IllegalStateException {
+        final MediaControllerImplBase controller = getController();
+        if (controller.getInstance() instanceof MediaBrowser) {
+            return (MediaBrowser) controller.getInstance();
+        }
+        return null;
+    }
+}
diff --git a/media2/src/main/java/androidx/media2/MediaInterface2.java b/media2/src/main/java/androidx/media2/MediaInterface.java
similarity index 82%
rename from media2/src/main/java/androidx/media2/MediaInterface2.java
rename to media2/src/main/java/androidx/media2/MediaInterface.java
index 7b705fc..a6ae620 100644
--- a/media2/src/main/java/androidx/media2/MediaInterface2.java
+++ b/media2/src/main/java/androidx/media2/MediaInterface.java
@@ -16,14 +16,14 @@
 
 package androidx.media2;
 
-import androidx.media2.SessionPlayer2.PlayerResult;
+import androidx.media2.SessionPlayer.PlayerResult;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
 import java.util.List;
 
-class MediaInterface2 {
-    private MediaInterface2() {
+class MediaInterface {
+    private MediaInterface() {
     }
 
     // TODO: relocate methods among different interfaces and classes.
@@ -46,20 +46,20 @@
     }
 
     interface SessionPlaylistControl {
-        List<MediaItem2> getPlaylist();
-        MediaMetadata2 getPlaylistMetadata();
-        ListenableFuture<PlayerResult> setPlaylist(List<MediaItem2> list, MediaMetadata2 metadata);
-        ListenableFuture<PlayerResult> setMediaItem(MediaItem2 item);
-        ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata2 metadata);
+        List<MediaItem> getPlaylist();
+        MediaMetadata getPlaylistMetadata();
+        ListenableFuture<PlayerResult> setPlaylist(List<MediaItem> list, MediaMetadata metadata);
+        ListenableFuture<PlayerResult> setMediaItem(MediaItem item);
+        ListenableFuture<PlayerResult> updatePlaylistMetadata(MediaMetadata metadata);
 
-        MediaItem2 getCurrentMediaItem();
+        MediaItem getCurrentMediaItem();
         ListenableFuture<PlayerResult> skipToPlaylistItem(int index);
         ListenableFuture<PlayerResult> skipToPreviousItem();
         ListenableFuture<PlayerResult> skipToNextItem();
 
-        ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem2 item);
+        ListenableFuture<PlayerResult> addPlaylistItem(int index, MediaItem item);
         ListenableFuture<PlayerResult> removePlaylistItem(int index);
-        ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem2 item);
+        ListenableFuture<PlayerResult> replacePlaylistItem(int index, MediaItem item);
 
         int getRepeatMode();
         ListenableFuture<PlayerResult> setRepeatMode(int repeatMode);
@@ -67,7 +67,7 @@
         ListenableFuture<PlayerResult> setShuffleMode(int shuffleMode);
     }
 
-    // Common interface for session2 and controller2
+    // Common interface for session and controller
     interface SessionPlayer extends SessionPlaybackControl, SessionPlaylistControl {
     }
 }
diff --git a/media2/src/main/java/androidx/media2/MediaItem2.java b/media2/src/main/java/androidx/media2/MediaItem.java
similarity index 70%
rename from media2/src/main/java/androidx/media2/MediaItem2.java
rename to media2/src/main/java/androidx/media2/MediaItem.java
index a65db4f..387d20b 100644
--- a/media2/src/main/java/androidx/media2/MediaItem2.java
+++ b/media2/src/main/java/androidx/media2/MediaItem.java
@@ -19,8 +19,8 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
-import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.Log;
 
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
@@ -40,7 +40,7 @@
  * A class with information on a single media item with the metadata information. Here are use
  * cases.
  * <ul>
- * <li>Specify media items to {@link SessionPlayer2} for playback.
+ * <li>Specify media items to {@link SessionPlayer} for playback.
  * <li>Share media items across the processes.
  * </ul>
  * <p>
@@ -50,17 +50,19 @@
  * When it's shared across the processes, we cannot guarantee that they contain the right values
  * because media items are application dependent especially for the metadata.
  * <p>
- * When an object of the {@link MediaItem2}'s subclass is sent across the process between
- * {@link MediaSession2}/{@link MediaController2} or
- * {@link androidx.media2.MediaLibraryService2.MediaLibrarySession}/{@link MediaBrowser2}, the
- * object will sent as if it's {@link MediaItem2}. The recipient cannot get the object with the
+ * When an object of the {@link MediaItem}'s subclass is sent across the process between
+ * {@link MediaSession}/{@link MediaController} or
+ * {@link androidx.media2.MediaLibraryService.MediaLibrarySession}/{@link MediaBrowser}, the
+ * object will sent as if it's {@link MediaItem}. The recipient cannot get the object with the
  * subclasses' type. This will sanitize process specific information (e.g.
  * {@link java.io.FileDescriptor}, {@link android.content.Context}, etc).
  * <p>
- * This object isn't a thread safe.
+ * This object is thread safe.
  */
 @VersionedParcelize(isCustom = true)
-public class MediaItem2 extends CustomVersionedParcelable {
+public class MediaItem extends CustomVersionedParcelable {
+    private static final String TAG = "MediaItem";
+
     // intentionally less than long.MAX_VALUE.
     // Declare this first to avoid 'illegal forward reference'.
     static final long LONG_MAX = 0x7ffffffffffffffL;
@@ -72,17 +74,17 @@
      */
     public static final long POSITION_UNKNOWN = LONG_MAX;
 
-    private static final String KEY_METADATA = "android.media.mediaitem2.metadata";
+    @NonParcelField
+    private final Object mLock = new Object();
 
+    @GuardedBy("mLock")
     @ParcelField(1)
-    MediaMetadata2 mMetadata;
+    MediaMetadata mMetadata;
     @ParcelField(2)
     long mStartPositionMs = 0;
     @ParcelField(3)
     long mEndPositionMs = POSITION_UNKNOWN;
 
-    @NonParcelField
-    private final Object mLock = new Object();
     @GuardedBy("mLock")
     @NonParcelField
     private final List<Pair<OnMetadataChangedListener, Executor>> mListeners = new ArrayList<>();
@@ -90,32 +92,32 @@
     /**
      * Used for VersionedParcelable
      */
-    MediaItem2() {
+    MediaItem() {
     }
 
     /**
-     * Used by {@link MediaItem2.Builder} and its subclasses
+     * Used by {@link MediaItem.Builder} and its subclasses
      */
     // Note: Needs to be protected when we want to allow 3rd party player to define customized
-    //       MediaItem2.
+    //       MediaItem.
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaItem2(BuilderBase builder) {
+    MediaItem(BuilderBase builder) {
         this(builder.mMetadata, builder.mStartPositionMs, builder.mEndPositionMs);
     }
 
-    MediaItem2(MediaItem2 item) {
+    MediaItem(MediaItem item) {
         this(item.mMetadata, item.mStartPositionMs, item.mEndPositionMs);
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaItem2(@Nullable MediaMetadata2 metadata, long startPositionMs, long endPositionMs) {
+    MediaItem(@Nullable MediaMetadata metadata, long startPositionMs, long endPositionMs) {
         if (startPositionMs > endPositionMs) {
             throw new IllegalStateException("Illegal start/end position: "
                     + startPositionMs + " : " + endPositionMs);
         }
-        if (metadata != null && metadata.containsKey(MediaMetadata2.METADATA_KEY_DURATION)) {
-            long durationMs = metadata.getLong(MediaMetadata2.METADATA_KEY_DURATION);
-            if (durationMs != SessionPlayer2.UNKNOWN_TIME && endPositionMs != POSITION_UNKNOWN
+        if (metadata != null && metadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
+            long durationMs = metadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
+            if (durationMs != SessionPlayer.UNKNOWN_TIME && endPositionMs != POSITION_UNKNOWN
                     && endPositionMs > durationMs) {
                 throw new IllegalStateException("endPositionMs shouldn't be greater than"
                         + " duration in the metdata, endPositionMs=" + endPositionMs
@@ -127,46 +129,15 @@
         mEndPositionMs = endPositionMs;
     }
 
-    /**
-     * Return this object as a bundle to share between processes.
-     *
-     * @return a new bundle instance
-     * @hide
-     */
-    // TODO(jaewan): Remove
-    public @NonNull Bundle toBundle() {
-        Bundle bundle = new Bundle();
-        if (mMetadata != null) {
-            bundle.putBundle(KEY_METADATA, mMetadata.toBundle());
-        }
-        return bundle;
-    }
-
-    /**
-     * Create a MediaItem2 from the {@link Bundle}.
-     *
-     * @param bundle The bundle which was published by {@link MediaItem2#toBundle()}.
-     * @return The newly created MediaItem2. Can be {@code null} for {@code null} bundle.
-     * @hide
-     */
-    // TODO(jaewan): Remove
-    public static @Nullable MediaItem2 fromBundle(@Nullable Bundle bundle) {
-        if (bundle == null) {
-            return null;
-        }
-        final Bundle metadataBundle = bundle.getBundle(KEY_METADATA);
-        final MediaMetadata2 metadata = metadataBundle != null
-                ? MediaMetadata2.fromBundle(metadataBundle) : null;
-        return new MediaItem2(metadata, 0, 0);
-    }
-
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder(getClass().getSimpleName());
-        sb.append("{mMetadata=").append(mMetadata);
-        sb.append(", mStartPositionMs=").append(mStartPositionMs);
-        sb.append(", mEndPositionMs=").append(mEndPositionMs);
-        sb.append('}');
+        synchronized (mLock) {
+            sb.append("{mMetadata=").append(mMetadata);
+            sb.append(", mStartPositionMs=").append(mStartPositionMs);
+            sb.append(", mEndPositionMs=").append(mEndPositionMs);
+            sb.append('}');
+        }
         return sb.toString();
     }
 
@@ -175,15 +146,17 @@
      * instance's media id.
      *
      * @param metadata metadata to update
-     * @see MediaMetadata2#METADATA_KEY_MEDIA_ID
+     * @see MediaMetadata#METADATA_KEY_MEDIA_ID
      */
-    public void setMetadata(@Nullable MediaMetadata2 metadata) {
-        if (metadata != null && !TextUtils.equals(getMediaId(), metadata.getMediaId())) {
-            throw new IllegalArgumentException("metadata's id should be matched with the mediaId");
-        }
-        mMetadata = metadata;
+    public void setMetadata(@Nullable MediaMetadata metadata) {
         List<Pair<OnMetadataChangedListener, Executor>> listeners = new ArrayList<>();
         synchronized (mLock) {
+            if (mMetadata != null && metadata != null
+                    && !TextUtils.equals(getMediaId(), metadata.getMediaId())) {
+                Log.d(TAG, "MediaItem's media ID shouldn't be changed");
+                return;
+            }
+            mMetadata = metadata;
             listeners.addAll(mListeners);
         }
 
@@ -192,7 +165,7 @@
             pair.second.execute(new Runnable() {
                 @Override
                 public void run() {
-                    listener.onMetadataChanged(MediaItem2.this);
+                    listener.onMetadataChanged(MediaItem.this);
                 }
             });
         }
@@ -203,8 +176,10 @@
      *
      * @return metadata from the session
      */
-    public @Nullable MediaMetadata2 getMetadata() {
-        return mMetadata;
+    public @Nullable MediaMetadata getMetadata() {
+        synchronized (mLock) {
+            return mMetadata;
+        }
     }
 
     /**
@@ -234,7 +209,10 @@
     // TODO: Remove
     @RestrictTo(LIBRARY)
     public @Nullable String getMediaId() {
-        return mMetadata != null ? mMetadata.getString(MediaMetadata2.METADATA_KEY_MEDIA_ID) : null;
+        synchronized (mLock) {
+            return mMetadata != null
+                    ? mMetadata.getString(MediaMetadata.METADATA_KEY_MEDIA_ID) : null;
+        }
     }
 
     void addOnMetadataChangedListener(Executor executor, OnMetadataChangedListener listener) {
@@ -260,7 +238,7 @@
     }
 
     /**
-     * Base builder for {@link MediaItem2} and its subclass.
+     * Base builder for {@link MediaItem} and its subclass.
      *
      * @param <T> builder class
      * @hide
@@ -268,7 +246,7 @@
     @RestrictTo(LIBRARY_GROUP)
     public static class BuilderBase<T extends BuilderBase> {
         @SuppressWarnings("WeakerAccess") /* synthetic access */
-        MediaMetadata2 mMetadata;
+                MediaMetadata mMetadata;
         @SuppressWarnings("WeakerAccess") /* synthetic access */
         long mStartPositionMs = 0;
         @SuppressWarnings("WeakerAccess") /* synthetic access */
@@ -280,7 +258,7 @@
          * @param metadata metadata
          * @return this instance for chaining
          */
-        public @NonNull T setMetadata(@Nullable MediaMetadata2 metadata) {
+        public @NonNull T setMetadata(@Nullable MediaMetadata metadata) {
             mMetadata = metadata;
             return (T) this;
         }
@@ -316,19 +294,19 @@
         }
 
         /**
-         * Build {@link MediaItem2}.
+         * Build {@link MediaItem}.
          *
-         * @return a new {@link MediaItem2}.
+         * @return a new {@link MediaItem}.
          */
-        public @NonNull MediaItem2 build() {
-            return new MediaItem2(this);
+        public @NonNull MediaItem build() {
+            return new MediaItem(this);
         }
     }
 
     /**
-     * Builder for {@link MediaItem2}.
+     * Builder for {@link MediaItem}.
      */
-    public static class Builder extends BuilderBase<BuilderBase> {
+    public static class Builder extends BuilderBase<Builder> {
         /**
          * Default constructor
          */
@@ -338,7 +316,7 @@
     }
 
     interface OnMetadataChangedListener {
-        void onMetadataChanged(MediaItem2 item);
+        void onMetadataChanged(MediaItem item);
     }
 
     /**
@@ -348,8 +326,8 @@
     @RestrictTo(LIBRARY)
     @Override
     public void onPreParceling(boolean isStream) {
-        if (getClass() != MediaItem2.class) {
-            throw new RuntimeException("MediaItem2's subclasses shouldn't be parcelized."
+        if (getClass() != MediaItem.class) {
+            throw new RuntimeException("MediaItem's subclasses shouldn't be parcelized."
                     + " Use instead");
         }
         super.onPreParceling(isStream);
diff --git a/media2/src/main/java/androidx/media2/MediaLibraryService2.java b/media2/src/main/java/androidx/media2/MediaLibraryService.java
similarity index 90%
rename from media2/src/main/java/androidx/media2/MediaLibraryService2.java
rename to media2/src/main/java/androidx/media2/MediaLibraryService.java
index 350e48a..0574720 100644
--- a/media2/src/main/java/androidx/media2/MediaLibraryService2.java
+++ b/media2/src/main/java/androidx/media2/MediaLibraryService.java
@@ -18,7 +18,7 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_NOT_SUPPORTED;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_NOT_SUPPORTED;
 
 import android.app.PendingIntent;
 import android.content.Context;
@@ -35,8 +35,8 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.content.ContextCompat;
-import androidx.media2.MediaBrowser2.BrowserResult.ResultCode;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.Builder;
+import androidx.media2.MediaBrowser.BrowserResult.ResultCode;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.Builder;
 import androidx.versionedparcelable.NonParcelField;
 import androidx.versionedparcelable.ParcelField;
 import androidx.versionedparcelable.VersionedParcelable;
@@ -55,47 +55,47 @@
  * <p>
  * Media library services enable applications to browse media content provided by an application
  * and ask the application to start playing it. They may also be used to control content that
- * is already playing by way of a {@link MediaSession2}.
+ * is already playing by way of a {@link MediaSession}.
  * <p>
  * When extending this class, also add the following to your {@code AndroidManifest.xml}.
  * <pre>
  * &lt;service android:name="component_name_of_your_implementation" &gt;
  *   &lt;intent-filter&gt;
- *     &lt;action android:name="android.media.MediaLibraryService2" /&gt;
+ *     &lt;action android:name="androidx.media2.MediaLibraryService" /&gt;
  *   &lt;/intent-filter&gt;
  * &lt;/service&gt;</pre>
  * <p>
  * You may also declare <pre>android.media.browse.MediaBrowserService</pre> for compatibility with
  * {@link android.support.v4.media.MediaBrowserCompat}. This service can handle it automatically.
  *
- * @see MediaSessionService2
+ * @see MediaSessionService
  */
-public abstract class MediaLibraryService2 extends MediaSessionService2 {
+public abstract class MediaLibraryService extends MediaSessionService {
     /**
      * The {@link Intent} that must be declared as handled by the service.
      */
-    public static final String SERVICE_INTERFACE = "android.media.MediaLibraryService2";
+    public static final String SERVICE_INTERFACE = "androidx.media2.MediaLibraryService";
 
     /**
-     * Session for the {@link MediaLibraryService2}. Build this object with
+     * Session for the {@link MediaLibraryService}. Build this object with
      * {@link Builder} and return in {@link #onGetSession()}.
      */
-    public static final class MediaLibrarySession extends MediaSession2 {
+    public static final class MediaLibrarySession extends MediaSession {
         /**
          * Callback for the {@link MediaLibrarySession}.
          * <p>
          * When you return {@link LibraryResult} with media items,
-         * items must have valid {@link MediaMetadata2#METADATA_KEY_MEDIA_ID} and
-         * specify {@link MediaMetadata2#METADATA_KEY_BROWSABLE} and
-         * {@link MediaMetadata2#METADATA_KEY_PLAYABLE}.
+         * items must have valid {@link MediaMetadata#METADATA_KEY_MEDIA_ID} and
+         * specify {@link MediaMetadata#METADATA_KEY_BROWSABLE} and
+         * {@link MediaMetadata#METADATA_KEY_PLAYABLE}.
          */
-        public static class MediaLibrarySessionCallback extends MediaSession2.SessionCallback {
+        public static class MediaLibrarySessionCallback extends MediaSession.SessionCallback {
             /**
-             * Called to get the root information for browsing by a {@link MediaBrowser2}.
+             * Called to get the root information for browsing by a {@link MediaBrowser}.
              * <p>
              * To allow browsing media information, return the {@link LibraryResult} with the
              * {@link LibraryResult#RESULT_CODE_SUCCESS} and the root media item with the valid
-             * {@link MediaMetadata2#METADATA_KEY_MEDIA_ID media id}. The media id must be included
+             * {@link MediaMetadata#METADATA_KEY_MEDIA_ID media id}. The media id must be included
              * for the browser to get the children under it.
              * <p>
              * Interoperability: this callback may be called on the main thread, regardless of the
@@ -108,8 +108,8 @@
              *               root id for browsing, or {@code null} if none.
              * @return a library result with the root media item with the id. A runtime exception
              *         will be thrown if an invalid result is returned.
-             * @see SessionCommand2#COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT
-             * @see MediaMetadata2#METADATA_KEY_MEDIA_ID
+             * @see SessionCommand#COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT
+             * @see MediaMetadata#METADATA_KEY_MEDIA_ID
              * @see LibraryParams
              */
             public @NonNull LibraryResult onGetLibraryRoot(@NonNull MediaLibrarySession session,
@@ -128,7 +128,7 @@
              * @param mediaId non-empty media id of the requested item
              * @return a library result with a media item with the id. A runtime exception
              *         will be thrown if an invalid result is returned.
-             * @see SessionCommand2#COMMAND_CODE_LIBRARY_GET_ITEM
+             * @see SessionCommand#COMMAND_CODE_LIBRARY_GET_ITEM
              */
             public @NonNull LibraryResult onGetItem(@NonNull MediaLibrarySession session,
                     @NonNull ControllerInfo controller, @NonNull String mediaId) {
@@ -150,7 +150,7 @@
              * @param params library params
              * @return a library result with a list of media item with the id. A runtime exception
              *         will be thrown if an invalid result is returned.
-             * @see SessionCommand2#COMMAND_CODE_LIBRARY_GET_CHILDREN
+             * @see SessionCommand#COMMAND_CODE_LIBRARY_GET_CHILDREN
              * @see LibraryParams
              */
             public @NonNull LibraryResult onGetChildren(@NonNull MediaLibrarySession session,
@@ -177,7 +177,7 @@
              * @param parentId non-empty parent id
              * @param params library params
              * @return result code
-             * @see SessionCommand2#COMMAND_CODE_LIBRARY_SUBSCRIBE
+             * @see SessionCommand#COMMAND_CODE_LIBRARY_SUBSCRIBE
              * @see LibraryParams
              */
             public @ResultCode int onSubscribe(@NonNull MediaLibrarySession session,
@@ -197,7 +197,7 @@
              * @param controller controller
              * @param parentId non-empty parent id
              * @return result code
-             * @see SessionCommand2#COMMAND_CODE_LIBRARY_UNSUBSCRIBE
+             * @see SessionCommand#COMMAND_CODE_LIBRARY_UNSUBSCRIBE
              */
             public @ResultCode int onUnsubscribe(@NonNull MediaLibrarySession session,
                     @NonNull ControllerInfo controller, @NonNull String parentId) {
@@ -210,7 +210,7 @@
              * Return immediately with the result of the attempt to search with the query. Notify
              * the number of search result through
              * {@link #notifySearchResultChanged(ControllerInfo, String, int, LibraryParams)}.
-             * {@link MediaBrowser2} will ask the search result with the pagination later.
+             * {@link MediaBrowser} will ask the search result with the pagination later.
              *
              * @param session the session for this event
              * @param controller controller
@@ -218,7 +218,7 @@
              *              It contains keywords separated by space.
              * @param params library params
              * @return result code
-             * @see SessionCommand2#COMMAND_CODE_LIBRARY_SEARCH
+             * @see SessionCommand#COMMAND_CODE_LIBRARY_SEARCH
              * @see #notifySearchResultChanged(ControllerInfo, String, int, LibraryParams)
              * @see LibraryParams
              */
@@ -247,7 +247,7 @@
              * @param params library params
              * @return a library result with a list of media item with the id. A runtime exception
              *         will be thrown if an invalid result is returned.
-             * @see SessionCommand2#COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT
+             * @see SessionCommand#COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT
              * @see LibraryParams
              */
             public @NonNull LibraryResult onGetSearchResult(
@@ -262,17 +262,17 @@
          * Builder for {@link MediaLibrarySession}.
          */
         // Override all methods just to show them with the type instead of generics in Javadoc.
-        // This workarounds javadoc issue described in the MediaSession2.BuilderBase.
+        // This workarounds javadoc issue described in the MediaSession.BuilderBase.
         // Note: Don't override #setSessionCallback() because the callback can be set by the
         // constructor.
-        public static final class Builder extends MediaSession2.BuilderBase<MediaLibrarySession,
+        public static final class Builder extends MediaSession.BuilderBase<MediaLibrarySession,
                 Builder, MediaLibrarySessionCallback> {
-            // Builder requires MediaLibraryService2 instead of Context just to ensure that the
-            // builder can be only instantiated within the MediaLibraryService2.
+            // Builder requires MediaLibraryService instead of Context just to ensure that the
+            // builder can be only instantiated within the MediaLibraryService.
             // Ideally it's better to make it inner class of service to enforce, but it violates API
             // guideline that Builders should be the inner class of the building target.
-            public Builder(@NonNull MediaLibraryService2 service,
-                    @NonNull SessionPlayer2 player,
+            public Builder(@NonNull MediaLibraryService service,
+                    @NonNull SessionPlayer player,
                     @NonNull Executor callbackExecutor,
                     @NonNull MediaLibrarySessionCallback callback) {
                 super(service, player);
@@ -302,16 +302,16 @@
             }
         }
 
-        MediaLibrarySession(Context context, String id, SessionPlayer2 player,
+        MediaLibrarySession(Context context, String id, SessionPlayer player,
                 PendingIntent sessionActivity, Executor callbackExecutor,
-                MediaSession2.SessionCallback callback) {
+                MediaSession.SessionCallback callback) {
             super(context, id, player, sessionActivity, callbackExecutor, callback);
         }
 
         @Override
-        MediaLibrarySessionImpl createImpl(Context context, String id, SessionPlayer2 player,
+        MediaLibrarySessionImpl createImpl(Context context, String id, SessionPlayer player,
                 PendingIntent sessionActivity, Executor callbackExecutor,
-                MediaSession2.SessionCallback callback) {
+                MediaSession.SessionCallback callback) {
             return new MediaLibrarySessionImplBase(this, context, id, player, sessionActivity,
                     callbackExecutor, callback);
         }
@@ -326,7 +326,7 @@
          * <p>
          * If the controller hasn't subscribed to the parent, the API will do nothing.
          * <p>
-         * Controllers will use {@link MediaBrowser2#getChildren(String, int, int, LibraryParams)}
+         * Controllers will use {@link MediaBrowser#getChildren(String, int, int, LibraryParams)}
          * to get the list of children.
          *
          * @param controller controller to notify
@@ -352,7 +352,7 @@
         /**
          * Notify all controllers that subscribed to the parent about change in the parent's
          * children, regardless of the library params supplied by
-         * {@link MediaBrowser2#subscribe(String, LibraryParams)}.
+         * {@link MediaBrowser#subscribe(String, LibraryParams)}.
          *  @param parentId non-empty parent id
          * @param itemCount number of children
          * @param params library params
@@ -397,7 +397,7 @@
             return (MediaLibrarySessionCallback) super.getCallback();
         }
 
-        interface MediaLibrarySessionImpl extends MediaSession2Impl {
+        interface MediaLibrarySessionImpl extends MediaSessionImpl {
             // LibrarySession methods
             void notifyChildrenChanged(
                     @NonNull String parentId, int itemCount, @Nullable LibraryParams params);
@@ -433,8 +433,8 @@
     }
 
     @Override
-    MediaSessionService2Impl createImpl() {
-        return new MediaLibraryService2ImplBase();
+    MediaSessionServiceImpl createImpl() {
+        return new MediaLibraryServiceImplBase();
     }
 
     @Override
@@ -446,7 +446,7 @@
      * Called when another app has requested to get {@link MediaLibrarySession}.
      * <p>
      * Session returned here will be added to this service automatically. You don't need to call
-     * {@link #addSession(MediaSession2)} for that.
+     * {@link #addSession(MediaSession)} for that.
      * <p>
      * This method will be called on the main thread.
      *
@@ -645,7 +645,7 @@
     // Specify full class name to workaround build error 'cannot find symbol'.
     @androidx.versionedparcelable.VersionedParcelize(isCustom = true)
     public static class LibraryResult extends androidx.versionedparcelable.CustomVersionedParcelable
-            implements RemoteResult2 {
+            implements RemoteResult {
         /**
          * @hide
          */
@@ -675,12 +675,12 @@
         @ParcelField(2)
         long mCompletionTime;
         @ParcelField(3)
-        MediaItem2 mItem;
+        MediaItem mItem;
         @ParcelField(4)
         LibraryParams mParams;
         // Mark list of media items NonParcelField to send the list through the ParcelImpListSlice.
         @NonParcelField
-        List<MediaItem2> mItemList;
+        List<MediaItem> mItemList;
         @ParcelField(5)
         ParcelImplListSlice mItemListSlice;
 
@@ -707,7 +707,7 @@
          * @param item a media item. Can be {@code null} for error
          * @param params optional library params to describe the returned media item
          */
-        public LibraryResult(@ResultCode int resultCode, @Nullable MediaItem2 item,
+        public LibraryResult(@ResultCode int resultCode, @Nullable MediaItem item,
                 @Nullable LibraryParams params) {
             this(resultCode, item, null, params);
         }
@@ -719,13 +719,13 @@
          * @param items list of media items. Can be {@code null} for error
          * @param params optional library params to describe the returned list of media items.
          */
-        public LibraryResult(@ResultCode int resultCode, @Nullable List<MediaItem2> items,
+        public LibraryResult(@ResultCode int resultCode, @Nullable List<MediaItem> items,
                 @Nullable LibraryParams params) {
             this(resultCode, null, items, params);
         }
 
-        private LibraryResult(@ResultCode int resultCode, @Nullable MediaItem2 item,
-                @Nullable List<MediaItem2> items, @Nullable LibraryParams params) {
+        private LibraryResult(@ResultCode int resultCode, @Nullable MediaItem item,
+                @Nullable List<MediaItem> items, @Nullable LibraryParams params) {
             mResultCode = resultCode;
             mCompletionTime = SystemClock.elapsedRealtime();
             mItem = item;
@@ -756,11 +756,11 @@
          */
         @RestrictTo(LIBRARY)
         @Override
-        public MediaItem2 getMediaItem() {
+        public MediaItem getMediaItem() {
             return mItem;
         }
 
-        List<MediaItem2> getMediaItems() {
+        List<MediaItem> getMediaItems() {
             return mItemList;
         }
 
@@ -774,7 +774,7 @@
         @RestrictTo(LIBRARY)
         @Override
         public void onPreParceling(boolean isStream) {
-            mItemListSlice = MediaUtils2.convertMediaItem2ListToParcelImplListSlice(mItemList);
+            mItemListSlice = MediaUtils.convertMediaItemListToParcelImplListSlice(mItemList);
         }
 
         /**
@@ -783,7 +783,7 @@
         @RestrictTo(LIBRARY)
         @Override
         public void onPostParceling() {
-            mItemList = MediaUtils2.convertParcelImplListSliceToMediaItem2List(mItemListSlice);
+            mItemList = MediaUtils.convertParcelImplListSliceToMediaItemList(mItemListSlice);
             mItemListSlice = null;
         }
     }
diff --git a/media2/src/main/java/androidx/media2/MediaLibraryService2ImplBase.java b/media2/src/main/java/androidx/media2/MediaLibraryServiceImplBase.java
similarity index 80%
rename from media2/src/main/java/androidx/media2/MediaLibraryService2ImplBase.java
rename to media2/src/main/java/androidx/media2/MediaLibraryServiceImplBase.java
index 3dd708c..026672b 100644
--- a/media2/src/main/java/androidx/media2/MediaLibraryService2ImplBase.java
+++ b/media2/src/main/java/androidx/media2/MediaLibraryServiceImplBase.java
@@ -20,12 +20,12 @@
 import android.os.IBinder;
 
 /**
- * Implementation of {@link MediaLibraryService2}.
+ * Implementation of {@link MediaLibraryService}.
  */
-class MediaLibraryService2ImplBase extends MediaSessionService2ImplBase {
+class MediaLibraryServiceImplBase extends MediaSessionServiceImplBase {
     @Override
     public IBinder onBind(Intent intent) {
-        if (MediaLibraryService2.SERVICE_INTERFACE.equals(intent.getAction())) {
+        if (MediaLibraryService.SERVICE_INTERFACE.equals(intent.getAction())) {
             return getServiceBinder();
         }
         return super.onBind(intent);
diff --git a/media2/src/main/java/androidx/media2/MediaLibraryService2LegacyStub.java b/media2/src/main/java/androidx/media2/MediaLibraryServiceLegacyStub.java
similarity index 84%
rename from media2/src/main/java/androidx/media2/MediaLibraryService2LegacyStub.java
rename to media2/src/main/java/androidx/media2/MediaLibraryServiceLegacyStub.java
index a6adcc3..770e231 100644
--- a/media2/src/main/java/androidx/media2/MediaLibraryService2LegacyStub.java
+++ b/media2/src/main/java/androidx/media2/MediaLibraryServiceLegacyStub.java
@@ -19,8 +19,8 @@
 import static android.support.v4.media.MediaBrowserCompat.EXTRA_PAGE;
 import static android.support.v4.media.MediaBrowserCompat.EXTRA_PAGE_SIZE;
 
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaUtils2.TRANSACTION_SIZE_LIMIT_IN_BYTES;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaUtils.TRANSACTION_SIZE_LIMIT_IN_BYTES;
 
 import android.content.Context;
 import android.os.BadParcelableException;
@@ -28,7 +28,6 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.support.v4.media.MediaBrowserCompat;
-import android.support.v4.media.MediaBrowserCompat.MediaItem;
 import android.support.v4.media.session.MediaSessionCompat;
 import android.text.TextUtils;
 import android.util.Log;
@@ -37,23 +36,23 @@
 import androidx.core.util.ObjectsCompat;
 import androidx.media.MediaBrowserServiceCompat;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionImpl;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionResult;
-import androidx.media2.SessionPlayer2.PlayerResult;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionImpl;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionResult;
+import androidx.media2.SessionPlayer.PlayerResult;
 
 import java.util.ArrayList;
 import java.util.List;
 
 /**
  * Implementation of {@link MediaBrowserServiceCompat} for interoperability between
- * {@link MediaLibraryService2} and {@link MediaBrowserCompat}.
+ * {@link MediaLibraryService} and {@link MediaBrowserCompat}.
  */
-class MediaLibraryService2LegacyStub extends MediaSessionService2LegacyStub {
+class MediaLibraryServiceLegacyStub extends MediaSessionServiceLegacyStub {
     private static final String TAG = "MLS2LegacyStub";
     private static final boolean DEBUG = false;
 
@@ -64,7 +63,7 @@
 
     // Note: We'd better not obtain token from the session because it's called inside of the
     // session's constructor and session's token may not be initialized here.
-    MediaLibraryService2LegacyStub(Context context, MediaLibrarySessionImpl session,
+    MediaLibraryServiceLegacyStub(Context context, MediaLibrarySessionImpl session,
             MediaSessionCompat.Token token) {
         super(context, session, token);
         mLibrarySessionImpl = session;
@@ -85,7 +84,7 @@
             return null;
         }
         if (getConnectedControllersManager().isAllowedCommand(controller,
-                SessionCommand2.COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT)) {
+                SessionCommand.COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT)) {
             // Call callbacks directly instead of execute on the executor. Here's the reason.
             // We need to return browser root here. So if we run the callback on the executor, we
             // should wait for the completion.
@@ -96,17 +95,17 @@
             // not.
             // Because of the reason, just call onGetLibraryRoot() directly here. onGetLibraryRoot()
             // has documentation that it may be called on the main thread.
-            LibraryParams params = MediaUtils2.convertToLibraryParams(
+            LibraryParams params = MediaUtils.convertToLibraryParams(
                     mLibrarySessionImpl.getContext(), rootHints);
             LibraryResult result = mLibrarySessionImpl.getCallback().onGetLibraryRoot(
                     mLibrarySessionImpl.getInstance(), controller, params);
             if (result != null && result.getResultCode() == RESULT_CODE_SUCCESS
                     && result.getMediaItem() != null) {
-                MediaMetadata2 metadata = result.getMediaItem().getMetadata();
+                MediaMetadata metadata = result.getMediaItem().getMetadata();
                 String id = metadata != null
-                        ? metadata.getString(MediaMetadata2.METADATA_KEY_MEDIA_ID) : "";
+                        ? metadata.getString(MediaMetadata.METADATA_KEY_MEDIA_ID) : "";
                 return new BrowserRoot(id,
-                        MediaUtils2.convertToRootHints(result.getLibraryParams()));
+                        MediaUtils.convertToRootHints(result.getLibraryParams()));
             } else if (DEBUG) {
                 Log.d(TAG, "Unexpected LibraryResult for getting the root from the legacy browser."
                         + " Will return stub root to allow getting session.");
@@ -116,7 +115,7 @@
                     + mLibrarySessionImpl);
         }
         // No library root, but keep browser compat connected to allow getting session.
-        return MediaUtils2.sDefaultBrowserRoot;
+        return MediaUtils.sDefaultBrowserRoot;
     }
 
     @Override
@@ -133,14 +132,14 @@
                 // called twice for a single subscription event.
                 // TODO(post 1.0): Fix the issue above.
                 if (!getConnectedControllersManager().isAllowedCommand(controller,
-                        SessionCommand2.COMMAND_CODE_LIBRARY_SUBSCRIBE)) {
+                        SessionCommand.COMMAND_CODE_LIBRARY_SUBSCRIBE)) {
                     if (DEBUG) {
                         Log.d(TAG, "Command MBC.subscribe() from " + controller + " was rejected"
                                 + " by " + mLibrarySessionImpl);
                     }
                     return;
                 }
-                LibraryParams params = MediaUtils2.convertToLibraryParams(
+                LibraryParams params = MediaUtils.convertToLibraryParams(
                         mLibrarySessionImpl.getContext(), option);
                 mLibrarySessionImpl.getCallback().onSubscribe(mLibrarySessionImpl.getInstance(),
                         controller, id, params);
@@ -159,7 +158,7 @@
             @Override
             public void run() {
                 if (!getConnectedControllersManager().isAllowedCommand(controller,
-                        SessionCommand2.COMMAND_CODE_LIBRARY_UNSUBSCRIBE)) {
+                        SessionCommand.COMMAND_CODE_LIBRARY_UNSUBSCRIBE)) {
                     if (DEBUG) {
                         Log.d(TAG, "Command MBC.unsubscribe() from " + controller + " was rejected"
                                 + " by " + mLibrarySessionImpl);
@@ -173,13 +172,13 @@
     }
 
     @Override
-    public void onLoadChildren(String parentId, Result<List<MediaItem>> result) {
+    public void onLoadChildren(String parentId, Result<List<MediaBrowserCompat.MediaItem>> result) {
         onLoadChildren(parentId, result, null);
     }
 
     @Override
-    public void onLoadChildren(final String parentId, final Result<List<MediaItem>> result,
-            final Bundle options) {
+    public void onLoadChildren(final String parentId,
+            final Result<List<MediaBrowserCompat.MediaItem>> result, final Bundle options) {
         final ControllerInfo controller = getCurrentController();
         if (TextUtils.isEmpty(parentId)) {
             Log.w(TAG, "onLoadChildren(): Ignoring empty parentId from " + controller);
@@ -191,7 +190,7 @@
             @Override
             public void run() {
                 if (!getConnectedControllersManager().isAllowedCommand(controller,
-                        SessionCommand2.COMMAND_CODE_LIBRARY_GET_CHILDREN)) {
+                        SessionCommand.COMMAND_CODE_LIBRARY_GET_CHILDREN)) {
                     if (DEBUG) {
                         Log.d(TAG, "Command MBC.subscribe() from " + controller + " was rejected"
                                 + " by " + mLibrarySessionImpl);
@@ -206,7 +205,7 @@
                         int pageSize = options.getInt(EXTRA_PAGE_SIZE);
                         if (page > 0 && pageSize > 0) {
                             // Requesting the list of children through pagination.
-                            LibraryParams params = MediaUtils2.convertToLibraryParams(
+                            LibraryParams params = MediaUtils.convertToLibraryParams(
                                     mLibrarySessionImpl.getContext(), options);
                             LibraryResult libraryResult = mLibrarySessionImpl.getCallback()
                                     .onGetChildren(mLibrarySessionImpl.getInstance(), controller,
@@ -215,8 +214,8 @@
                                     || libraryResult.getResultCode() != RESULT_CODE_SUCCESS) {
                                 result.sendResult(null);
                             } else {
-                                result.sendResult(MediaUtils2.truncateListBySize(
-                                        MediaUtils2.convertToMediaItemList(
+                                result.sendResult(MediaUtils.truncateListBySize(
+                                        MediaUtils.convertToMediaItemList(
                                                 libraryResult.getMediaItems()),
                                         TRANSACTION_SIZE_LIMIT_IN_BYTES));
                             }
@@ -238,8 +237,8 @@
                         || libraryResult.getResultCode() != RESULT_CODE_SUCCESS) {
                     result.sendResult(null);
                 } else {
-                    result.sendResult(MediaUtils2.truncateListBySize(
-                            MediaUtils2.convertToMediaItemList(libraryResult.getMediaItems()),
+                    result.sendResult(MediaUtils.truncateListBySize(
+                            MediaUtils.convertToMediaItemList(libraryResult.getMediaItems()),
                             TRANSACTION_SIZE_LIMIT_IN_BYTES));
                 }
             }
@@ -247,7 +246,7 @@
     }
 
     @Override
-    public void onLoadItem(final String itemId, final Result<MediaItem> result) {
+    public void onLoadItem(final String itemId, final Result<MediaBrowserCompat.MediaItem> result) {
         final ControllerInfo controller = getCurrentController();
         if (TextUtils.isEmpty(itemId)) {
             Log.w(TAG, "Ignoring empty itemId from " + controller);
@@ -259,7 +258,7 @@
             @Override
             public void run() {
                 if (!getConnectedControllersManager().isAllowedCommand(controller,
-                        SessionCommand2.COMMAND_CODE_LIBRARY_GET_ITEM)) {
+                        SessionCommand.COMMAND_CODE_LIBRARY_GET_ITEM)) {
                     if (DEBUG) {
                         Log.d(TAG, "Command MBC.getItem() from " + controller + " was rejected by "
                                 + mLibrarySessionImpl);
@@ -272,7 +271,7 @@
                 if (libraryResult == null || libraryResult.getResultCode() != RESULT_CODE_SUCCESS) {
                     result.sendResult(null);
                 } else {
-                    result.sendResult(MediaUtils2.convertToMediaItem(libraryResult.getMediaItem()));
+                    result.sendResult(MediaUtils.convertToMediaItem(libraryResult.getMediaItem()));
                 }
             }
         });
@@ -280,7 +279,7 @@
 
     @Override
     public void onSearch(final String query, final Bundle extras,
-            final Result<List<MediaItem>> result) {
+            final Result<List<MediaBrowserCompat.MediaItem>> result) {
         final ControllerInfo controller = getCurrentController();
         if (TextUtils.isEmpty(query)) {
             Log.w(TAG, "Ignoring empty query from " + controller);
@@ -298,7 +297,7 @@
             @Override
             public void run() {
                 if (!getConnectedControllersManager().isAllowedCommand(controller,
-                        SessionCommand2.COMMAND_CODE_LIBRARY_SEARCH)) {
+                        SessionCommand.COMMAND_CODE_LIBRARY_SEARCH)) {
                     if (DEBUG) {
                         Log.d(TAG, "Command MBC.search() from " + controller + " was rejected by "
                                 + mLibrarySessionImpl);
@@ -308,7 +307,7 @@
                 }
                 BrowserLegacyCb cb = (BrowserLegacyCb) controller.getControllerCb();
                 cb.registerSearchRequest(controller, query, extras, result);
-                LibraryParams params = MediaUtils2.convertToLibraryParams(
+                LibraryParams params = MediaUtils.convertToLibraryParams(
                         mLibrarySessionImpl.getContext(), extras);
                 mLibrarySessionImpl.getCallback().onSearch(mLibrarySessionImpl.getInstance(),
                         controller, query, params);
@@ -327,7 +326,7 @@
         mLibrarySessionImpl.getCallbackExecutor().execute(new Runnable() {
             @Override
             public void run() {
-                SessionCommand2 command = new SessionCommand2(action, null);
+                SessionCommand command = new SessionCommand(action, null);
                 if (!getConnectedControllersManager().isAllowedCommand(controller, command)) {
                     if (DEBUG) {
                         Log.d(TAG, "Command MBC.sendCustomAction(" + command + ") from "
@@ -367,10 +366,10 @@
         public final RemoteUserInfo mRemoteUserInfo;
         public final String mQuery;
         public final Bundle mExtras;
-        public final Result<List<MediaItem>> mResult;
+        public final Result<List<MediaBrowserCompat.MediaItem>> mResult;
 
         SearchRequest(ControllerInfo controller, RemoteUserInfo remoteUserInfo, String query,
-                Bundle extras, Result<List<MediaItem>> result) {
+                Bundle extras, Result<List<MediaBrowserCompat.MediaItem>> result) {
             mController = controller;
             mRemoteUserInfo = remoteUserInfo;
             mQuery = query;
@@ -383,20 +382,20 @@
     // This documents
     //   1) Why some APIs does nothing
     //   2) Why some APIs should throw exception when DEBUG is {@code true}.
-    private abstract static class BaseBrowserLegacyCb extends MediaSession2.ControllerCb {
+    private abstract static class BaseBrowserLegacyCb extends MediaSession.ControllerCb {
         @Override
         void onPlayerResult(int seq, PlayerResult result) throws RemoteException {
-            // No-op. BrowserCompat doesn't understand Session2 features.
+            // No-op. BrowserCompat doesn't understand Session features.
         }
 
         @Override
         void onSessionResult(int seq, SessionResult result) throws RemoteException {
-            // No-op. BrowserCompat doesn't understand Session2 features.
+            // No-op. BrowserCompat doesn't understand Session features.
         }
 
         @Override
         void onLibraryResult(int seq, LibraryResult result) throws RemoteException {
-            // No-op. BrowserCompat doesn't understand Browser2 features.
+            // No-op. BrowserCompat doesn't understand Browser features.
         }
 
         @Override
@@ -410,12 +409,12 @@
         }
 
         @Override
-        final void onAllowedCommandsChanged(SessionCommandGroup2 commands) throws RemoteException {
+        final void onAllowedCommandsChanged(SessionCommandGroup commands) throws RemoteException {
             // No-op. BrowserCompat doesn't understand Controller features.
         }
 
         @Override
-        final void sendCustomCommand(int seq, SessionCommand2 command, Bundle args)
+        final void sendCustomCommand(int seq, SessionCommand command, Bundle args)
                 throws RemoteException {
             // No-op. BrowserCompat doesn't understand Controller features.
         }
@@ -433,7 +432,7 @@
         }
 
         @Override
-        final void onBufferingStateChanged(MediaItem2 item, int bufferingState,
+        final void onBufferingStateChanged(MediaItem item, int bufferingState,
                 long bufferedPositionMs) throws RemoteException {
             // No-op. BrowserCompat doesn't understand Controller features.
         }
@@ -445,18 +444,18 @@
         }
 
         @Override
-        final void onCurrentMediaItemChanged(MediaItem2 item) throws RemoteException {
+        final void onCurrentMediaItemChanged(MediaItem item) throws RemoteException {
             // No-op. BrowserCompat doesn't understand Controller features.
         }
 
         @Override
-        final void onPlaylistChanged(List<MediaItem2> playlist, MediaMetadata2 metadata)
+        final void onPlaylistChanged(List<MediaItem> playlist, MediaMetadata metadata)
                 throws RemoteException {
             // No-op. BrowserCompat doesn't understand Controller features.
         }
 
         @Override
-        final void onPlaylistMetadataChanged(MediaMetadata2 metadata) throws RemoteException {
+        final void onPlaylistMetadataChanged(MediaMetadata metadata) throws RemoteException {
             // No-op. BrowserCompat doesn't understand Controller features.
         }
 
@@ -476,11 +475,6 @@
         }
 
         @Override
-        final void onRoutesInfoChanged(List<Bundle> routes) throws RemoteException {
-            // No-op. BrowserCompat doesn't understand Controller features.
-        }
-
-        @Override
         final void onDisconnected() throws RemoteException {
             // No-op. BrowserCompat doesn't have concept of receiving release of a session.
         }
@@ -507,9 +501,9 @@
         @Override
         void onSearchResultChanged(String query, int itemCount, LibraryParams params)
                 throws RemoteException {
-            // In MediaLibrarySession/MediaBrowser2, we have two different APIs for getting size of
+            // In MediaLibrarySession/MediaBrowser, we have two different APIs for getting size of
             // search result (and also starting search) and getting result.
-            // However, MediaBrowserService2/MediaBrowserCompat only have one search API for getting
+            // However, MediaBrowserService/MediaBrowserCompat only have one search API for getting
             // search result.
             final List<SearchRequest> searchRequests = new ArrayList<>();
             synchronized (mLock) {
@@ -553,7 +547,7 @@
                             page = 0;
                             pageSize = Integer.MAX_VALUE;
                         }
-                        LibraryParams params = MediaUtils2.convertToLibraryParams(
+                        LibraryParams params = MediaUtils.convertToLibraryParams(
                                 mLibrarySessionImpl.getContext(), request.mExtras);
                         LibraryResult libraryResult  = mLibrarySessionImpl.getCallback()
                                 .onGetSearchResult(mLibrarySessionImpl.getInstance(),
@@ -564,8 +558,8 @@
                             request.mResult.sendResult(null);
                         } else {
                             request.mResult.sendResult(
-                                    MediaUtils2.truncateListBySize(
-                                            MediaUtils2.convertToMediaItemList(
+                                    MediaUtils.truncateListBySize(
+                                            MediaUtils.convertToMediaItemList(
                                                     libraryResult.getMediaItems()),
                                     TRANSACTION_SIZE_LIMIT_IN_BYTES));
                         }
@@ -575,7 +569,7 @@
         }
 
         void registerSearchRequest(ControllerInfo controller, String query, Bundle extras,
-                Result<List<MediaItem>> result) {
+                Result<List<MediaBrowserCompat.MediaItem>> result) {
             synchronized (mLock) {
                 mSearchRequests.add(new SearchRequest(controller, controller.getRemoteUserInfo(),
                         query, extras, result));
@@ -596,7 +590,7 @@
         @Override
         void onChildrenChanged(String parentId, int itemCount, LibraryParams libraryParams)
                 throws RemoteException {
-            // This will trigger {@link MediaLibraryService2LegacyStub#onLoadChildren}.
+            // This will trigger {@link MediaLibraryServiceLegacyStub#onLoadChildren}.
             if (libraryParams == null || libraryParams.getExtras() == null) {
                 mService.notifyChildrenChanged(parentId);
             } else {
@@ -611,7 +605,7 @@
             // This method in the base class is introduced to internally send return of
             // {@link MediaLibrarySessionCallback#onSearchResultChanged}. However, for
             // BrowserCompat, it should be done by {@link Result#sendResult} from
-            // {@link MediaLibraryService2LegacyStub#onSearch} instead.
+            // {@link MediaLibraryServiceLegacyStub#onSearch} instead.
             if (DEBUG) {
                 throw new RuntimeException("Unexpected API call. Use result.sendResult() for"
                         + " sending onSearchResultChanged() result instead of this");
diff --git a/media2/src/main/java/androidx/media2/MediaLibrarySessionImplBase.java b/media2/src/main/java/androidx/media2/MediaLibrarySessionImplBase.java
index 048d902..9dd1b06 100644
--- a/media2/src/main/java/androidx/media2/MediaLibrarySessionImplBase.java
+++ b/media2/src/main/java/androidx/media2/MediaLibrarySessionImplBase.java
@@ -16,8 +16,8 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaLibraryService2.LibraryResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaLibraryService.LibraryResult.RESULT_CODE_UNKNOWN_ERROR;
 
 import android.app.PendingIntent;
 import android.content.Context;
@@ -29,14 +29,14 @@
 import androidx.annotation.GuardedBy;
 import androidx.collection.ArrayMap;
 import androidx.media.MediaBrowserServiceCompat;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionImpl;
-import androidx.media2.MediaSession2.ControllerCb;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaLibraryService.MediaLibrarySession;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionImpl;
+import androidx.media2.MediaSession.ControllerCb;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionCallback;
 import androidx.versionedparcelable.ParcelImpl;
 
 import java.util.HashSet;
@@ -44,20 +44,20 @@
 import java.util.Set;
 import java.util.concurrent.Executor;
 
-class MediaLibrarySessionImplBase extends MediaSession2ImplBase implements MediaLibrarySessionImpl {
+class MediaLibrarySessionImplBase extends MediaSessionImplBase implements MediaLibrarySessionImpl {
     @GuardedBy("mLock")
     private final ArrayMap<ControllerCb, Set<String>> mSubscriptions = new ArrayMap<>();
 
-    MediaLibrarySessionImplBase(MediaSession2 instance, Context context, String id,
-            SessionPlayer2 player, PendingIntent sessionActivity, Executor callbackExecutor,
+    MediaLibrarySessionImplBase(MediaSession instance, Context context, String id,
+            SessionPlayer player, PendingIntent sessionActivity, Executor callbackExecutor,
             SessionCallback callback) {
         super(instance, context, id, player, sessionActivity, callbackExecutor, callback);
     }
 
     @Override
-    MediaBrowserServiceCompat createLegacyBrowserService(Context context, SessionToken2 token,
+    MediaBrowserServiceCompat createLegacyBrowserService(Context context, SessionToken token,
             Token sessionToken) {
-        return new MediaLibraryService2LegacyStub(context, this, sessionToken);
+        return new MediaLibraryServiceLegacyStub(context, this, sessionToken);
     }
 
     @Override
@@ -71,14 +71,14 @@
     }
 
     @Override
-    MediaLibraryService2LegacyStub getLegacyBrowserService() {
-        return (MediaLibraryService2LegacyStub) super.getLegacyBrowserService();
+    MediaLibraryServiceLegacyStub getLegacyBrowserService() {
+        return (MediaLibraryServiceLegacyStub) super.getLegacyBrowserService();
     }
 
     @Override
     public List<ControllerInfo> getConnectedControllers() {
         List<ControllerInfo> list = super.getConnectedControllers();
-        MediaLibraryService2LegacyStub legacyStub = getLegacyBrowserService();
+        MediaLibraryServiceLegacyStub legacyStub = getLegacyBrowserService();
         if (legacyStub != null) {
             list.addAll(legacyStub.getConnectedControllersManager()
                     .getConnectedControllers());
@@ -91,7 +91,7 @@
         if (super.isConnected(controller)) {
             return true;
         }
-        MediaLibraryService2LegacyStub legacyStub = getLegacyBrowserService();
+        MediaLibraryServiceLegacyStub legacyStub = getLegacyBrowserService();
         return legacyStub != null
                 ? legacyStub.getConnectedControllersManager().isConnected(controller) : false;
     }
@@ -150,7 +150,7 @@
             int pageSize) {
         returnedResult = ensureNonNullResult(returnedResult);
         if (returnedResult.getResultCode() == RESULT_CODE_SUCCESS) {
-            List<MediaItem2> items = returnedResult.getMediaItems();
+            List<MediaItem> items = returnedResult.getMediaItems();
 
             if (items == null) {
                 throw new RuntimeException("List shouldn't be null for the success");
@@ -160,7 +160,7 @@
                         + ", size=" + returnedResult.getMediaItems().size()
                         + ", pageSize" + pageSize);
             }
-            for (MediaItem2 item : items) {
+            for (MediaItem item : items) {
                 if (!isValidItem(item)) {
                     return new LibraryResult(RESULT_CODE_UNKNOWN_ERROR);
                 }
@@ -179,7 +179,7 @@
         return returnedResult;
     }
 
-    private boolean isValidItem(MediaItem2 item) {
+    private boolean isValidItem(MediaItem item) {
         if (item == null) {
             throw new RuntimeException("Item shouldn't be null for the success");
         }
@@ -187,16 +187,16 @@
             throw new RuntimeException(
                     "Media ID of an item shouldn't be empty for the success");
         }
-        MediaMetadata2 metadata = item.getMetadata();
+        MediaMetadata metadata = item.getMetadata();
         if (metadata == null) {
             throw new RuntimeException(
                     "Metadata of an item shouldn't be null for the success");
         }
-        if (!metadata.containsKey(MediaMetadata2.METADATA_KEY_BROWSABLE)) {
+        if (!metadata.containsKey(MediaMetadata.METADATA_KEY_BROWSABLE)) {
             throw new RuntimeException(
                     "METADATA_KEY_BROWSABLE should be specified in metadata of an item");
         }
-        if (!metadata.containsKey(MediaMetadata2.METADATA_KEY_PLAYABLE)) {
+        if (!metadata.containsKey(MediaMetadata.METADATA_KEY_PLAYABLE)) {
             throw new RuntimeException(
                     "METADATA_KEY_PLAYABLE should be specified in metadata of an item");
         }
@@ -204,7 +204,7 @@
     }
 
     /**
-     * Called by {@link MediaSession2Stub#getLibraryRoot(IMediaController2, int, ParcelImpl)}.
+     * Called by {@link MediaSessionStub#getLibraryRoot(IMediaController, int, ParcelImpl)}.
      *
      * @param controller
      * @param params
@@ -217,7 +217,7 @@
     }
 
     /**
-     * Called by {@link MediaSession2Stub#getItem(IMediaController2, int, String)}.
+     * Called by {@link MediaSessionStub#getItem(IMediaController, int, String)}.
      *
      * @param controller
      * @param mediaId
@@ -285,7 +285,7 @@
     @Override
     void dispatchRemoteControllerCallbackTask(RemoteControllerCallbackTask task) {
         super.dispatchRemoteControllerCallbackTask(task);
-        MediaLibraryService2LegacyStub legacyStub = getLegacyBrowserService();
+        MediaLibraryServiceLegacyStub legacyStub = getLegacyBrowserService();
         if (legacyStub != null) {
             dispatchRemoteControllerCallbackTask(legacyStub.getControllersForAll(), task);
         }
diff --git a/media2/src/main/java/androidx/media2/MediaMetadata2.java b/media2/src/main/java/androidx/media2/MediaMetadata.java
similarity index 85%
rename from media2/src/main/java/androidx/media2/MediaMetadata2.java
rename to media2/src/main/java/androidx/media2/MediaMetadata.java
index 49f0a45..ec2aec2 100644
--- a/media2/src/main/java/androidx/media2/MediaMetadata2.java
+++ b/media2/src/main/java/androidx/media2/MediaMetadata.java
@@ -20,6 +20,7 @@
 
 import android.graphics.Bitmap;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 
@@ -28,14 +29,18 @@
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StringDef;
 import androidx.collection.ArrayMap;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession;
+import androidx.media2.MediaLibraryService.MediaLibrarySession;
+import androidx.versionedparcelable.CustomVersionedParcelable;
 import androidx.versionedparcelable.ParcelField;
+import androidx.versionedparcelable.ParcelImpl;
 import androidx.versionedparcelable.ParcelUtils;
 import androidx.versionedparcelable.VersionedParcelable;
 import androidx.versionedparcelable.VersionedParcelize;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -46,7 +51,7 @@
  * {@link androidx.media.widget.MediaControlView2} will show title from the metadata.
  * <p>
  * The {@link MediaLibrarySession} would require some metadata values when it provides
- * {@link MediaItem2}s to {@link MediaBrowser2}.
+ * {@link MediaItem}s to {@link MediaBrowser}.
  * <p>
  * Topics covered here:
  * <ol>
@@ -57,62 +62,62 @@
  * <li><a href="#UserRating">User rating</a>
  * </ol>
  * <a name="MediaId"></a>
- * <h3>{@link MediaMetadata2#METADATA_KEY_MEDIA_ID Media ID}</h3>
+ * <h3>{@link MediaMetadata#METADATA_KEY_MEDIA_ID Media ID}</h3>
  * <p>
  * If set, the media ID must be the persistent key for the underlying media contents, so
- * {@link MediaController2} and {@link MediaBrowser2} can store the information and reuse it later.
- * Some APIs requires a media ID (e.g. {@link MediaController2#setRating}, so you'd better specify
+ * {@link MediaController} and {@link MediaBrowser} can store the information and reuse it later.
+ * Some APIs requires a media ID (e.g. {@link MediaController#setRating}, so you'd better specify
  * one.
  * <p>
  * Typical example of using media ID is the URI of the contents, but use it with the caution because
  * the metadata is shared across the process in plain text.
  * <p>
- * The {@link MediaLibrarySession} would require it for the library root, so {@link MediaBrowser2}
- * can call subsequent {@link MediaBrowser2#getChildren} with the ID.
+ * The {@link MediaLibrarySession} would require it for the library root, so {@link MediaBrowser}
+ * can call subsequent {@link MediaBrowser#getChildren} with the ID.
  * <p>
  * <a name="Browsable"></a>
- * <h3>{@link MediaMetadata2#METADATA_KEY_BROWSABLE Browsable type}</h3>
+ * <h3>{@link MediaMetadata#METADATA_KEY_BROWSABLE Browsable type}</h3>
  * <p>
  * Browsable defines whether the media item has children and type of children if any. With this,
- * {@link MediaBrowser2} can know whether the subsequent {@link MediaBrowser2#getChildren} would
+ * {@link MediaBrowser} can know whether the subsequent {@link MediaBrowser#getChildren} would
  * successfuly run.
  * <p>
  * The {@link MediaLibrarySession} would require the explicit browsable type for the the media items
  * returned by the
- * {@link androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback}.
+ * {@link androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback}.
  * <p>
  * <a name="Playable"></a>
- * <h3>{@link MediaMetadata2#METADATA_KEY_PLAYABLE Playable type}</h3>
+ * <h3>{@link MediaMetadata#METADATA_KEY_PLAYABLE Playable type}</h3>
  * <p>
  * Playable defines whether the media item can be played or not. It may be possible for a playlist
  * to contain a media item which isn't playable in order to show a disabled media item.
  * <p>
  * The {@link MediaLibrarySession} would require the explicit playable value for the the media items
  * returned by the
- * {@link androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback}.
+ * {@link androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionCallback}.
  * <p>
  * <a name="Duration"></a>
- * <li><a href="#Duration">{@link MediaMetadata2#METADATA_KEY_DURATION Duration}</a>
- * The duration is the length of the contents. The {@link MediaController2} can only get the
+ * <li><a href="#Duration">{@link MediaMetadata#METADATA_KEY_DURATION Duration}</a>
+ * The duration is the length of the contents. The {@link MediaController} can only get the
  * duration through the metadata. This tells when would the playback ends, and also tells about the
- * allowed range of {@link MediaController2#seekTo(long)}.
+ * allowed range of {@link MediaController#seekTo(long)}.
  * <p>
- * If it's not set by developer, {@link MediaSession2} would update the duration in the metadata
- * with the {@link SessionPlayer2#getDuration()}.
+ * If it's not set by developer, {@link MediaSession} would update the duration in the metadata
+ * with the {@link SessionPlayer#getDuration()}.
  * <p>
  * <a name="UserRating"></a>
- * <li><a href="#UserRating">{@link MediaMetadata2#METADATA_KEY_USER_RATING User rating}</a>
+ * <li><a href="#UserRating">{@link MediaMetadata#METADATA_KEY_USER_RATING User rating}</a>
  * <p>
- * Prefer to have unrated user rating instead of {@code null}, so {@link MediaController2} can know
- * the possible user rating type for calling {@link MediaController2#setRating(String, Rating2)}.
+ * Prefer to have unrated user rating instead of {@code null}, so {@link MediaController} can know
+ * the possible user rating type for calling {@link MediaController#setRating(String, Rating)}.
  */
 // New version of MediaMetadata with following changes
 //   - Don't implement Parcelable for updatable support.
 //   - Also support MediaDescription features. MediaDescription is deprecated instead because
 //     it was insufficient for controller to display media contents. (e.g. duration is missing)
-@VersionedParcelize
-public final class MediaMetadata2 implements VersionedParcelable {
-    private static final String TAG = "MediaMetadata2";
+@VersionedParcelize(isCustom = true)
+public final class MediaMetadata extends CustomVersionedParcelable {
+    private static final String TAG = "MediaMetadata";
 
     /**
      * The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
@@ -316,21 +321,21 @@
     public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
 
     /**
-     * The metadata key for a {@link Rating2} typed value to retrieve the information about the
+     * The metadata key for a {@link Rating} typed value to retrieve the information about the
      * user's rating for the media. Prefer to have unrated user rating instead of {@code null}, so
-     * {@link MediaController2} can know the possible user rating type.
+     * {@link MediaController} can know the possible user rating type.
      *
-     * @see Builder#putRating(String, Rating2)
+     * @see Builder#putRating(String, Rating)
      * @see #getRating(String)
      * @see <a href="#UserRating">User rating</a>
      */
     public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
 
     /**
-     * The metadata key for a {@link Rating2} typed value to retrieve the information about the
+     * The metadata key for a {@link Rating} typed value to retrieve the information about the
      * overall rating for the media.
      *
-     * @see Builder#putRating(String, Rating2)
+     * @see Builder#putRating(String, Rating)
      * @see #getRating(String)
      */
     public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
@@ -408,7 +413,7 @@
      * The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
      * information about the media ID of the content. This value is specific to the
      * service providing the content. If used, this should be a persistent key for the underlying
-     * content. This ID is used by {@link MediaController2} and {@link MediaBrowser2}.
+     * content. This ID is used by {@link MediaController} and {@link MediaBrowser}.
      *
      * @see Builder#putText(String, CharSequence)
      * @see Builder#putString(String, String)
@@ -447,8 +452,8 @@
      * The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
      * information about the radio program name if this metadata represents radio content.
      *
-     * @see MediaMetadata2.Builder#putText(String, CharSequence)
-     * @see MediaMetadata2.Builder#putString(String, String)
+     * @see MediaMetadata.Builder#putText(String, CharSequence)
+     * @see MediaMetadata.Builder#putString(String, String)
      * @see #getText(String)
      * @see #getString(String)
      */
@@ -480,7 +485,7 @@
      * @see <a href="#Browsable">Browsable</a>
      */
     public static final String METADATA_KEY_BROWSABLE =
-            "android.media.metadata.BT_FOLDER_TYPE";
+            "android.media.metadata.BROWSABLE";
 
     /**
      * The type of browsable for non-browsable media item.
@@ -552,7 +557,7 @@
      * @see #getLong(String)
      * @see <a href="#Playable">Playable</a>
      */
-    public static final String METADATA_KEY_PLAYABLE = "android.media.metadata.playable";
+    public static final String METADATA_KEY_PLAYABLE = "android.media.metadata.PLAYABLE";
 
     /**
      * The metadata key for a {@link Long} typed value to retrieve the information about whether
@@ -710,7 +715,7 @@
         METADATA_KEYS_TYPE.put(METADATA_KEY_EXTRAS, METADATA_TYPE_BUNDLE);
     }
 
-    private static final @MediaMetadata2.TextKey
+    private static final @MediaMetadata.TextKey
     String[] PREFERRED_DESCRIPTION_ORDER = {
             METADATA_KEY_TITLE,
             METADATA_KEY_ARTIST,
@@ -721,14 +726,14 @@
             METADATA_KEY_COMPOSER
     };
 
-    private static final @MediaMetadata2.BitmapKey
+    private static final @MediaMetadata.BitmapKey
     String[] PREFERRED_BITMAP_ORDER = {
             METADATA_KEY_DISPLAY_ICON,
             METADATA_KEY_ART,
             METADATA_KEY_ALBUM_ART
     };
 
-    private static final @MediaMetadata2.TextKey
+    private static final @MediaMetadata.TextKey
     String[] PREFERRED_URI_ORDER = {
             METADATA_KEY_DISPLAY_ICON_URI,
             METADATA_KEY_ART_URI,
@@ -738,15 +743,18 @@
     @ParcelField(1)
     Bundle mBundle;
 
+    @ParcelField(2)
+    ParcelImplListSlice mBitmapListSlice;
+
     /**
      * Used for VersionedParcelable
      */
-    MediaMetadata2() {
+    MediaMetadata() {
     }
 
-    MediaMetadata2(Bundle bundle) {
+    MediaMetadata(Bundle bundle) {
         mBundle = new Bundle(bundle);
-        mBundle.setClassLoader(MediaMetadata2.class.getClassLoader());
+        mBundle.setClassLoader(MediaMetadata.class.getClassLoader());
     }
 
     /**
@@ -824,20 +832,20 @@
     }
 
     /**
-     * Return a {@link Rating2} for the given key or null if no rating exists for
+     * Return a {@link Rating} for the given key or null if no rating exists for
      * the given key.
      * <p>
      * For the {@link #METADATA_KEY_USER_RATING}, A {@code null} return value means that user rating
-     * cannot be set by {@link MediaController2}.
+     * cannot be set by {@link MediaController}.
      *
      * @param key The key the value is stored under
-     * @return A {@link Rating2} or {@code null}
+     * @return A {@link Rating} or {@code null}
      */
-    public @Nullable Rating2 getRating(@NonNull @RatingKey String key) {
+    public @Nullable Rating getRating(@NonNull @RatingKey String key) {
         if (key == null) {
             throw new IllegalArgumentException("key shouldn't be null");
         }
-        Rating2 rating = null;
+        Rating rating = null;
         try {
             rating = ParcelUtils.getVersionedParcelable(mBundle, key);
         } catch (Exception e) {
@@ -915,35 +923,65 @@
         return mBundle.keySet();
     }
 
-    /**
-     * Gets the bundle backing the metadata object. This is available to support backwards
-     * compatibility. Apps shouldn't modify the bundle directly, nor share the metadata across the
-     * process with the bundle here.
-     *
-     * @return The Bundle backing this metadata.
-     */
-    public @NonNull Bundle toBundle() {
-        return mBundle;
-    }
-
     @Override
     public String toString() {
         return mBundle.toString();
     }
 
     /**
-     * Creates the {@link MediaMetadata2} from the bundle that previously returned by
-     * {@link #toBundle()}.
+     * Gets the object which matches the given key in the backing bundle.
      *
-     * @param bundle bundle for the metadata
-     * @return a new MediaMetadata2x
+     * @hide
      */
-    public static @NonNull MediaMetadata2 fromBundle(@Nullable Bundle bundle) {
-        return (bundle == null) ? null : new MediaMetadata2(bundle);
+    @RestrictTo(LIBRARY_GROUP)
+    public @Nullable Object getObject(@NonNull String key) {
+        if (key == null) {
+            throw new IllegalArgumentException("key shouldn't be null");
+        }
+        return mBundle.get(key);
     }
 
     /**
-     * Use to build MediaMetadata2x objects. The system defined metadata keys must
+     * @hide
+     */
+    @Override
+    @RestrictTo(LIBRARY_GROUP)
+    public void onPreParceling(boolean isStream) {
+        List<ParcelImpl> parcelImplList = new ArrayList<>();
+        List<String> keysForBitmap = new ArrayList<>();
+        for (String key : mBundle.keySet()) {
+            Object value = mBundle.get(key);
+            if (!(value instanceof Bitmap)) {
+                // Note: Null bitmap is sent through mBundle.
+                continue;
+            }
+            Bitmap bitmap = (Bitmap) value;
+            parcelImplList.add(MediaUtils.toParcelable(new BitmapEntry(key, bitmap)));
+            keysForBitmap.add(key);
+        }
+        for (String key : keysForBitmap) {
+            mBundle.remove(key);
+        }
+        mBitmapListSlice = new ParcelImplListSlice(parcelImplList);
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    @RestrictTo(LIBRARY_GROUP)
+    public void onPostParceling() {
+        List<ParcelImpl> parcelImplList = mBitmapListSlice.getList();
+        for (ParcelImpl parcelImpl : parcelImplList) {
+            BitmapEntry entry = MediaUtils.fromParcelable(parcelImpl);
+            mBundle.putParcelable(entry.getKey(), entry.getBitmap());
+        }
+        parcelImplList.clear();
+        mBitmapListSlice = null;
+    }
+
+    /**
+     * Use to build MediaMetadatax objects. The system defined metadata keys must
      * use the appropriate data type.
      */
     public static final class Builder {
@@ -951,45 +989,21 @@
 
         /**
          * Create an empty Builder. Any field that should be included in the
-         * {@link MediaMetadata2} must be added.
+         * {@link MediaMetadata} must be added.
          */
         public Builder() {
             mBundle = new Bundle();
         }
 
         /**
-         * Create a Builder using a {@link MediaMetadata2} instance to set the
+         * Create a Builder using a {@link MediaMetadata} instance to set the
          * initial values. All fields in the source metadata will be included in
          * the new metadata. Fields can be overwritten by adding the same key.
          *
          * @param source
          */
-        public Builder(@NonNull MediaMetadata2 source) {
-            mBundle = new Bundle(source.toBundle());
-        }
-
-        /**
-         * Create a Builder using a {@link MediaMetadata2} instance to set
-         * initial values, but replace bitmaps with a scaled down copy if they
-         * are larger than maxBitmapSize.
-         *
-         * @param source The original metadata to copy.
-         * @param maxBitmapSize The maximum height/width for bitmaps contained
-         *            in the metadata.
-         * @hide
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public Builder(MediaMetadata2 source, int maxBitmapSize) {
-            this(source);
-            for (String key : mBundle.keySet()) {
-                Object value = mBundle.get(key);
-                if (value instanceof Bitmap) {
-                    Bitmap bmp = (Bitmap) value;
-                    if (bmp.getHeight() > maxBitmapSize || bmp.getWidth() > maxBitmapSize) {
-                        putBitmap(key, scaleBitmap(bmp, maxBitmapSize));
-                    }
-                }
-            }
+        public Builder(@NonNull MediaMetadata source) {
+            mBundle = new Bundle(source.mBundle);
         }
 
         /**
@@ -1124,7 +1138,7 @@
         }
 
         /**
-         * Put a {@link Rating2} into the metadata. Custom keys may be used, but
+         * Put a {@link Rating} into the metadata. Custom keys may be used, but
          * if the METADATA_KEYs defined in this class are used they may only be
          * one of the following:
          * <ul>
@@ -1137,7 +1151,7 @@
          * @return The Builder to allow chaining
          */
         public @NonNull Builder putRating(@NonNull @RatingKey String key,
-                @Nullable Rating2 value) {
+                @Nullable Rating value) {
             if (key == null) {
                 throw new IllegalArgumentException("key shouldn't be null");
             }
@@ -1160,8 +1174,7 @@
          * <li>{@link #METADATA_KEY_ALBUM_ART}</li>
          * <li>{@link #METADATA_KEY_DISPLAY_ICON}</li>
          * </ul>
-         * Large bitmaps may be scaled down by the system when
-         * {@link android.media.session.MediaSession#setMetadata} is called.
+         * Large bitmaps may be scaled down when it is passed to the other process.
          * To pass full resolution images {@link Uri Uris} should be used with
          * {@link #putString}.
          *
@@ -1217,22 +1230,67 @@
         }
 
         /**
-         * Creates a {@link MediaMetadata2} instance with the specified fields.
+         * Creates a {@link MediaMetadata} instance with the specified fields.
          *
-         * @return The new MediaMetadata2x instance
+         * @return The new MediaMetadatax instance
          */
-        public @NonNull MediaMetadata2 build() {
-            return new MediaMetadata2(mBundle);
+        public @NonNull MediaMetadata build() {
+            return new MediaMetadata(mBundle);
+        }
+    }
+
+    /**
+     * Stores a bitmap and the matching key. Used for sending bitmaps to other process one-by-one.
+     */
+    @VersionedParcelize
+    static final class BitmapEntry implements VersionedParcelable {
+        static final int BITMAP_SIZE_LIMIT_IN_BYTES = 256 * 1024; // 256 KB
+
+        @ParcelField(1)
+        String mKey;
+
+        @ParcelField(2)
+        Bitmap mBitmap;
+
+        /**
+         * Used for VersionedParcelable
+         */
+        BitmapEntry() {
         }
 
-        private Bitmap scaleBitmap(Bitmap bmp, int maxSize) {
-            float maxSizeF = maxSize;
-            float widthScale = maxSizeF / bmp.getWidth();
-            float heightScale = maxSizeF / bmp.getHeight();
-            float scale = Math.min(widthScale, heightScale);
-            int height = (int) (bmp.getHeight() * scale);
-            int width = (int) (bmp.getWidth() * scale);
-            return Bitmap.createScaledBitmap(bmp, width, height, true);
+        BitmapEntry(@NonNull String key, @NonNull Bitmap bitmap) {
+            mKey = key;
+            mBitmap = bitmap;
+
+            // Scale bitmap if it is large.
+            final int sizeInBytes = getBitmapSizeInBytes(mBitmap);
+            if (sizeInBytes > BITMAP_SIZE_LIMIT_IN_BYTES) {
+                int oldWidth = bitmap.getWidth();
+                int oldHeight = bitmap.getHeight();
+
+                double scaleFactor = Math.sqrt(BITMAP_SIZE_LIMIT_IN_BYTES / (double) sizeInBytes);
+                int newWidth = (int) (oldWidth * scaleFactor);
+                int newHeight = (int) (oldHeight * scaleFactor);
+                Log.i(TAG, "Scaling large bitmap of " + oldWidth + "x" + oldHeight + " into "
+                        + newWidth + "x" + newHeight);
+                mBitmap = Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true);
+            }
+        }
+
+        String getKey() {
+            return mKey;
+        }
+
+        Bitmap getBitmap() {
+            return mBitmap;
+        }
+
+        private int getBitmapSizeInBytes(Bitmap bitmap) {
+            if (Build.VERSION.SDK_INT >= 19) {
+                return bitmap.getAllocationByteCount();
+            } else {
+                return bitmap.getByteCount();
+            }
         }
     }
 }
diff --git a/media2/src/main/java/androidx/media2/MediaNotificationHandler.java b/media2/src/main/java/androidx/media2/MediaNotificationHandler.java
index cedf303..d849a89 100644
--- a/media2/src/main/java/androidx/media2/MediaNotificationHandler.java
+++ b/media2/src/main/java/androidx/media2/MediaNotificationHandler.java
@@ -44,7 +44,7 @@
 import java.util.List;
 
 /**
- * Provides default media notification for {@link MediaSessionService2}, and set the service as
+ * Provides default media notification for {@link MediaSessionService}, and set the service as
  * foreground/background according to the player state.
  *
  * @hide
@@ -52,11 +52,11 @@
 @VisibleForTesting(otherwise = PACKAGE_PRIVATE)
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class MediaNotificationHandler extends
-        MediaSession2.SessionCallback.ForegroundServiceEventCallback {
+        MediaSession.SessionCallback.ForegroundServiceEventCallback {
     private static final int NOTIFICATION_ID = 1001;
     private static final String NOTIFICATION_CHANNEL_ID = "default_channel_id";
 
-    private final MediaSessionService2 mServiceInstance;
+    private final MediaSessionService mServiceInstance;
     private final NotificationManager mNotificationManager;
     private final String mNotificationChannelName;
 
@@ -66,7 +66,7 @@
     private final NotificationCompat.Action mSkipToPrevAction;
     private final NotificationCompat.Action mSkipToNextAction;
 
-    public MediaNotificationHandler(MediaSessionService2 service) {
+    public MediaNotificationHandler(MediaSessionService service) {
         mServiceInstance = service;
         mStartSelfIntent = new Intent(mServiceInstance, mServiceInstance.getClass());
 
@@ -92,9 +92,9 @@
      * @param state player state
      */
     @Override
-    public void onPlayerStateChanged(MediaSession2 session,
-            @SessionPlayer2.PlayerState int state) {
-        MediaSessionService2.MediaNotification mediaNotification =
+    public void onPlayerStateChanged(MediaSession session,
+            @SessionPlayer.PlayerState int state) {
+        MediaSessionService.MediaNotification mediaNotification =
                 mServiceInstance.onUpdateNotification(session);
         if (mediaNotification == null) {
             // The service implementation doesn't want to use the automatic start/stopForeground
@@ -111,19 +111,19 @@
             return;
         }
 
-        // state == SessionPlayer2.PLAYER_STATE_PLAYING
+        // state == SessionPlayer.PLAYER_STATE_PLAYING
         ContextCompat.startForegroundService(mServiceInstance, mStartSelfIntent);
         mServiceInstance.startForeground(id, notification);
     }
 
     @Override
-    public void onSessionClosed(MediaSession2 session) {
+    public void onSessionClosed(MediaSession session) {
         mServiceInstance.removeSession(session);
         stopForegroundServiceIfNeeded();
     }
 
     private void stopForegroundServiceIfNeeded() {
-        List<MediaSession2> sessions = mServiceInstance.getSessions();
+        List<MediaSession> sessions = mServiceInstance.getSessions();
         for (int i = 0; i < sessions.size(); i++) {
             if (!isPlaybackStopped(sessions.get(i).getPlayer().getPlayerState())) {
                 return;
@@ -137,9 +137,9 @@
     }
 
     /**
-     * Creates a default media style notification for {@link MediaSessionService2}.
+     * Creates a default media style notification for {@link MediaSessionService}.
      */
-    public MediaSessionService2.MediaNotification onUpdateNotification(MediaSession2 session) {
+    public MediaSessionService.MediaNotification onUpdateNotification(MediaSession session) {
         ensureNotificationChannel();
 
         NotificationCompat.Builder builder = new NotificationCompat.Builder(
@@ -147,7 +147,7 @@
 
         // TODO: Filter actions when SessionPlayer#getSupportedActions() is introduced.
         builder.addAction(mSkipToPrevAction);
-        if (session.getPlayer().getPlayerState() == SessionPlayer2.PLAYER_STATE_PLAYING) {
+        if (session.getPlayer().getPlayerState() == SessionPlayer.PLAYER_STATE_PLAYING) {
             builder.addAction(mPauseAction);
         } else {
             builder.addAction(mPlayAction);
@@ -156,15 +156,15 @@
 
         // Set metadata info in the notification.
         if (session.getPlayer().getCurrentMediaItem() != null) {
-            MediaMetadata2 metadata = session.getPlayer().getCurrentMediaItem().getMetadata();
+            MediaMetadata metadata = session.getPlayer().getCurrentMediaItem().getMetadata();
             if (metadata != null) {
-                CharSequence title = metadata.getText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE);
+                CharSequence title = metadata.getText(MediaMetadata.METADATA_KEY_DISPLAY_TITLE);
                 if (title == null) {
-                    title = metadata.getText(MediaMetadata2.METADATA_KEY_TITLE);
+                    title = metadata.getText(MediaMetadata.METADATA_KEY_TITLE);
                 }
                 builder.setContentTitle(title)
-                        .setContentText(metadata.getText(MediaMetadata2.METADATA_KEY_ARTIST))
-                        .setLargeIcon(metadata.getBitmap(MediaMetadata2.METADATA_KEY_ALBUM_ART));
+                        .setContentText(metadata.getText(MediaMetadata.METADATA_KEY_ARTIST))
+                        .setLargeIcon(metadata.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART));
             }
         }
 
@@ -183,7 +183,7 @@
                 .setOngoing(false)
                 .build();
 
-        return new MediaSessionService2.MediaNotification(NOTIFICATION_ID, notification);
+        return new MediaSessionService.MediaNotification(NOTIFICATION_ID, notification);
     }
 
     private NotificationCompat.Action createNotificationAction(int iconResId, int titleResId,
@@ -230,8 +230,8 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     static boolean isPlaybackStopped(int state) {
-        return state == SessionPlayer2.PLAYER_STATE_PAUSED
-                || state == SessionPlayer2.PLAYER_STATE_IDLE
-                || state == SessionPlayer2.PLAYER_STATE_ERROR;
+        return state == SessionPlayer.PLAYER_STATE_PAUSED
+                || state == SessionPlayer.PLAYER_STATE_IDLE
+                || state == SessionPlayer.PLAYER_STATE_ERROR;
     }
 }
diff --git a/media2/src/main/java/androidx/media2/MediaPlayer.java b/media2/src/main/java/androidx/media2/MediaPlayer.java
index 9a3440b..a2de835 100644
--- a/media2/src/main/java/androidx/media2/MediaPlayer.java
+++ b/media2/src/main/java/androidx/media2/MediaPlayer.java
@@ -17,13 +17,13 @@
 package androidx.media2;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_IO_ERROR;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_PERMISSION_DENIED;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_SKIPPED;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.SessionPlayer2.PlayerResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_IO_ERROR;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_PERMISSION_DENIED;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_SKIPPED;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.SessionPlayer.PlayerResult.RESULT_CODE_UNKNOWN_ERROR;
 
 import android.annotation.TargetApi;
 import android.content.Context;
@@ -67,8 +67,8 @@
 import java.util.concurrent.Executors;
 
 /**
- * A media player which plays {@link MediaItem2}s. The details on playback control and player states
- * can be found in the documentation of the base class, {@link SessionPlayer2}.
+ * A media player which plays {@link MediaItem}s. The details on playback control and player states
+ * can be found in the documentation of the base class, {@link SessionPlayer}.
  * <p>
  * Topic covered here:
  * <ol>
@@ -129,7 +129,7 @@
  * <p>
  */
 @TargetApi(Build.VERSION_CODES.P)
-public class MediaPlayer extends SessionPlayer2 {
+public class MediaPlayer extends SessionPlayer {
     private static final String TAG = "MediaPlayer";
 
     /**
@@ -529,16 +529,24 @@
         @SuppressWarnings("WeakerAccess") /* synthetic access */
         final boolean mIsSeekTo;
         @SuppressWarnings("WeakerAccess") /* synthetic access */
-        boolean mExecuted = false;
+        boolean mExecuteCalled = false;
         @SuppressWarnings("WeakerAccess") /* synthetic access */
         List<ResolvableFuture<V>> mFutures;
 
-        PendingFuture() {
-            mIsSeekTo = false;
+        PendingFuture(Executor executor) {
+            this(executor, false);
         }
 
-        PendingFuture(boolean isSeekTo) {
+        PendingFuture(Executor executor, boolean isSeekTo) {
             mIsSeekTo = isSeekTo;
+            addListener(new Runnable() {
+                @Override
+                public void run() {
+                    if (isCancelled() && mExecuteCalled) {
+                        cancelFutures();
+                    }
+                }
+            }, executor);
         }
 
         @Override
@@ -551,20 +559,23 @@
             return super.setException(throwable);
         }
 
-        public void execute() {
-            if (!mExecuted && !isCancelled()) {
-                mExecuted = true;
+        public boolean execute() {
+            if (!mExecuteCalled && !isCancelled()) {
+                mExecuteCalled = true;
                 mFutures = onExecute();
+            }
+            if (!isCancelled() && !isDone()) {
                 setResultIfFinished();
             }
+            return isCancelled() || isDone();
         }
 
-        public boolean setResultIfFinished() {
+        private void setResultIfFinished() {
             V result = null;
             for (int i = 0; i < mFutures.size(); ++i) {
                 ResolvableFuture<V> future = mFutures.get(i);
                 if (!future.isDone() && !future.isCancelled()) {
-                    return false;
+                    return;
                 }
                 try {
                     result = future.get();
@@ -572,12 +583,12 @@
                     if (resultCode != RESULT_CODE_SUCCESS && resultCode != RESULT_CODE_SKIPPED) {
                         cancelFutures();
                         set(result);
-                        return true;
+                        return;
                     }
                 } catch (Exception e) {
                     cancelFutures();
                     setException(e);
-                    return true;
+                    return;
                 }
             }
             try {
@@ -585,12 +596,12 @@
             } catch (Exception e) {
                 setException(e);
             }
-            return true;
         }
 
         abstract List<ResolvableFuture<V>> onExecute();
 
-        private void cancelFutures() {
+        @SuppressWarnings("WeakerAccess") /* synthetic access */
+        void cancelFutures() {
             for (ResolvableFuture<V> future : mFutures) {
                 if (!future.isCancelled() && !future.isDone()) {
                     future.cancel(true);
@@ -608,7 +619,7 @@
     @GuardedBy("mStateLock")
     private @PlayerState int mState;
     @GuardedBy("mStateLock")
-    private Map<MediaItem2, Integer> mMediaItemToBuffState = new HashMap<>();
+    private Map<MediaItem, Integer> mMediaItemToBuffState = new HashMap<>();
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final AudioFocusHandler mAudioFocusHandler;
 
@@ -616,13 +627,13 @@
     final Object mPlaylistLock = new Object();
     @GuardedBy("mPlaylistLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    ArrayList<MediaItem2> mPlaylist = new ArrayList<>();
+    ArrayList<MediaItem> mPlaylist = new ArrayList<>();
     @GuardedBy("mPlaylistLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    ArrayList<MediaItem2> mShuffledList = new ArrayList<>();
+    ArrayList<MediaItem> mShuffledList = new ArrayList<>();
     @GuardedBy("mPlaylistLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaMetadata2 mPlaylistMetadata;
+            MediaMetadata mPlaylistMetadata;
     @GuardedBy("mPlaylistLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     int mRepeatMode;
@@ -634,10 +645,10 @@
     int mCurrentShuffleIdx;
     @GuardedBy("mPlaylistLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaItem2 mCurPlaylistItem;
+            MediaItem mCurPlaylistItem;
     @GuardedBy("mPlaylistLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaItem2 mNextPlaylistItem;
+            MediaItem mNextPlaylistItem;
     @GuardedBy("mPlaylistLock")
     private boolean mSetMediaItemCalled;
 
@@ -674,33 +685,18 @@
 
     private void addPendingFuture(final PendingFuture pendingFuture) {
         synchronized (mPendingFutures) {
-            pendingFuture.addListener(new Runnable() {
-                @Override
-                public void run() {
-                    if (pendingFuture.isCancelled() && pendingFuture.mExecuted) {
-                        for (Object f : pendingFuture.mFutures) {
-                            ResolvableFuture future = (ResolvableFuture) f;
-                            if (!future.isDone() && !future.isCancelled()) {
-                                future.cancel(true);
-                            }
-                        }
-                        pendingFuture.mFutures.clear();
-                    }
-                }
-            }, mExecutor);
             mPendingFutures.add(pendingFuture);
-            executePendingFuturesIfNeeded();
+            executePendingFutures();
         }
     }
 
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> play() {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
-                // TODO: Make commands be executed sequentially
                 final ResolvableFuture<PlayerResult> future;
                 if (mAudioFocusHandler.onPlay()) {
                     if (mPlayer.getAudioAttributes() == null) {
@@ -725,12 +721,11 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> pause() {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
                 ResolvableFuture<PlayerResult> future = ResolvableFuture.create();
-                // TODO: Make commands be executed sequentially
                 mAudioFocusHandler.onPause();
                 synchronized (mPendingCommands) {
                     Object token = mPlayer.pause();
@@ -753,7 +748,7 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> prepare() {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -777,7 +772,8 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> seekTo(final long position) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(true) {
+        PendingFuture<PlayerResult> pendingFuture =
+                new PendingFuture<PlayerResult>(mExecutor, true) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -797,13 +793,13 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> setPlaybackSpeed(final float playbackSpeed) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
                 ResolvableFuture<PlayerResult> future = ResolvableFuture.create();
                 synchronized (mPendingCommands) {
-                    Object token = mPlayer.setPlaybackParams(new PlaybackParams2.Builder(
+                    Object token = mPlayer.setPlaybackParams(new PlaybackParams.Builder(
                             mPlayer.getPlaybackParams().getPlaybackParams())
                             .setSpeed(playbackSpeed).build());
                     addPendingCommandLocked(MediaPlayer2.CALL_COMPLETED_SET_PLAYBACK_PARAMS,
@@ -821,7 +817,7 @@
     @Override
     public ListenableFuture<PlayerResult> setAudioAttributes(
             @NonNull final AudioAttributesCompat attr) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -903,11 +899,11 @@
 
     @Override
     @NonNull
-    public ListenableFuture<PlayerResult> setMediaItem(@NonNull final MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(@NonNull final MediaItem item) {
         if (item == null) {
             throw new IllegalArgumentException("item shouldn't be null");
         }
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -929,21 +925,21 @@
     @NonNull
     @Override
     public ListenableFuture<PlayerResult> setPlaylist(
-            @NonNull final List<MediaItem2> playlist, @Nullable final MediaMetadata2 metadata) {
+            @NonNull final List<MediaItem> playlist, @Nullable final MediaMetadata metadata) {
         if (playlist == null || playlist.isEmpty()) {
             throw new IllegalArgumentException("playlist shouldn't be null or empty");
         }
-        for (MediaItem2 item : playlist) {
+        for (MediaItem item : playlist) {
             if (item == null) {
                 throw new IllegalArgumentException("playlist shouldn't contain null item");
             }
         }
 
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                MediaItem2 curItem;
-                MediaItem2 nextItem;
+                MediaItem curItem;
+                MediaItem nextItem;
                 synchronized (mPlaylistLock) {
                     mPlaylistMetadata = metadata;
                     mPlaylist.clear();
@@ -958,7 +954,7 @@
                 notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                     @Override
                     public void callCallback(
-                            SessionPlayer2.PlayerCallback callback) {
+                            SessionPlayer.PlayerCallback callback) {
                         callback.onPlaylistChanged(MediaPlayer.this, playlist, metadata);
                     }
                 });
@@ -975,28 +971,26 @@
     @NonNull
     @Override
     public ListenableFuture<PlayerResult> addPlaylistItem(
-            final int index, @NonNull final MediaItem2 item) {
+            final int index, @NonNull final MediaItem item) {
         if (item == null) {
             throw new IllegalArgumentException("item shouldn't be null");
         }
         if (index < 0) {
             throw new IllegalArgumentException("index shouldn't be negative integer");
         }
-        synchronized (mPlaylistLock) {
-            if (mPlaylist.contains(item)) {
-                throw new IllegalStateException("The item is already in the playlist: " + item);
-            }
-        }
 
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                Pair<MediaItem2, MediaItem2> updatedCurNextItem;
+                Pair<MediaItem, MediaItem> updatedCurNextItem;
                 synchronized (mPlaylistLock) {
+                    if (mPlaylist.contains(item)) {
+                        return createFuturesForResultCode(RESULT_CODE_BAD_VALUE, item);
+                    }
                     int clampedIndex = clamp(index, mPlaylist.size());
                     int addedShuffleIdx = clampedIndex;
                     mPlaylist.add(clampedIndex, item);
-                    if (mShuffleMode == SessionPlayer2.SHUFFLE_MODE_NONE) {
+                    if (mShuffleMode == SessionPlayer.SHUFFLE_MODE_NONE) {
                         mShuffledList.add(clampedIndex, item);
                     } else {
                         // Add the item in random position of mShuffledList.
@@ -1008,12 +1002,12 @@
                     }
                     updatedCurNextItem = updateAndGetCurrentNextItemIfNeededLocked();
                 }
-                final List<MediaItem2> playlist = getPlaylist();
-                final MediaMetadata2 metadata = getPlaylistMetadata();
+                final List<MediaItem> playlist = getPlaylist();
+                final MediaMetadata metadata = getPlaylistMetadata();
                 notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                     @Override
                     public void callCallback(
-                            SessionPlayer2.PlayerCallback callback) {
+                            SessionPlayer.PlayerCallback callback) {
                         callback.onPlaylistChanged(MediaPlayer.this, playlist, metadata);
                     }
                 });
@@ -1032,18 +1026,18 @@
 
     @Override
     @NonNull
-    public ListenableFuture<PlayerResult> removePlaylistItem(@NonNull final MediaItem2 item) {
+    public ListenableFuture<PlayerResult> removePlaylistItem(@NonNull final MediaItem item) {
         if (item == null) {
             throw new IllegalArgumentException("item shouldn't be null");
         }
 
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 int removedItemShuffleIdx;
-                MediaItem2 curItem;
-                MediaItem2 nextItem;
-                Pair<MediaItem2, MediaItem2> updatedCurNextItem = null;
+                MediaItem curItem;
+                MediaItem nextItem;
+                Pair<MediaItem, MediaItem> updatedCurNextItem = null;
                 synchronized (mPlaylistLock) {
                     removedItemShuffleIdx = mShuffledList.indexOf(item);
                     if (removedItemShuffleIdx >= 0) {
@@ -1058,12 +1052,12 @@
                     nextItem = mNextPlaylistItem;
                 }
                 if (removedItemShuffleIdx >= 0) {
-                    final List<MediaItem2> playlist = getPlaylist();
-                    final MediaMetadata2 metadata = getPlaylistMetadata();
+                    final List<MediaItem> playlist = getPlaylist();
+                    final MediaMetadata metadata = getPlaylistMetadata();
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
                         public void callCallback(
-                                SessionPlayer2.PlayerCallback callback) {
+                                SessionPlayer.PlayerCallback callback) {
                             callback.onPlaylistChanged(MediaPlayer.this, playlist, metadata);
                         }
                     });
@@ -1089,30 +1083,25 @@
     @NonNull
     @Override
     public ListenableFuture<PlayerResult> replacePlaylistItem(
-            final int index, @NonNull final MediaItem2 item) {
+            final int index, @NonNull final MediaItem item) {
         if (item == null) {
             throw new IllegalArgumentException("item shouldn't be null");
         }
         if (index < 0) {
             throw new IllegalArgumentException("index shouldn't be negative integer");
         }
-        synchronized (mPlaylistLock) {
-            int itemIdx = mPlaylist.indexOf(item);
-            if (itemIdx >= 0 && index == itemIdx) {
-                throw new IllegalStateException("The item is already in the playlist: " + item);
-            }
-        }
 
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                MediaItem2 curItem;
-                MediaItem2 nextItem;
-                Pair<MediaItem2, MediaItem2> updatedCurNextItem = null;
+                MediaItem curItem;
+                MediaItem nextItem;
+                Pair<MediaItem, MediaItem> updatedCurNextItem = null;
                 synchronized (mPlaylistLock) {
-                    if (index >= mPlaylist.size()) {
-                        return createFuturesForResultCode(RESULT_CODE_BAD_VALUE);
+                    if (index >= mPlaylist.size() || mPlaylist.contains(item)) {
+                        return createFuturesForResultCode(RESULT_CODE_BAD_VALUE, item);
                     }
+
                     int shuffleIdx = mShuffledList.indexOf(mPlaylist.get(index));
                     mShuffledList.set(shuffleIdx, item);
                     mPlaylist.set(index, item);
@@ -1121,12 +1110,12 @@
                     nextItem = mNextPlaylistItem;
                 }
                 // TODO: Should we notify current media item changed if it is replaced?
-                final List<MediaItem2> playlist = getPlaylist();
-                final MediaMetadata2 metadata = getPlaylistMetadata();
+                final List<MediaItem> playlist = getPlaylist();
+                final MediaMetadata metadata = getPlaylistMetadata();
                 notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                     @Override
                     public void callCallback(
-                            SessionPlayer2.PlayerCallback callback) {
+                            SessionPlayer.PlayerCallback callback) {
                         callback.onPlaylistChanged(MediaPlayer.this, playlist, metadata);
                     }
                 });
@@ -1151,11 +1140,11 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> skipToPreviousPlaylistItem() {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                MediaItem2 curItem;
-                MediaItem2 nextItem;
+                MediaItem curItem;
+                MediaItem nextItem;
                 synchronized (mPlaylistLock) {
                     int prevShuffleIdx = mCurrentShuffleIdx - 1;
                     if (prevShuffleIdx < 0) {
@@ -1180,11 +1169,11 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> skipToNextPlaylistItem() {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                MediaItem2 curItem;
-                MediaItem2 nextItem;
+                MediaItem curItem;
+                MediaItem nextItem;
                 synchronized (mPlaylistLock) {
                     int nextShuffleIdx = mCurrentShuffleIdx + 1;
                     if (nextShuffleIdx >= mShuffledList.size()) {
@@ -1213,12 +1202,12 @@
 
     @Override
     @NonNull
-    public ListenableFuture<PlayerResult> skipToPlaylistItem(@NonNull final MediaItem2 item) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+    public ListenableFuture<PlayerResult> skipToPlaylistItem(@NonNull final MediaItem item) {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                MediaItem2 curItem;
-                MediaItem2 nextItem;
+                MediaItem curItem;
+                MediaItem nextItem;
                 synchronized (mPlaylistLock) {
                     int newShuffleIdx = mShuffledList.indexOf(item);
                     if (newShuffleIdx < 0) {
@@ -1239,8 +1228,8 @@
     @NonNull
     @Override
     public ListenableFuture<PlayerResult> updatePlaylistMetadata(
-            @Nullable final MediaMetadata2 metadata) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+            @Nullable final MediaMetadata metadata) {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 synchronized (mPlaylistLock) {
@@ -1249,7 +1238,7 @@
                 notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                     @Override
                     public void callCallback(
-                            SessionPlayer2.PlayerCallback callback) {
+                            SessionPlayer.PlayerCallback callback) {
                         callback.onPlaylistMetadataChanged(MediaPlayer.this, metadata);
                     }
                 });
@@ -1263,11 +1252,11 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> setRepeatMode(final int repeatMode) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                if (repeatMode < SessionPlayer2.REPEAT_MODE_NONE
-                        || repeatMode > SessionPlayer2.REPEAT_MODE_GROUP) {
+                if (repeatMode < SessionPlayer.REPEAT_MODE_NONE
+                        || repeatMode > SessionPlayer.REPEAT_MODE_GROUP) {
                     return createFuturesForResultCode(RESULT_CODE_BAD_VALUE);
                 }
 
@@ -1280,7 +1269,7 @@
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
                         public void callCallback(
-                                SessionPlayer2.PlayerCallback callback) {
+                                SessionPlayer.PlayerCallback callback) {
                             callback.onRepeatModeChanged(MediaPlayer.this, repeatMode);
                         }
                     });
@@ -1295,11 +1284,11 @@
     @Override
     @NonNull
     public ListenableFuture<PlayerResult> setShuffleMode(final int shuffleMode) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
-                if (shuffleMode < SessionPlayer2.SHUFFLE_MODE_NONE
-                        || shuffleMode > SessionPlayer2.SHUFFLE_MODE_GROUP) {
+                if (shuffleMode < SessionPlayer.SHUFFLE_MODE_NONE
+                        || shuffleMode > SessionPlayer.SHUFFLE_MODE_GROUP) {
                     return createFuturesForResultCode(RESULT_CODE_BAD_VALUE);
                 }
 
@@ -1312,7 +1301,7 @@
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
                         public void callCallback(
-                                SessionPlayer2.PlayerCallback callback) {
+                                SessionPlayer.PlayerCallback callback) {
                             callback.onShuffleModeChanged(MediaPlayer.this, shuffleMode);
                         }
                     });
@@ -1326,7 +1315,7 @@
 
     @Override
     @Nullable
-    public List<MediaItem2> getPlaylist() {
+    public List<MediaItem> getPlaylist() {
         synchronized (mPlaylistLock) {
             return mPlaylist.isEmpty() ? null : new ArrayList<>(mPlaylist);
         }
@@ -1334,7 +1323,7 @@
 
     @Override
     @Nullable
-    public MediaMetadata2 getPlaylistMetadata() {
+    public MediaMetadata getPlaylistMetadata() {
         synchronized (mPlaylistLock) {
             return mPlaylistMetadata;
         }
@@ -1356,7 +1345,7 @@
 
     @Override
     @Nullable
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return mPlayer.getCurrentMediaItem();
     }
 
@@ -1382,15 +1371,6 @@
      * media item and calling {@link #prepare()}.
      */
     public void reset() {
-        // Cancel the pending futures.
-        synchronized (mPendingFutures) {
-            for (PendingFuture f : mPendingFutures) {
-                if (f.mExecuted && !f.isDone() && !f.isCancelled()) {
-                    f.cancel(true);
-                }
-            }
-            mPendingFutures.clear();
-        }
         // Cancel the pending commands.
         synchronized (mPendingCommands) {
             for (PendingCommand c : mPendingCommands) {
@@ -1398,6 +1378,15 @@
             }
             mPendingCommands.clear();
         }
+        // Cancel the pending futures.
+        synchronized (mPendingFutures) {
+            for (PendingFuture f : mPendingFutures) {
+                if (f.mExecuteCalled && !f.isDone() && !f.isCancelled()) {
+                    f.cancel(true);
+                }
+            }
+            mPendingFutures.clear();
+        }
         synchronized (mStateLock) {
             mState = PLAYER_STATE_IDLE;
             mMediaItemToBuffState.clear();
@@ -1435,7 +1424,7 @@
      */
     @NonNull
     public ListenableFuture<PlayerResult> setSurface(@Nullable final Surface surface) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1466,7 +1455,7 @@
      */
     @NonNull
     public ListenableFuture<PlayerResult> setPlayerVolume(final float volume) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1493,26 +1482,18 @@
         return mPlayer.getMaxPlayerVolume();
     }
 
-    /**
-     * @return the width of the video, or 0 if there is no video,
-     * no display surface was set, or the width has not been determined
-     * yet. The {@link PlayerCallback} can be registered via {@link #registerPlayerCallback} to
-     * receive a notification {@link PlayerCallback#onVideoSizeChanged} when the width
-     * is available.
-     */
-    public int getVideoWidth() {
-        return mPlayer.getVideoWidth();
-    }
 
     /**
-     * @return the height of the video, or 0 if there is no video,
-     * no display surface was set, or the height has not been determined
-     * yet. The {@link PlayerCallback} can be registered via {@link #registerPlayerCallback} to
-     * receive a notification {@link PlayerCallback#onVideoSizeChanged} when the height is
-     * available.
+     * Returns the size of the video.
+     *
+     * @return the size of the video. The width and height of size could be 0 if there is no video,
+     * no display surface was set, or the size has not been determined yet.
+     * The {@link PlayerCallback} can be registered via {@link #registerPlayerCallback} to
+     * receive a notification {@link PlayerCallback#onVideoSizeChanged} when the size
+     * is available.
      */
-    public int getVideoHeight() {
-        return mPlayer.getVideoHeight();
+    public @NonNull VideoSize getVideoSize() {
+        return new VideoSize(mPlayer.getVideoWidth(), mPlayer.getVideoHeight());
     }
 
     /**
@@ -1529,8 +1510,8 @@
     }
 
     /**
-     * Sets playback rate using {@link PlaybackParams2}. The player sets its internal
-     * PlaybackParams2 to the given input. This does not change the player state. For example,
+     * Sets playback rate using {@link PlaybackParams}. The player sets its internal
+     * PlaybackParams to the given input. This does not change the player state. For example,
      * if this is called with the speed of 2.0f in {@link #PLAYER_STATE_PAUSED}, the player will
      * just update internal property and stay paused. Once the client calls {@link #play()}
      * afterwards, the player will start playback with the given speed. Calling this with zero
@@ -1541,8 +1522,8 @@
      * {@link PlayerResult} will be delivered when the command completes.
      */
     @NonNull
-    public ListenableFuture<PlayerResult> setPlaybackParams(@NonNull final PlaybackParams2 params) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+    public ListenableFuture<PlayerResult> setPlaybackParams(@NonNull final PlaybackParams params) {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1566,7 +1547,7 @@
      * @return the playback params.
      */
     @NonNull
-    public PlaybackParams2 getPlaybackParams() {
+    public PlaybackParams getPlaybackParams() {
         return mPlayer.getPlaybackParams();
     }
 
@@ -1582,14 +1563,15 @@
      * @param msec the offset in milliseconds from the start to seek to.
      * When seeking to the given time position, there is no guarantee that the media item
      * has a frame located at the position. When this happens, a frame nearby will be rendered.
-     * The value should be in the range of start and end positions defined in {@link MediaItem2}.
+     * The value should be in the range of start and end positions defined in {@link MediaItem}.
      * @param mode the mode indicating where exactly to seek to.
      * @return a {@link ListenableFuture} which represents the pending completion of the command.
      * {@link PlayerResult} will be delivered when the command completes.
      */
     @NonNull
     public ListenableFuture<PlayerResult> seekTo(final long msec, @SeekMode final int mode) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(true) {
+        PendingFuture<PlayerResult> pendingFuture =
+                new PendingFuture<PlayerResult>(mExecutor, true) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1608,9 +1590,9 @@
     }
 
     /**
-     * Gets current playback position as a {@link MediaTimestamp2}.
+     * Gets current playback position as a {@link MediaTimestamp}.
      * <p>
-     * The MediaTimestamp2 represents how the media time correlates to the system time in
+     * The MediaTimestamp represents how the media time correlates to the system time in
      * a linear fashion using an anchor and a clock rate. During regular playback, the media
      * time moves fairly constantly (though the anchor frame may be rebased to a current
      * system time, the linear correlation stays steady). Therefore, this method does not
@@ -1618,15 +1600,15 @@
      * <p>
      * To help users get current playback position, this method always anchors the timestamp
      * to the current {@link System#nanoTime system time}, so
-     * {@link MediaTimestamp2#getAnchorMediaTimeUs} can be used as current playback position.
+     * {@link MediaTimestamp#getAnchorMediaTimeUs} can be used as current playback position.
      *
-     * @return a MediaTimestamp2 object if a timestamp is available, or {@code null} if no timestamp
+     * @return a MediaTimestamp object if a timestamp is available, or {@code null} if no timestamp
      *         is available, e.g. because the media player has not been initialized.
      *
-     * @see MediaTimestamp2
+     * @see MediaTimestamp
      */
     @Nullable
-    public MediaTimestamp2 getTimestamp() {
+    public MediaTimestamp getTimestamp() {
         return mPlayer.getTimestamp();
     }
 
@@ -1649,7 +1631,7 @@
      */
     @NonNull
     public ListenableFuture<PlayerResult> setAudioSessionId(final int sessionId) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1695,7 +1677,7 @@
      */
     @NonNull
     public ListenableFuture<PlayerResult> attachAuxEffect(final int effectId) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1730,7 +1712,7 @@
      */
     @NonNull
     public ListenableFuture<PlayerResult> setAuxEffectSendLevel(final float level) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1814,7 +1796,7 @@
      */
     @NonNull
     public ListenableFuture<PlayerResult> selectTrack(final int index) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1848,7 +1830,7 @@
      */
     @NonNull
     public ListenableFuture<PlayerResult> deselectTrack(final int index) {
-        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>() {
+        PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
                 ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
@@ -1907,7 +1889,7 @@
     // This is an asynchronous call.
     @NonNull
     public ListenableFuture<DrmResult> prepareDrm(@NonNull final UUID uuid) {
-        PendingFuture<DrmResult> pendingFuture = new PendingFuture<DrmResult>() {
+        PendingFuture<DrmResult> pendingFuture = new PendingFuture<DrmResult>(mExecutor) {
             @Override
             List<ResolvableFuture<DrmResult>> onExecute() {
                 ArrayList<ResolvableFuture<DrmResult>> futures = new ArrayList<>();
@@ -2100,7 +2082,7 @@
         mPlayer.setOnDrmConfigHelper(listener == null ? null :
                 new MediaPlayer2.OnDrmConfigHelper() {
                     @Override
-                    public void onDrmConfig(MediaPlayer2 mp, MediaItem2 item) {
+                    public void onDrmConfig(MediaPlayer2 mp, MediaItem item) {
                         listener.onDrmConfig(MediaPlayer.this, item);
                     }
                 });
@@ -2118,7 +2100,7 @@
         if (needToNotify) {
             notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                 @Override
-                public void callCallback(SessionPlayer2.PlayerCallback callback) {
+                public void callCallback(SessionPlayer.PlayerCallback callback) {
                     callback.onPlayerStateChanged(MediaPlayer.this, state);
                 }
             });
@@ -2126,7 +2108,7 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    void setBufferingState(final MediaItem2 item, @BuffState final int state) {
+    void setBufferingState(final MediaItem item, @BuffState final int state) {
         Integer previousState;
         synchronized (mStateLock) {
             previousState = mMediaItemToBuffState.put(item, state);
@@ -2134,7 +2116,7 @@
         if (previousState == null || previousState.intValue() != state) {
             notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                 @Override
-                public void callCallback(SessionPlayer2.PlayerCallback callback) {
+                public void callCallback(SessionPlayer.PlayerCallback callback) {
                     callback.onBufferingStateChanged(MediaPlayer.this, item, state);
                 }
             });
@@ -2143,9 +2125,9 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     void notifySessionPlayerCallback(final SessionPlayerCallbackNotifier notifier) {
-        List<Pair<SessionPlayer2.PlayerCallback, Executor>> callbacks = getCallbacks();
-        for (Pair<SessionPlayer2.PlayerCallback, Executor> pair : callbacks) {
-            final SessionPlayer2.PlayerCallback callback = pair.first;
+        List<Pair<SessionPlayer.PlayerCallback, Executor>> callbacks = getCallbacks();
+        for (Pair<SessionPlayer.PlayerCallback, Executor> pair : callbacks) {
+            final SessionPlayer.PlayerCallback callback = pair.first;
             pair.second.execute(new Runnable() {
                 @Override
                 public void run() {
@@ -2157,8 +2139,8 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     void notifyMediaPlayerCallback(final MediaPlayerCallbackNotifier notifier) {
-        List<Pair<SessionPlayer2.PlayerCallback, Executor>> callbacks = getCallbacks();
-        for (Pair<SessionPlayer2.PlayerCallback, Executor> pair : callbacks) {
+        List<Pair<SessionPlayer.PlayerCallback, Executor>> callbacks = getCallbacks();
+        for (Pair<SessionPlayer.PlayerCallback, Executor> pair : callbacks) {
             if (pair.first instanceof PlayerCallback) {
                 final PlayerCallback callback = (PlayerCallback) pair.first;
                 pair.second.execute(new Runnable() {
@@ -2172,7 +2154,7 @@
     }
 
     private interface SessionPlayerCallbackNotifier {
-        void callCallback(SessionPlayer2.PlayerCallback callback);
+        void callCallback(SessionPlayer.PlayerCallback callback);
     }
 
     private interface MediaPlayerCallbackNotifier {
@@ -2181,7 +2163,7 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     List<ResolvableFuture<PlayerResult>> setMediaItemsInternal(
-            @NonNull MediaItem2 curItem, @Nullable MediaItem2 nextItem) {
+            @NonNull MediaItem curItem, @Nullable MediaItem nextItem) {
         boolean setMediaItemCalled;
         synchronized (mPlaylistLock) {
             setMediaItemCalled = mSetMediaItemCalled;
@@ -2201,7 +2183,7 @@
         return futures;
     }
 
-    private ResolvableFuture<PlayerResult> setMediaItemInternal(MediaItem2 item) {
+    private ResolvableFuture<PlayerResult> setMediaItemInternal(MediaItem item) {
         ResolvableFuture<PlayerResult> future = ResolvableFuture.create();
         synchronized (mPendingCommands) {
             Object token = mPlayer.setMediaItem(item);
@@ -2214,7 +2196,7 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    ResolvableFuture<PlayerResult> setNextMediaItemInternal(MediaItem2 item) {
+    ResolvableFuture<PlayerResult> setNextMediaItemInternal(MediaItem item) {
         ResolvableFuture<PlayerResult> future = ResolvableFuture.create();
         synchronized (mPendingCommands) {
             Object token = mPlayer.setNextMediaItem(item);
@@ -2248,15 +2230,27 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     ResolvableFuture<PlayerResult> createFutureForResultCode(int resultCode) {
+        return createFutureForResultCode(resultCode, null);
+    }
+
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+    ResolvableFuture<PlayerResult> createFutureForResultCode(int resultCode, MediaItem item) {
         ResolvableFuture<PlayerResult> future = ResolvableFuture.create();
-        future.set(new PlayerResult(resultCode, mPlayer.getCurrentMediaItem()));
+        future.set(new PlayerResult(resultCode,
+                item == null ? mPlayer.getCurrentMediaItem() : item));
         return future;
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     List<ResolvableFuture<PlayerResult>> createFuturesForResultCode(int resultCode) {
+        return createFuturesForResultCode(resultCode, null);
+    }
+
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+    List<ResolvableFuture<PlayerResult>> createFuturesForResultCode(int resultCode,
+            MediaItem item) {
         ArrayList<ResolvableFuture<PlayerResult>> futures = new ArrayList<>();
-        futures.add(createFutureForResultCode(resultCode));
+        futures.add(createFutureForResultCode(resultCode, item));
         return futures;
     }
 
@@ -2264,8 +2258,8 @@
     void applyShuffleModeLocked() {
         mShuffledList.clear();
         mShuffledList.addAll(mPlaylist);
-        if (mShuffleMode == SessionPlayer2.SHUFFLE_MODE_ALL
-                || mShuffleMode == SessionPlayer2.SHUFFLE_MODE_GROUP) {
+        if (mShuffleMode == SessionPlayer.SHUFFLE_MODE_ALL
+                || mShuffleMode == SessionPlayer.SHUFFLE_MODE_GROUP) {
             Collections.shuffle(mShuffledList);
         }
     }
@@ -2279,9 +2273,9 @@
      * current and next item or both are changed to null.
      */
     @SuppressWarnings({"GuardedBy", "WeakerAccess"}) /* synthetic access */
-    Pair<MediaItem2, MediaItem2> updateAndGetCurrentNextItemIfNeededLocked() {
-        MediaItem2 changedCurItem = null;
-        MediaItem2 changedNextItem = null;
+    Pair<MediaItem, MediaItem> updateAndGetCurrentNextItemIfNeededLocked() {
+        MediaItem changedCurItem = null;
+        MediaItem changedNextItem = null;
         if (mCurrentShuffleIdx < 0) {
             if (mCurPlaylistItem == null && mNextPlaylistItem == null) {
                 return null;
@@ -2322,7 +2316,7 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    void handleCallComplete(MediaPlayer2 mp, final MediaItem2 item, int what, int status) {
+    void handleCallComplete(MediaPlayer2 mp, final MediaItem item, int what, int status) {
         PendingCommand expected;
         synchronized (mPendingCommands) {
             expected = mPendingCommands.pollFirst();
@@ -2351,7 +2345,7 @@
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
                         public void callCallback(
-                                SessionPlayer2.PlayerCallback callback) {
+                                SessionPlayer.PlayerCallback callback) {
                             callback.onSeekCompleted(MediaPlayer.this, pos);
                         }
                     });
@@ -2360,7 +2354,7 @@
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
                         public void callCallback(
-                                SessionPlayer2.PlayerCallback callback) {
+                                SessionPlayer.PlayerCallback callback) {
                             callback.onCurrentMediaItemChanged(MediaPlayer.this, item);
                         }
                     });
@@ -2371,7 +2365,7 @@
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
                         public void callCallback(
-                                SessionPlayer2.PlayerCallback callback) {
+                                SessionPlayer.PlayerCallback callback) {
                             callback.onPlaybackSpeedChanged(MediaPlayer.this, speed);
                         }
                     });
@@ -2380,7 +2374,7 @@
                     final AudioAttributesCompat attr = mPlayer.getAudioAttributes();
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
-                        public void callCallback(SessionPlayer2.PlayerCallback callback) {
+                        public void callCallback(SessionPlayer.PlayerCallback callback) {
                             callback.onAudioAttributesChanged(MediaPlayer.this, attr);
                         }
                     });
@@ -2395,35 +2389,21 @@
                     status, DrmResult.RESULT_CODE_PREPARATION_ERROR);
             expected.mFuture.set(new DrmResult(resultCode, item));
         }
-        executePendingFuturesIfNeeded();
+        executePendingFutures();
     }
 
-    private void executePendingFuturesIfNeeded() {
+    private void executePendingFutures() {
         synchronized (mPendingFutures) {
-            PendingFuture<? super PlayerResult> pendingFuture;
-            while ((pendingFuture = mPendingFutures.peekFirst()) != null) {
-                if (pendingFuture.isCancelled()) {
+            Iterator<PendingFuture<? super PlayerResult>> it = mPendingFutures.iterator();
+            while (it.hasNext()) {
+                PendingFuture f = it.next();
+                if (f.isCancelled() || f.execute()) {
                     mPendingFutures.removeFirst();
-                } else if (pendingFuture.mExecuted) {
-                    // Set result and remove pending futures that are finished.
-                    if (pendingFuture.setResultIfFinished()) {
-                        mPendingFutures.removeFirst();
-                    } else {
-                        break;
-                    }
                 } else {
-                    pendingFuture.execute();
-                    if (!pendingFuture.isDone()) {
-                        break;
-                    }
+                    break;
                 }
             }
             // Execute skip futures earlier for making them be skipped.
-            Iterator<PendingFuture<? super PlayerResult>> it = mPendingFutures.iterator();
-            if (it.hasNext()) {
-                // The first future is being handled.
-                it.next();
-            }
             while (it.hasNext()) {
                 PendingFuture f = it.next();
                 if (!f.mIsSeekTo) {
@@ -2438,7 +2418,7 @@
     class Mp2DrmCallback extends MediaPlayer2.DrmEventCallback {
         @Override
         public void onDrmInfo(
-                MediaPlayer2 mp, final MediaItem2 item, final MediaPlayer2.DrmInfo drmInfo) {
+                MediaPlayer2 mp, final MediaItem item, final MediaPlayer2.DrmInfo drmInfo) {
             notifyMediaPlayerCallback(new MediaPlayerCallbackNotifier() {
                 @Override
                 public void callCallback(PlayerCallback callback) {
@@ -2449,7 +2429,7 @@
         }
 
         @Override
-        public void onDrmPrepared(MediaPlayer2 mp, final MediaItem2 item, final int status) {
+        public void onDrmPrepared(MediaPlayer2 mp, final MediaItem item, final int status) {
             handleCallComplete(mp, item, MediaPlayer2.CALL_COMPLETED_PREPARE_DRM, status);
         }
     }
@@ -2458,18 +2438,19 @@
     class Mp2Callback extends MediaPlayer2.EventCallback {
         @Override
         public void onVideoSizeChanged(
-                MediaPlayer2 mp, final MediaItem2 item, final int width, final int height) {
+                MediaPlayer2 mp, final MediaItem item, final int width, final int height) {
+            final VideoSize size = new VideoSize(width, height);
             notifyMediaPlayerCallback(new MediaPlayerCallbackNotifier() {
                 @Override
                 public void callCallback(PlayerCallback callback) {
-                    callback.onVideoSizeChanged(MediaPlayer.this, item, width, height);
+                    callback.onVideoSizeChanged(MediaPlayer.this, item, size);
                 }
             });
         }
 
         @Override
         public void onTimedMetaDataAvailable(
-                MediaPlayer2 mp, final MediaItem2 item, final TimedMetaData2 data) {
+                MediaPlayer2 mp, final MediaItem item, final TimedMetaData data) {
             notifyMediaPlayerCallback(new MediaPlayerCallbackNotifier() {
                 @Override
                 public void callCallback(PlayerCallback callback) {
@@ -2480,7 +2461,7 @@
 
         @Override
         public void onError(
-                MediaPlayer2 mp, final MediaItem2 item, final int what, final int extra) {
+                MediaPlayer2 mp, final MediaItem item, final int what, final int extra) {
             setState(PLAYER_STATE_ERROR);
             setBufferingState(item, BUFFERING_STATE_UNKNOWN);
             notifyMediaPlayerCallback(new MediaPlayerCallbackNotifier() {
@@ -2493,7 +2474,7 @@
 
         @Override
         public void onInfo(
-                MediaPlayer2 mp, final MediaItem2 item, final int mp2What, final int extra) {
+                MediaPlayer2 mp, final MediaItem item, final int mp2What, final int extra) {
             switch (mp2What) {
                 case MediaPlayer2.MEDIA_INFO_BUFFERING_START:
                     setBufferingState(item, BUFFERING_STATE_BUFFERING_AND_STARVED);
@@ -2511,7 +2492,7 @@
                     setState(PLAYER_STATE_PAUSED);
                     notifySessionPlayerCallback(new SessionPlayerCallbackNotifier() {
                         @Override
-                        public void callCallback(SessionPlayer2.PlayerCallback callback) {
+                        public void callCallback(SessionPlayer.PlayerCallback callback) {
                             callback.onPlaybackCompleted(MediaPlayer.this);
                         }
                     });
@@ -2528,13 +2509,13 @@
 
         @Override
         public void onCallCompleted(
-                MediaPlayer2 mp, final MediaItem2 item, int what, int status) {
+                MediaPlayer2 mp, final MediaItem item, int what, int status) {
             handleCallComplete(mp, item, what, status);
         }
 
         @Override
         public void onMediaTimeDiscontinuity(
-                MediaPlayer2 mp, final MediaItem2 item, final MediaTimestamp2 timestamp) {
+                MediaPlayer2 mp, final MediaItem item, final MediaTimestamp timestamp) {
             notifyMediaPlayerCallback(new MediaPlayerCallbackNotifier() {
                 @Override
                 public void callCallback(PlayerCallback callback) {
@@ -2550,7 +2531,7 @@
 
         @Override
         public void onSubtitleData(
-                MediaPlayer2 mp, final MediaItem2 item, final SubtitleData2 data) {
+                MediaPlayer2 mp, final MediaItem item, final SubtitleData data) {
             notifyMediaPlayerCallback(new MediaPlayerCallbackNotifier() {
                 @Override
                 public void callCallback(PlayerCallback callback) {
@@ -2564,7 +2545,7 @@
      * Interface definition for callbacks to be invoked when the player has the corresponding
      * events.
      */
-    public abstract static class PlayerCallback extends SessionPlayer2.PlayerCallback {
+    public abstract static class PlayerCallback extends SessionPlayer.PlayerCallback {
         /**
          * Called to indicate the video size
          *
@@ -2572,12 +2553,11 @@
          * no display surface was set, or the value was not determined yet.
          *
          * @param mp the player associated with this callback
-         * @param item the MediaItem2 of this media item
-         * @param width the width of the video
-         * @param height the height of the video
+         * @param item the MediaItem of this media item
+         * @param size the size of the video
          */
         public void onVideoSizeChanged(
-                @NonNull MediaPlayer mp, @NonNull MediaItem2 item, int width, int height) { }
+                @NonNull MediaPlayer mp, @NonNull MediaItem item, @NonNull VideoSize size) { }
 
         /**
          * Called to indicate available timed metadata
@@ -2587,40 +2567,40 @@
          * not controlled by the associated timestamp.
          * <p>
          * Currently only HTTP live streaming data URI's embedded with timed ID3 tags generates
-         * {@link TimedMetaData2}.
+         * {@link TimedMetaData}.
          *
-         * @see TimedMetaData2
+         * @see TimedMetaData
          *
          * @param mp the player associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param data the timed metadata sample associated with this event
          */
         public void onTimedMetaDataAvailable(@NonNull MediaPlayer mp,
-                @NonNull MediaItem2 item, @NonNull TimedMetaData2 data) { }
+                @NonNull MediaItem item, @NonNull TimedMetaData data) { }
 
         /**
          * Called to indicate an error.
          *
          * @param mp the MediaPlayer2 the error pertains to
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param what the type of error that has occurred.
          * @param extra an extra code, specific to the error. Typically
          * implementation dependent.
          */
         public void onError(@NonNull MediaPlayer mp,
-                @NonNull MediaItem2 item, @MediaError int what, int extra) { }
+                @NonNull MediaItem item, @MediaError int what, int extra) { }
 
         /**
          * Called to indicate an info or a warning.
          *
          * @param mp the player the info pertains to.
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param what the type of info or warning.
          * @param extra an extra code, specific to the info. Typically
          * implementation dependent.
          */
         public void onInfo(@NonNull MediaPlayer mp,
-                @NonNull MediaItem2 item, @MediaInfo int what, int extra) { }
+                @NonNull MediaItem item, @MediaInfo int what, int extra) { }
 
         /**
          * Called when a discontinuity in the normal progression of the media time is detected.
@@ -2638,34 +2618,34 @@
          * </ul>
          *
          * @param mp the player the media time pertains to.
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param timestamp the timestamp that correlates media time, system time and clock rate,
-         *     or {@link MediaTimestamp2#TIMESTAMP_UNKNOWN} in an error case.
+         *     or {@link MediaTimestamp#TIMESTAMP_UNKNOWN} in an error case.
          */
         public void onMediaTimeDiscontinuity(@NonNull MediaPlayer mp,
-                @NonNull MediaItem2 item, @NonNull MediaTimestamp2 timestamp) { }
+                @NonNull MediaItem item, @NonNull MediaTimestamp timestamp) { }
 
         /**
          * Called when when a player subtitle track has new subtitle data available.
          * @param mp the player that reports the new subtitle data
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param data the subtitle data
          */
         public void onSubtitleData(@NonNull MediaPlayer mp,
-                @NonNull MediaItem2 item, @NonNull SubtitleData2 data) { }
+                @NonNull MediaItem item, @NonNull SubtitleData data) { }
 
         /**
          * Called to indicate DRM info is available
          *
          * @param mp the {@code MediaPlayer2} associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param drmInfo DRM info of the source including PSSH, and subset
          *                of crypto schemes supported by this device
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
         public void onDrmInfo(@NonNull MediaPlayer mp,
-                @NonNull MediaItem2 item, @NonNull DrmInfo drmInfo) { }
+                @NonNull MediaItem item, @NonNull DrmInfo drmInfo) { }
     }
 
     /**
@@ -2800,9 +2780,9 @@
          * Called to give the app the opportunity to configure DRM before the session is created
          *
          * @param mp the {@code MediaPlayer} associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          */
-        void onDrmConfig(@NonNull MediaPlayer mp, @NonNull MediaItem2 item);
+        void onDrmConfig(@NonNull MediaPlayer mp, @NonNull MediaItem item);
     }
 
     /**
@@ -2964,7 +2944,7 @@
          * @param resultCode result code. Recommends to use the standard code defined here.
          * @param item media item when the operation is completed
          */
-        public DrmResult(@DrmResultCode int resultCode, @NonNull MediaItem2 item) {
+        public DrmResult(@DrmResultCode int resultCode, @NonNull MediaItem item) {
             super(resultCode, item);
         }
 
diff --git a/media2/src/main/java/androidx/media2/MediaPlayer2.java b/media2/src/main/java/androidx/media2/MediaPlayer2.java
index 4512c53..69efbec 100644
--- a/media2/src/main/java/androidx/media2/MediaPlayer2.java
+++ b/media2/src/main/java/androidx/media2/MediaPlayer2.java
@@ -69,7 +69,7 @@
  *         {@link #create(Context)}, or after calling {@link #reset()}.</p>
  *
  *         <p>While in this state, you should call
- *         {@link #setMediaItem(MediaItem2) setMediaItem()}. It is a good
+ *         {@link #setMediaItem(MediaItem) setMediaItem()}. It is a good
  *         programming practice to register an {@link EventCallback#onCallCompleted onCallCompleted}
  *         <a href="#callback">callback</a> and watch for {@link #CALL_STATUS_BAD_VALUE} and
  *         {@link #CALL_STATUS_ERROR_IO}, which might be caused by <code>setMediaItem</code>.
@@ -127,7 +127,7 @@
  *
  *          <p>If you register an {@link EventCallback#onError}} <a href="#callback">callback</a>
  *          the callback will be performed when entering the state. When programming errors happen,
- *          such as calling {@link #prepare()} and {@link #setMediaItem(MediaItem2)} methods
+ *          such as calling {@link #prepare()} and {@link #setMediaItem(MediaItem)} methods
  *          from an <a href="#invalid_state">invalid state</a>, The callback is called with
  *          {@link #CALL_STATUS_INVALID_OPERATION} . The MediaPlayer2 object enters the
  *          <strong>Error</strong> whether or not a callback exists. </p>
@@ -386,23 +386,23 @@
     public abstract @Nullable AudioAttributesCompat getAudioAttributes();
 
     /**
-     * Sets the media item as described by a MediaItem2.
+     * Sets the media item as described by a MediaItem.
      *
      * @param item the descriptor of media item you want to play
      * @return a token which can be used to cancel the operation later with {@link #cancel}.
      */
     // This is an asynchronous call.
-    public abstract Object setMediaItem(@NonNull MediaItem2 item);
+    public abstract Object setMediaItem(@NonNull MediaItem item);
 
     /**
-     * Sets a single media item as described by a MediaItem2 which will be played
+     * Sets a single media item as described by a MediaItem which will be played
      * after current media item is finished.
      *
      * @param item the descriptor of media item you want to play after current one
      * @return a token which can be used to cancel the operation later with {@link #cancel}.
      */
     // This is an asynchronous call.
-    public abstract Object setNextMediaItem(@NonNull MediaItem2 item);
+    public abstract Object setNextMediaItem(@NonNull MediaItem item);
 
     /**
      * Sets a list of media items to be played sequentially after current media item is done.
@@ -411,14 +411,14 @@
      * @return a token which can be used to cancel the operation later with {@link #cancel}.
      */
     // This is an asynchronous call.
-    public abstract Object setNextMediaItems(@NonNull List<MediaItem2> items);
+    public abstract Object setNextMediaItems(@NonNull List<MediaItem> items);
 
     /**
-     * Gets the current media item as described by a MediaItem2.
+     * Gets the current media item as described by a MediaItem.
      *
-     * @return the current MediaItem2
+     * @return the current MediaItem
      */
-    public abstract @Nullable MediaItem2 getCurrentMediaItem();
+    public abstract @Nullable MediaItem getCurrentMediaItem();
 
     /**
      * Configures the player to loop on the current media item.
@@ -551,8 +551,8 @@
     public abstract PersistableBundle getMetrics();
 
     /**
-     * Sets playback rate using {@link PlaybackParams2}. The player sets its internal
-     * PlaybackParams2 to the given input. This does not change the player state. For example,
+     * Sets playback rate using {@link PlaybackParams}. The player sets its internal
+     * PlaybackParams to the given input. This does not change the player state. For example,
      * if this is called with the speed of 2.0f in {@link #PLAYER_STATE_PAUSED}, the player will
      * just update internal property and stay paused. Once the client calls {@link #play()}
      * afterwards, the player will start playback with the given speed. Calling this with zero
@@ -562,7 +562,7 @@
      * @return a token which can be used to cancel the operation later with {@link #cancel}.
      */
     // This is an asynchronous call.
-    public abstract Object setPlaybackParams(@NonNull PlaybackParams2 params);
+    public abstract Object setPlaybackParams(@NonNull PlaybackParams params);
 
     /**
      * Gets the playback params, containing the current playback rate.
@@ -570,7 +570,7 @@
      * @return the playback params.
      */
     @NonNull
-    public abstract PlaybackParams2 getPlaybackParams();
+    public abstract PlaybackParams getPlaybackParams();
 
     /**
      * Seek modes used in method seekTo(long, int) to move media position
@@ -646,9 +646,9 @@
     public abstract Object seekTo(long msec, @SeekMode int mode);
 
     /**
-     * Gets current playback position as a {@link MediaTimestamp2}.
+     * Gets current playback position as a {@link MediaTimestamp}.
      * <p>
-     * The MediaTimestamp2 represents how the media time correlates to the system time in
+     * The MediaTimestamp represents how the media time correlates to the system time in
      * a linear fashion using an anchor and a clock rate. During regular playback, the media
      * time moves fairly constantly (though the anchor frame may be rebased to a current
      * system time, the linear correlation stays steady). Therefore, this method does not
@@ -656,15 +656,15 @@
      * <p>
      * To help users get current playback position, this method always anchors the timestamp
      * to the current {@link System#nanoTime system time}, so
-     * {@link MediaTimestamp2#getAnchorMediaTimeUs} can be used as current playback position.
+     * {@link MediaTimestamp#getAnchorMediaTimeUs} can be used as current playback position.
      *
-     * @return a MediaTimestamp2 object if a timestamp is available, or {@code null} if no timestamp
+     * @return a MediaTimestamp object if a timestamp is available, or {@code null} if no timestamp
      *         is available, e.g. because the media player has not been initialized.
      *
-     * @see MediaTimestamp2
+     * @see MediaTimestamp
      */
     @Nullable
-    public abstract MediaTimestamp2 getTimestamp();
+    public abstract MediaTimestamp getTimestamp();
 
     /**
      * Resets the MediaPlayer2 to its uninitialized state. After calling
@@ -865,12 +865,12 @@
          * no display surface was set, or the value was not determined yet.
          *
          * @param mp the MediaPlayer2 associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param width the width of the video
          * @param height the height of the video
          */
         public void onVideoSizeChanged(
-                MediaPlayer2 mp, MediaItem2 item, int width, int height) { }
+                MediaPlayer2 mp, MediaItem item, int width, int height) { }
 
         /**
          * Called to indicate available timed metadata
@@ -880,51 +880,51 @@
          * not controlled by the associated timestamp.
          * <p>
          * Currently only HTTP live streaming data URI's embedded with timed ID3 tags generates
-         * {@link TimedMetaData2}.
+         * {@link TimedMetaData}.
          *
          * @see MediaPlayer2#selectTrack(int)
-         * @see TimedMetaData2
+         * @see TimedMetaData
          *
          * @param mp the MediaPlayer2 associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param data the timed metadata sample associated with this event
          */
         public void onTimedMetaDataAvailable(
-                MediaPlayer2 mp, MediaItem2 item, TimedMetaData2 data) { }
+                MediaPlayer2 mp, MediaItem item, TimedMetaData data) { }
 
         /**
          * Called to indicate an error.
          *
          * @param mp the MediaPlayer2 the error pertains to
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param what the type of error that has occurred.
          * @param extra an extra code, specific to the error. Typically
          * implementation dependent.
          */
         public void onError(
-                MediaPlayer2 mp, MediaItem2 item, @MediaError int what, int extra) { }
+                MediaPlayer2 mp, MediaItem item, @MediaError int what, int extra) { }
 
         /**
          * Called to indicate an info or a warning.
          *
          * @param mp the MediaPlayer2 the info pertains to.
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param what the type of info or warning.
          * @param extra an extra code, specific to the info. Typically
          * implementation dependent.
          */
-        public void onInfo(MediaPlayer2 mp, MediaItem2 item, @MediaInfo int what, int extra) { }
+        public void onInfo(MediaPlayer2 mp, MediaItem item, @MediaInfo int what, int extra) { }
 
         /**
          * Called to acknowledge an API call.
          *
          * @param mp the MediaPlayer2 the call was made on.
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param what the enum for the API call.
          * @param status the returned status code for the call.
          */
         public void onCallCompleted(
-                MediaPlayer2 mp, MediaItem2 item, @CallCompleted int what,
+                MediaPlayer2 mp, MediaItem item, @CallCompleted int what,
                 @CallStatus int status) { }
 
         /**
@@ -943,12 +943,12 @@
          * </ul>
          *
          * @param mp the MediaPlayer2 the media time pertains to.
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param timestamp the timestamp that correlates media time, system time and clock rate,
-         *     or {@link MediaTimestamp2#TIMESTAMP_UNKNOWN} in an error case.
+         *     or {@link MediaTimestamp#TIMESTAMP_UNKNOWN} in an error case.
          */
         public void onMediaTimeDiscontinuity(
-                MediaPlayer2 mp, MediaItem2 item, MediaTimestamp2 timestamp) { }
+                MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) { }
 
         /**
          * Called to indicate {@link #notifyWhenCommandLabelReached(Object)} has been processed.
@@ -962,11 +962,11 @@
         /**
          * Called when when a player subtitle track has new subtitle data available.
          * @param mp the player that reports the new subtitle data
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param data the subtitle data
          */
         public void onSubtitleData(
-                MediaPlayer2 mp, MediaItem2 item, @NonNull SubtitleData2 data) { }
+                MediaPlayer2 mp, MediaItem item, @NonNull SubtitleData data) { }
     }
 
     /**
@@ -1453,9 +1453,9 @@
          * Called to give the app the opportunity to configure DRM before the session is created
          *
          * @param mp the {@code MediaPlayer2} associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          */
-        void onDrmConfig(MediaPlayer2 mp, MediaItem2 item);
+        void onDrmConfig(MediaPlayer2 mp, MediaItem item);
     }
 
     /**
@@ -1478,22 +1478,22 @@
          * Called to indicate DRM info is available
          *
          * @param mp the {@code MediaPlayer2} associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param drmInfo DRM info of the source including PSSH, and subset
          *                of crypto schemes supported by this device
          */
-        public void onDrmInfo(MediaPlayer2 mp, MediaItem2 item, DrmInfo drmInfo) { }
+        public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) { }
 
         /**
          * Called to notify the client that {@link #prepareDrm} is finished and ready for
          * key request/response.
          *
          * @param mp the {@code MediaPlayer2} associated with this callback
-         * @param item the MediaItem2 of this media item
+         * @param item the MediaItem of this media item
          * @param status the result of DRM preparation.
          */
         public void onDrmPrepared(
-                MediaPlayer2 mp, MediaItem2 item, @PrepareDrmStatusCode int status) { }
+                MediaPlayer2 mp, MediaItem item, @PrepareDrmStatusCode int status) { }
     }
 
     /**
diff --git a/media2/src/main/java/androidx/media2/MediaPlayer2Impl.java b/media2/src/main/java/androidx/media2/MediaPlayer2Impl.java
index fac87a7..5eeb245 100644
--- a/media2/src/main/java/androidx/media2/MediaPlayer2Impl.java
+++ b/media2/src/main/java/androidx/media2/MediaPlayer2Impl.java
@@ -23,11 +23,7 @@
 import android.media.MediaDataSource;
 import android.media.MediaDrm;
 import android.media.MediaPlayer;
-import android.media.MediaTimestamp;
-import android.media.PlaybackParams;
 import android.media.ResourceBusyException;
-import android.media.SubtitleData;
-import android.media.TimedMetaData;
 import android.media.UnsupportedSchemeException;
 import android.os.Build;
 import android.os.Handler;
@@ -47,8 +43,8 @@
 import androidx.core.util.ObjectsCompat;
 import androidx.core.util.Preconditions;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.SessionPlayer2.BuffState;
-import androidx.media2.SessionPlayer2.PlayerState;
+import androidx.media2.SessionPlayer.BuffState;
+import androidx.media2.SessionPlayer.PlayerState;
 import androidx.media2.common.TrackInfoImpl;
 
 import java.io.IOException;
@@ -80,8 +76,8 @@
     private static final int SOURCE_STATE_PREPARED = 2;
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    static final PlaybackParams DEFAULT_PLAYBACK_PARAMS =
-            new PlaybackParams().allowDefaults();
+    static final android.media.PlaybackParams DEFAULT_PLAYBACK_PARAMS =
+            new android.media.PlaybackParams().allowDefaults();
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     static ArrayMap<Integer, Integer> sInfoEventMap;
@@ -116,11 +112,11 @@
         sErrorEventExtraMap.put(MediaPlayer.MEDIA_ERROR_TIMED_OUT, MEDIA_ERROR_TIMED_OUT);
 
         sStateMap = new ArrayMap<>();
-        sStateMap.put(PLAYER_STATE_IDLE, SessionPlayer2.PLAYER_STATE_IDLE);
-        sStateMap.put(PLAYER_STATE_PREPARED, SessionPlayer2.PLAYER_STATE_PAUSED);
-        sStateMap.put(PLAYER_STATE_PAUSED, SessionPlayer2.PLAYER_STATE_PAUSED);
-        sStateMap.put(PLAYER_STATE_PLAYING, SessionPlayer2.PLAYER_STATE_PLAYING);
-        sStateMap.put(PLAYER_STATE_ERROR, SessionPlayer2.PLAYER_STATE_ERROR);
+        sStateMap.put(PLAYER_STATE_IDLE, SessionPlayer.PLAYER_STATE_IDLE);
+        sStateMap.put(PLAYER_STATE_PREPARED, SessionPlayer.PLAYER_STATE_PAUSED);
+        sStateMap.put(PLAYER_STATE_PAUSED, SessionPlayer.PLAYER_STATE_PAUSED);
+        sStateMap.put(PLAYER_STATE_PLAYING, SessionPlayer.PLAYER_STATE_PLAYING);
+        sStateMap.put(PLAYER_STATE_ERROR, SessionPlayer.PLAYER_STATE_ERROR);
     }
 
     MediaPlayerSourceQueue mPlayer;
@@ -276,7 +272,7 @@
         return mPlayer.getMediaPlayer2State();
     }
 
-    @SessionPlayer2.PlayerState int getPlayerState() {
+    @SessionPlayer.PlayerState int getPlayerState() {
         return mPlayer.getPlayerState();
     }
 
@@ -285,7 +281,7 @@
      * During buffering, see {@link #getBufferedPosition()} for the quantifying the amount already
      * buffered.
      */
-    @SessionPlayer2.BuffState int getBufferingState() {
+    @SessionPlayer.BuffState int getBufferingState() {
         return  mPlayer.getBufferingState();
     }
 
@@ -305,11 +301,11 @@
     }
 
     @Override
-    public Object setMediaItem(@NonNull final MediaItem2 item) {
+    public Object setMediaItem(@NonNull final MediaItem item) {
         return addTask(new Task(CALL_COMPLETED_SET_DATA_SOURCE, false) {
             @Override
             void process() {
-                Preconditions.checkArgument(item != null, "the MediaItem2 cannot be null");
+                Preconditions.checkArgument(item != null, "the MediaItem cannot be null");
                 // TODO: setMediaItem could update exist media item
                 try {
                     mPlayer.setFirst(item);
@@ -321,28 +317,28 @@
     }
 
     @Override
-    public Object setNextMediaItem(@NonNull final MediaItem2 item) {
+    public Object setNextMediaItem(@NonNull final MediaItem item) {
         return addTask(new Task(CALL_COMPLETED_SET_NEXT_DATA_SOURCE, false) {
             @Override
             void process() {
-                Preconditions.checkArgument(item != null, "the MediaItem2 cannot be null");
+                Preconditions.checkArgument(item != null, "the MediaItem cannot be null");
                 handleDataSourceError(mPlayer.setNext(item));
             }
         });
     }
 
     @Override
-    public Object setNextMediaItems(@NonNull final List<MediaItem2> items) {
+    public Object setNextMediaItems(@NonNull final List<MediaItem> items) {
         return addTask(new Task(CALL_COMPLETED_SET_NEXT_DATA_SOURCES, false) {
             @Override
             void process() {
                 if (items == null || items.size() == 0) {
                     throw new IllegalArgumentException("media item list cannot be null or empty.");
                 }
-                for (MediaItem2 item : items) {
+                for (MediaItem item : items) {
                     if (item == null) {
                         throw new IllegalArgumentException(
-                                "MediaItem2 in the source list cannot be null.");
+                                "MediaItem in the source list cannot be null.");
                     }
                 }
                 handleDataSourceError(mPlayer.setNextMultiple(items));
@@ -350,8 +346,8 @@
         });
     }
 
-    @Override public @Nullable
-    MediaItem2 getCurrentMediaItem() {
+    @Override
+    public @Nullable MediaItem getCurrentMediaItem() {
         return mPlayer.getFirst().getDSD();
     }
 
@@ -441,14 +437,14 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     static void handleDataSource(MediaPlayerSource src)
             throws IOException {
-        final MediaItem2 item = src.getDSD();
-        Preconditions.checkArgument(item != null, "the MediaItem2 cannot be null");
+        final MediaItem item = src.getDSD();
+        Preconditions.checkArgument(item != null, "the MediaItem cannot be null");
 
         MediaPlayer player = src.getPlayer();
-        if (item instanceof CallbackMediaItem2) {
+        if (item instanceof CallbackMediaItem) {
             player.setDataSource(new MediaDataSource() {
-                DataSourceCallback2 mDataSource =
-                        ((CallbackMediaItem2) item).getDataSourceCallback2();
+                DataSourceCallback mDataSource =
+                        ((CallbackMediaItem) item).getDataSourceCallback();
 
                 @Override
                 public int readAt(long position, byte[] buffer, int offset, int size)
@@ -466,14 +462,14 @@
                     mDataSource.close();
                 }
             });
-        } else if (item instanceof FileMediaItem2) {
-            FileMediaItem2 fitem = (FileMediaItem2) item;
+        } else if (item instanceof FileMediaItem) {
+            FileMediaItem fitem = (FileMediaItem) item;
             player.setDataSource(
                     fitem.getFileDescriptor(),
                     fitem.getFileDescriptorOffset(),
                     fitem.getFileDescriptorLength());
-        } else if (item instanceof UriMediaItem2) {
-            UriMediaItem2 uitem = (UriMediaItem2) item;
+        } else if (item instanceof UriMediaItem) {
+            UriMediaItem uitem = (UriMediaItem) item;
             player.setDataSource(
                     uitem.getUriContext(),
                     uitem.getUri(),
@@ -501,7 +497,7 @@
     }
 
     @Override
-    public Object setPlaybackParams(@NonNull final PlaybackParams2 params) {
+    public Object setPlaybackParams(@NonNull final PlaybackParams params) {
         return addTask(new Task(CALL_COMPLETED_SET_PLAYBACK_PARAMS, false) {
             @Override
             void process() {
@@ -512,8 +508,8 @@
 
     @Override
     @NonNull
-    public PlaybackParams2 getPlaybackParams() {
-        return new PlaybackParams2.Builder(mPlayer.getPlaybackParams()).build();
+    public PlaybackParams getPlaybackParams() {
+        return new PlaybackParams.Builder(mPlayer.getPlaybackParams()).build();
     }
 
     @Override
@@ -528,7 +524,7 @@
 
     @Override
     @Nullable
-    public MediaTimestamp2 getTimestamp() {
+    public MediaTimestamp getTimestamp() {
         return mPlayer.getTimestamp();
     }
 
@@ -661,7 +657,7 @@
             @Override
             public void onDrmConfig(MediaPlayer mp) {
                 MediaPlayerSource src = mPlayer.getSourceForPlayer(mp);
-                MediaItem2 item = src == null ? null : src.getDSD();
+                MediaItem item = src == null ? null : src.getDSD();
                 listener.onDrmConfig(MediaPlayer2Impl.this, item);
             }
         });
@@ -849,11 +845,11 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     void setEndPositionTimerIfNeeded(
             final MediaPlayer.OnCompletionListener completionListener,
-            final MediaPlayerSource src, MediaTimestamp timeitem) {
+            final MediaPlayerSource src, android.media.MediaTimestamp timeitem) {
         if (src == mPlayer.getFirst()) {
             mEndPositionHandler.removeCallbacksAndMessages(null);
-            MediaItem2 item = src.getDSD();
-            if (item.getEndPosition() != MediaItem2.POSITION_UNKNOWN) {
+            MediaItem item = src.getDSD();
+            if (item.getEndPosition() != MediaItem.POSITION_UNKNOWN) {
                 if (timeitem.getMediaClockRate() > 0.0f) {
                     long nowNs = System.nanoTime();
                     long elapsedTimeUs = (nowNs - timeitem.getAnchorSytemNanoTime()) / 1000;
@@ -903,7 +899,7 @@
                             @Override
                             public void notify(EventCallback callback) {
                                 MediaPlayer2Impl mp2 = MediaPlayer2Impl.this;
-                                MediaItem2 item = src.getDSD();
+                                MediaItem item = src.getDSD();
                                 callback.onInfo(mp2, item, MEDIA_INFO_PREPARED, 0);
                             }
                         });
@@ -951,11 +947,11 @@
                 switch (what) {
                     case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                         mPlayer.setBufferingState(
-                                mp, SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_STARVED);
+                                mp, SessionPlayer.BUFFERING_STATE_BUFFERING_AND_STARVED);
                         break;
                     case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                         mPlayer.setBufferingState(
-                                mp, SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_PLAYABLE);
+                                mp, SessionPlayer.BUFFERING_STATE_BUFFERING_AND_PLAYABLE);
                         break;
                 }
                 notifyMediaPlayer2Event(new Mp2EventNotifier() {
@@ -1027,12 +1023,13 @@
         p.setOnTimedMetaDataAvailableListener(
                 new MediaPlayer.OnTimedMetaDataAvailableListener() {
                     @Override
-                    public void onTimedMetaDataAvailable(MediaPlayer mp, final TimedMetaData data) {
+                    public void onTimedMetaDataAvailable(MediaPlayer mp, final android.media
+                            .TimedMetaData data) {
                         notifyMediaPlayer2Event(new Mp2EventNotifier() {
                             @Override
                             public void notify(EventCallback cb) {
                                 cb.onTimedMetaDataAvailable(MediaPlayer2Impl.this, src.getDSD(),
-                                        new TimedMetaData2(data));
+                                        new TimedMetaData(data));
                             }
                         });
                     }
@@ -1042,7 +1039,7 @@
             public void onBufferingUpdate(MediaPlayer mp, final int percent) {
                 if (percent >= 100) {
                     mPlayer.setBufferingState(
-                            mp, SessionPlayer2.BUFFERING_STATE_COMPLETE);
+                            mp, SessionPlayer.BUFFERING_STATE_COMPLETE);
                 }
                 src.mBufferedPercentage.set(percent);
                 notifyMediaPlayer2Event(new Mp2EventNotifier() {
@@ -1058,13 +1055,13 @@
                 new MediaPlayer.OnMediaTimeDiscontinuityListener() {
                     @Override
                     public void onMediaTimeDiscontinuity(
-                            MediaPlayer mp, final MediaTimestamp timestamp) {
+                            MediaPlayer mp, final android.media.MediaTimestamp timestamp) {
                         notifyMediaPlayer2Event(new Mp2EventNotifier() {
                             @Override
                             public void notify(EventCallback cb) {
                                 cb.onMediaTimeDiscontinuity(
                                         MediaPlayer2Impl.this, src.getDSD(),
-                                        new MediaTimestamp2(timestamp));
+                                        new MediaTimestamp(timestamp));
                             }
                         });
                         setEndPositionTimerIfNeeded(completionListener, src, timestamp);
@@ -1072,12 +1069,12 @@
                 });
         p.setOnSubtitleDataListener(new MediaPlayer.OnSubtitleDataListener() {
             @Override
-            public  void onSubtitleData(MediaPlayer mp, final SubtitleData data) {
+            public  void onSubtitleData(MediaPlayer mp, final android.media.SubtitleData data) {
                 notifyMediaPlayer2Event(new Mp2EventNotifier() {
                     @Override
                     public void notify(EventCallback cb) {
                         cb.onSubtitleData(
-                                MediaPlayer2Impl.this, src.getDSD(), new SubtitleData2(data));
+                                MediaPlayer2Impl.this, src.getDSD(), new SubtitleData(data));
                     }
                 });
             }
@@ -1240,7 +1237,7 @@
     private abstract class Task implements Runnable {
         final int mMediaCallType;
         final boolean mNeedToWaitForEventToComplete;
-        MediaItem2 mDSD;
+        MediaItem mDSD;
         @GuardedBy("this")
         boolean mDone;
 
@@ -1321,11 +1318,11 @@
     };
 
     private static class DataSourceError {
-        final MediaItem2 mDSD;
+        final MediaItem mDSD;
         final int mWhat;
 
         final int mExtra;
-        DataSourceError(MediaItem2 item, int what, int extra) {
+        DataSourceError(MediaItem item, int what, int extra) {
             mDSD = item;
             mWhat = what;
             mExtra = extra;
@@ -1335,22 +1332,22 @@
 
     private class MediaPlayerSource {
 
-        volatile MediaItem2 mDSD;
+        volatile MediaItem mDSD;
         MediaPlayer mPlayer;
         final AtomicInteger mBufferedPercentage = new AtomicInteger(0);
         int mSourceState = SOURCE_STATE_INIT;
         @MediaPlayer2State int mMp2State = PLAYER_STATE_IDLE;
-        @BuffState int mBufferingState = SessionPlayer2.BUFFERING_STATE_UNKNOWN;
-        @PlayerState int mPlayerState = SessionPlayer2.PLAYER_STATE_IDLE;
+        @BuffState int mBufferingState = SessionPlayer.BUFFERING_STATE_UNKNOWN;
+        @PlayerState int mPlayerState = SessionPlayer.PLAYER_STATE_IDLE;
         boolean mPlayPending;
         boolean mSetAsNextPlayer;
 
-        MediaPlayerSource(final MediaItem2 item) {
+        MediaPlayerSource(final MediaItem item) {
             mDSD = item;
             setUpListeners(this);
         }
 
-        MediaItem2 getDSD() {
+        MediaItem getDSD() {
             return mDSD;
         }
 
@@ -1375,8 +1372,8 @@
         Float mAuxEffectSendLevel;
         AudioAttributesCompat mAudioAttributes;
         Integer mAudioSessionId;
-        PlaybackParams mPlaybackParams = DEFAULT_PLAYBACK_PARAMS;
-        PlaybackParams mPlaybackParamsToSetWhenStarting;
+        android.media.PlaybackParams mPlaybackParams = DEFAULT_PLAYBACK_PARAMS;
+        android.media.PlaybackParams mPlaybackParamsToSetWhenStarting;
         boolean mLooping;
 
         MediaPlayerSourceQueue() {
@@ -1391,7 +1388,7 @@
             return mQueue.get(0);
         }
 
-        synchronized void setFirst(MediaItem2 item) throws IOException {
+        synchronized void setFirst(MediaItem item) throws IOException {
             if (mQueue.isEmpty()) {
                 mQueue.add(0, new MediaPlayerSource(item));
             } else {
@@ -1401,7 +1398,7 @@
             handleDataSource(mQueue.get(0));
         }
 
-        synchronized DataSourceError setNext(MediaItem2 item) {
+        synchronized DataSourceError setNext(MediaItem item) {
             if (mQueue.isEmpty() || getFirst().getDSD() == null) {
                 throw new IllegalStateException();
             }
@@ -1415,7 +1412,7 @@
             return prepareAt(1);
         }
 
-        synchronized DataSourceError setNextMultiple(List<MediaItem2> descs) {
+        synchronized DataSourceError setNextMultiple(List<MediaItem> descs) {
             if (mQueue.isEmpty() || getFirst().getDSD() == null) {
                 throw new IllegalStateException();
             }
@@ -1425,7 +1422,7 @@
                 src.release();
             }
             List<MediaPlayerSource> sources = new ArrayList<>();
-            for (MediaItem2 item: descs) {
+            for (MediaItem item: descs) {
                 sources.add(new MediaPlayerSource(item));
             }
             mQueue.addAll(1, sources);
@@ -1460,7 +1457,7 @@
         synchronized void prepareAsync() {
             MediaPlayer mp = getCurrentPlayer();
             mp.prepareAsync();
-            setBufferingState(mp, SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_STARVED);
+            setBufferingState(mp, SessionPlayer.BUFFERING_STATE_BUFFERING_AND_STARVED);
         }
 
         synchronized void pause() {
@@ -1528,7 +1525,7 @@
                     }
                     src.mSourceState = SOURCE_STATE_PREPARED;
                     setBufferingState(src.getPlayer(),
-                            SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_PLAYABLE);
+                            SessionPlayer.BUFFERING_STATE_BUFFERING_AND_PLAYABLE);
                     if (i == 1) {
                         boolean hasVideo = false;
                         for (MediaPlayer.TrackInfo info : mp.getTrackInfo()) {
@@ -1558,7 +1555,7 @@
                     @Override
                     public void notify(EventCallback cb) {
                         MediaPlayer2Impl mp2 = MediaPlayer2Impl.this;
-                        MediaItem2 item = src.getDSD();
+                        MediaItem item = src.getDSD();
                         cb.onInfo(mp2, item, MEDIA_INFO_DATA_SOURCE_REPEAT, 0);
                     }
                 });
@@ -1572,7 +1569,7 @@
                     @Override
                     public void notify(EventCallback cb) {
                         MediaPlayer2Impl mp2 = MediaPlayer2Impl.this;
-                        MediaItem2 item = src.getDSD();
+                        MediaItem item = src.getDSD();
                         cb.onInfo(mp2, item, MEDIA_INFO_DATA_SOURCE_END, 0);
                     }
                 });
@@ -1583,7 +1580,7 @@
                 if (mQueue.size() == 1) {
                     setMp2State(mp, PLAYER_STATE_PAUSED);
 
-                    final MediaItem2 item = mQueue.get(0).getDSD();
+                    final MediaItem item = mQueue.get(0).getDSD();
                     notifyMediaPlayer2Event(new Mp2EventNotifier() {
                         @Override
                         public void notify(EventCallback callback) {
@@ -1683,13 +1680,13 @@
 
         synchronized void onError(MediaPlayer mp) {
             setMp2State(mp, PLAYER_STATE_ERROR);
-            setBufferingState(mp, SessionPlayer2.BUFFERING_STATE_UNKNOWN);
+            setBufferingState(mp, SessionPlayer.BUFFERING_STATE_UNKNOWN);
         }
 
         synchronized DataSourceError prepareAt(int n) {
             if (n >= Math.min(2, mQueue.size())
                     || mQueue.get(n).mSourceState != SOURCE_STATE_INIT
-                    || (n != 0 && getPlayerState() == SessionPlayer2.PLAYER_STATE_IDLE)) {
+                    || (n != 0 && getPlayerState() == SessionPlayer.PLAYER_STATE_IDLE)) {
                 // There is no next source or it's in preparing or prepared state.
                 return null;
             }
@@ -1705,7 +1702,7 @@
                 src.getPlayer().prepareAsync();
                 return null;
             } catch (Exception e) {
-                MediaItem2 item = src.getDSD();
+                MediaItem item = src.getDSD();
                 setMp2State(src.getPlayer(), PLAYER_STATE_ERROR);
                 return new DataSourceError(item, MEDIA_ERROR_UNKNOWN, 0);
             }
@@ -1718,7 +1715,7 @@
             }
             final MediaPlayerSource src = mQueue.get(0);
             moveToNext();
-            if (src.mPlayerState == SessionPlayer2.PLAYER_STATE_PLAYING || src.mPlayPending) {
+            if (src.mPlayerState == SessionPlayer.PLAYER_STATE_PLAYING || src.mPlayPending) {
                 playCurrent();
             }
         }
@@ -1727,11 +1724,11 @@
             mLooping = loop;
         }
 
-        synchronized void setPlaybackParams(final PlaybackParams params) {
+        synchronized void setPlaybackParams(final android.media.PlaybackParams params) {
             if (params == null || params.getSpeed() == 0f) {
                 throw new IllegalArgumentException();
             }
-            PlaybackParams current = getPlaybackParams();
+            android.media.PlaybackParams current = getPlaybackParams();
             MediaPlayerSource firstPlayer = mPlayer.getFirst();
             if (firstPlayer.mMp2State != PLAYER_STATE_PLAYING) {
                 // MediaPlayer1 may start the playback on setPlaybackParams. Store the value here
@@ -1779,18 +1776,19 @@
             return getCurrentPlayer().getMetrics();
         }
 
-        synchronized PlaybackParams getPlaybackParams() {
+        synchronized android.media.PlaybackParams getPlaybackParams() {
             // PlaybackParams is mutable. Make a copy of mPlaybackParams and return.
             Parcel parcel = Parcel.obtain();
             mPlaybackParams.writeToParcel(parcel, 0);
             parcel.setDataPosition(0);
-            PlaybackParams ret = PlaybackParams.CREATOR.createFromParcel(parcel);
+            android.media.PlaybackParams ret =
+                    android.media.PlaybackParams.CREATOR.createFromParcel(parcel);
             parcel.recycle();
             return ret;
         }
 
         synchronized void seekTo(long msec, int mode) {
-            MediaItem2 current = getFirst().getDSD();
+            MediaItem current = getFirst().getDSD();
             Preconditions.checkArgument(
                     current.getStartPosition() <= msec && current.getEndPosition() >= msec,
                     "Requested seek position is out of range : " + msec);
@@ -1810,7 +1808,7 @@
 
             MediaPlayerSource first = mQueue.get(0);
             setMp2State(first.getPlayer(), PLAYER_STATE_IDLE);
-            setBufferingState(first.getPlayer(), SessionPlayer2.BUFFERING_STATE_UNKNOWN);
+            setBufferingState(first.getPlayer(), SessionPlayer.BUFFERING_STATE_UNKNOWN);
 
             for (MediaPlayerSource src : mQueue) {
                 src.release();
@@ -1819,9 +1817,9 @@
             mQueue.add(new MediaPlayerSource(null));
         }
 
-        synchronized MediaTimestamp2 getTimestamp() {
-            MediaTimestamp t = getCurrentPlayer().getTimestamp();
-            return (t == null) ? null : new MediaTimestamp2(t);
+        synchronized MediaTimestamp getTimestamp() {
+            android.media.MediaTimestamp t = getCurrentPlayer().getTimestamp();
+            return (t == null) ? null : new MediaTimestamp(t);
         }
 
         synchronized void setAudioSessionId(int sessionId) {
diff --git a/media2/src/main/java/androidx/media2/MediaSession2.java b/media2/src/main/java/androidx/media2/MediaSession.java
similarity index 71%
rename from media2/src/main/java/androidx/media2/MediaSession2.java
rename to media2/src/main/java/androidx/media2/MediaSession.java
index 7cc076f..9eedec8 100644
--- a/media2/src/main/java/androidx/media2/MediaSession2.java
+++ b/media2/src/main/java/androidx/media2/MediaSession.java
@@ -18,8 +18,8 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_NOT_SUPPORTED;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_NOT_SUPPORTED;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
 
 import android.annotation.TargetApi;
 import android.app.PendingIntent;
@@ -43,14 +43,14 @@
 import androidx.core.content.ContextCompat;
 import androidx.core.util.ObjectsCompat;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
-import androidx.media2.MediaController2.ControllerResult;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaSession2.SessionResult.ResultCode;
-import androidx.media2.SessionPlayer2.BuffState;
-import androidx.media2.SessionPlayer2.PlayerResult;
-import androidx.media2.SessionPlayer2.PlayerState;
+import androidx.media2.MediaController.ControllerResult;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaSession.SessionResult.ResultCode;
+import androidx.media2.SessionPlayer.BuffState;
+import androidx.media2.SessionPlayer.PlayerResult;
+import androidx.media2.SessionPlayer.PlayerState;
 import androidx.versionedparcelable.ParcelField;
 import androidx.versionedparcelable.VersionedParcelable;
 import androidx.versionedparcelable.VersionedParcelize;
@@ -71,13 +71,13 @@
  *     <li>Separating UI process and playback process</li>
  * </ul>
  * <p>
- * A MediaSession2 should be created when an app wants to publish media playback information or
+ * A MediaSession should be created when an app wants to publish media playback information or
  * handle media keys. In general an app only needs one session for all playback, though multiple
  * sessions can be created to provide finer grain controls of media.
  * <p>
- * If you want to support background playback, {@link MediaSessionService2} is preferred
+ * If you want to support background playback, {@link MediaSessionService} is preferred
  * instead. With it, your playback can be revived even after playback is finished. See
- * {@link MediaSessionService2} for details.
+ * {@link MediaSessionService} for details.
  * <p>
  * Topic covered here:
  * <ol>
@@ -90,7 +90,7 @@
  * <h3>Session Lifecycle</h3>
  * <p>
  * A session can be obtained by {@link Builder}. The owner of the session may pass its session token
- * to other processes to allow them to create a {@link MediaController2} to interact with the
+ * to other processes to allow them to create a {@link MediaController} to interact with the
  * session.
  * <p>
  * When a session receive transport control commands, the session sends the commands directly to
@@ -102,24 +102,24 @@
  * <a name="Thread"></a>
  * <h3>Thread</h3>
  * <p>
- * {@link MediaSession2} objects are thread safe, but should be used on the thread on the looper.
+ * {@link MediaSession} objects are thread safe, but should be used on the thread on the looper.
  * <a name="KeyEvents"></a>
  * <h3>Media key events mapping</h3>
  * <p>
  * Here's the table of per key event.
  * <table>
- * <tr><th>Key code</th><th>{@link MediaSession2} API</th></tr>
+ * <tr><th>Key code</th><th>{@link MediaSession} API</th></tr>
  * <tr><td>{@link KeyEvent#KEYCODE_MEDIA_PLAY}</td>
- *     <td>{@link SessionPlayer2#play()}</td></tr>
+ *     <td>{@link SessionPlayer#play()}</td></tr>
  * <tr><td>{@link KeyEvent#KEYCODE_MEDIA_PAUSE}</td>
- *     <td>{@link SessionPlayer2#pause()}</td></tr>
+ *     <td>{@link SessionPlayer#pause()}</td></tr>
  * <tr><td>{@link KeyEvent#KEYCODE_MEDIA_NEXT}</td>
- *     <td>{@link SessionPlayer2#skipToNextPlaylistItem()}</td></tr>
+ *     <td>{@link SessionPlayer#skipToNextPlaylistItem()}</td></tr>
  * <tr><td>{@link KeyEvent#KEYCODE_MEDIA_PREVIOUS}</td>
- *     <td>{@link SessionPlayer2#skipToPreviousPlaylistItem()}</td></tr>
+ *     <td>{@link SessionPlayer#skipToPreviousPlaylistItem()}</td></tr>
  * <tr><td>{@link KeyEvent#KEYCODE_MEDIA_STOP}</td>
- *     <td>{@link SessionPlayer2#pause()} and then
- *         {@link SessionPlayer2#seekTo(long)} with 0</td></tr>
+ *     <td>{@link SessionPlayer#pause()} and then
+ *         {@link SessionPlayer#seekTo(long)} with 0</td></tr>
  * <tr><td>{@link KeyEvent#KEYCODE_MEDIA_FAST_FORWARD}</td>
  *     <td>{@link SessionCallback#onFastForward}</td></tr>
  * <tr><td>{@link KeyEvent#KEYCODE_MEDIA_REWIND}</td>
@@ -127,45 +127,45 @@
  * <tr><td><ul><li>{@link KeyEvent#KEYCODE_MEDIA_PLAY_PAUSE}</li>
  *             <li>{@link KeyEvent#KEYCODE_HEADSETHOOK}</li></ul></td>
  *     <td><ul><li>For a single tap
- *             <ul><li>{@link SessionPlayer2#pause()} if
- *             {@link SessionPlayer2#PLAYER_STATE_PLAYING}</li>
- *             <li>{@link SessionPlayer2#play()} otherwise</li></ul>
- *             <li>For a double tap, {@link SessionPlayer2#skipToNextPlaylistItem()}</li></ul></td>
+ *             <ul><li>{@link SessionPlayer#pause()} if
+ *             {@link SessionPlayer#PLAYER_STATE_PLAYING}</li>
+ *             <li>{@link SessionPlayer#play()} otherwise</li></ul>
+ *             <li>For a double tap, {@link SessionPlayer#skipToNextPlaylistItem()}</li></ul></td>
  *     </tr>
  * </table>
- * @see MediaSessionService2
+ * @see MediaSessionService
  */
 @TargetApi(Build.VERSION_CODES.P)
-public class MediaSession2 implements AutoCloseable {
-    static final String TAG = "MediaSession2";
+public class MediaSession implements AutoCloseable {
+    static final String TAG = "MediaSession";
 
-    private final MediaSession2Impl mImpl;
+    private final MediaSessionImpl mImpl;
 
-    MediaSession2(Context context, String id, SessionPlayer2 player,
+    MediaSession(Context context, String id, SessionPlayer player,
             PendingIntent sessionActivity, Executor callbackExecutor, SessionCallback callback) {
         mImpl = createImpl(context, id, player, sessionActivity, callbackExecutor,
                 callback);
     }
 
-    MediaSession2Impl createImpl(Context context, String id, SessionPlayer2 player,
+    MediaSessionImpl createImpl(Context context, String id, SessionPlayer player,
             PendingIntent sessionActivity, Executor callbackExecutor, SessionCallback callback) {
-        return new MediaSession2ImplBase(this, context, id, player, sessionActivity,
+        return new MediaSessionImplBase(this, context, id, player, sessionActivity,
                 callbackExecutor, callback);
     }
 
     /**
      * Should be only used by subclass.
      */
-    MediaSession2Impl getImpl() {
+    MediaSessionImpl getImpl() {
         return mImpl;
     }
 
     /**
-     * Updates the underlying {@link SessionPlayer2} for this session to dispatch incoming event to.
+     * Updates the underlying {@link SessionPlayer} for this session to dispatch incoming event to.
      *
      * @param player a player that handles actual media playback in your app
      */
-    public void updatePlayer(@NonNull SessionPlayer2 player) {
+    public void updatePlayer(@NonNull SessionPlayer player) {
         if (player == null) {
             throw new IllegalArgumentException("player shouldn't be null");
         }
@@ -190,13 +190,13 @@
     }
 
     /**
-     * Gets the underlying {@link SessionPlayer2}.
+     * Gets the underlying {@link SessionPlayer}.
      * <p>
      * When the session is closed, it returns the lastly set player.
      *
      * @return player.
      */
-    public @NonNull SessionPlayer2 getPlayer() {
+    public @NonNull SessionPlayer getPlayer() {
         return mImpl.getPlayer();
     }
 
@@ -210,9 +210,9 @@
     }
 
     /**
-     * Returns the {@link SessionToken2} for creating {@link MediaController2}.
+     * Returns the {@link SessionToken} for creating {@link MediaController}.
      */
-    public @NonNull SessionToken2 getToken() {
+    public @NonNull SessionToken getToken() {
         return mImpl.getToken();
     }
 
@@ -260,7 +260,7 @@
      * </table>
      * <p>
      * This API can be called in the
-     * {@link SessionCallback#onConnect(MediaSession2, ControllerInfo)}.
+     * {@link SessionCallback#onConnect(MediaSession, ControllerInfo)}.
      *
      * @param controller controller to specify layout.
      * @param layout ordered list of layout.
@@ -281,14 +281,14 @@
      * <p>
      * This is synchronous call. Changes in the allowed commands take effect immediately regardless
      * of the controller notified about the change through
-     * {@link MediaController2.ControllerCallback
-     * #onAllowedCommandsChanged(MediaController2, SessionCommandGroup2)}
+     * {@link MediaController.ControllerCallback
+     * #onAllowedCommandsChanged(MediaController, SessionCommandGroup)}
      *
      * @param controller controller to change allowed commands
      * @param commands new allowed commands
      */
     public void setAllowedCommands(@NonNull ControllerInfo controller,
-            @NonNull SessionCommandGroup2 commands) {
+            @NonNull SessionCommandGroup commands) {
         if (controller == null) {
             throw new IllegalArgumentException("controller shouldn't be null");
         }
@@ -302,13 +302,13 @@
      * Broadcasts custom command to all connected controllers.
      * <p>
      * This is synchronous call and doesn't wait for result from the controller. Use
-     * {@link #sendCustomCommand(ControllerInfo, SessionCommand2, Bundle)} for getting the result.
+     * {@link #sendCustomCommand(ControllerInfo, SessionCommand, Bundle)} for getting the result.
      *
      * @param command a command
      * @param args optional argument
-     * @see #sendCustomCommand(ControllerInfo, SessionCommand2, Bundle)
+     * @see #sendCustomCommand(ControllerInfo, SessionCommand, Bundle)
      */
-    public void broadcastCustomCommand(@NonNull SessionCommand2 command, @Nullable Bundle args) {
+    public void broadcastCustomCommand(@NonNull SessionCommand command, @Nullable Bundle args) {
         if (command == null) {
             throw new IllegalArgumentException("command shouldn't be null");
         }
@@ -320,10 +320,10 @@
      *
      * @param command a command
      * @param args optional argument
-     * @see #broadcastCustomCommand(SessionCommand2, Bundle)
+     * @see #broadcastCustomCommand(SessionCommand, Bundle)
      */
     public @NonNull ListenableFuture<SessionResult> sendCustomCommand(
-            @NonNull ControllerInfo controller, @NonNull SessionCommand2 command,
+            @NonNull ControllerInfo controller, @NonNull SessionCommand command,
             @Nullable Bundle args) {
         if (controller == null) {
             throw new IllegalArgumentException("controller shouldn't be null");
@@ -335,24 +335,6 @@
     }
 
     /**
-     * Notify routes information to a connected controller
-     *
-     * @param controller controller information
-     * @param routes The routes information. Each bundle should be from {@link
-     *               androidx.mediarouter.media.MediaRouter.RouteInfo#getUniqueRouteDescriptorBundle
-     *               RouteInfo}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public void notifyRoutesInfoChanged(@NonNull ControllerInfo controller,
-            @Nullable List<Bundle> routes) {
-        if (controller == null) {
-            throw new IllegalArgumentException("controller shouldn't be null");
-        }
-        mImpl.notifyRoutesInfoChanged(controller, routes);
-    }
-
-    /**
      * @hide
      * @return Bundle
      */
@@ -362,14 +344,14 @@
     }
 
     /**
-     * Handles the controller's connection request from {@link MediaSessionService2}.
+     * Handles the controller's connection request from {@link MediaSessionService}.
      *
      * @param controller controller aidl
      * @param packageName controller package name
      * @param pid controller pid
      * @param uid controller uid
      */
-    void handleControllerConnectionFromService(IMediaController2 controller, String packageName,
+    void handleControllerConnectionFromService(IMediaController controller, String packageName,
             int pid, int uid) {
         mImpl.connectFromService(controller, packageName, pid, uid);
     }
@@ -379,7 +361,7 @@
     }
 
     /**
-     * Callback to be called for all incoming commands from {@link MediaController2}s.
+     * Callback to be called for all incoming commands from {@link MediaController}s.
      * <p>
      * If it's not set, the session will accept all controllers and all incoming commands by
      * default.
@@ -392,17 +374,17 @@
          * controller. By default it allows all connection requests and commands.
          * <p>
          * You can reject the connection by return {@code null}. In that case, controller receives
-         * {@link MediaController2.ControllerCallback#onDisconnected(MediaController2)} and cannot
+         * {@link MediaController.ControllerCallback#onDisconnected(MediaController)} and cannot
          * be usable.
          *
          * @param session the session for this event
          * @param controller controller information.
          * @return allowed commands. Can be {@code null} to reject connection.
          */
-        public @Nullable SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
+        public @Nullable SessionCommandGroup onConnect(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller) {
-            SessionCommandGroup2 commands = new SessionCommandGroup2.Builder()
-                    .addAllPredefinedCommands(SessionCommand2.COMMAND_VERSION_1)
+            SessionCommandGroup commands = new SessionCommandGroup.Builder()
+                    .addAllPredefinedCommands(SessionCommand.COMMAND_VERSION_1)
                     .build();
             return commands;
         }
@@ -413,14 +395,14 @@
          * @param session the session for this event
          * @param controller controller information
          */
-        public void onDisconnected(@NonNull MediaSession2 session,
+        public void onDisconnected(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller) { }
 
         /**
          * Called when a controller sent a command which will be sent directly to one of the
          * following:
          * <ul>
-         *  <li>{@link SessionPlayer2}</li>
+         *  <li>{@link SessionPlayer}</li>
          *  <li>{@link android.media.AudioManager}</li>
          * </ul>
          * <p>
@@ -433,42 +415,42 @@
          * @param command a command. This method will be called for every single command.
          * @return {@code RESULT_CODE_SUCCESS} if you want to proceed with incoming command.
          *         Another code for ignore.
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_PLAY
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_PAUSE
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_PREPARE
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_SEEK_TO
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_SET_REPEAT_MODE
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_GET_PLAYLIST
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_SET_PLAYLIST
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA
-         * @see SessionCommand2#COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA
-         * @see SessionCommand2#COMMAND_CODE_VOLUME_SET_VOLUME
-         * @see SessionCommand2#COMMAND_CODE_VOLUME_ADJUST_VOLUME
+         * @see SessionCommand#COMMAND_CODE_PLAYER_PLAY
+         * @see SessionCommand#COMMAND_CODE_PLAYER_PAUSE
+         * @see SessionCommand#COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM
+         * @see SessionCommand#COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM
+         * @see SessionCommand#COMMAND_CODE_PLAYER_PREPARE
+         * @see SessionCommand#COMMAND_CODE_PLAYER_SEEK_TO
+         * @see SessionCommand#COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM
+         * @see SessionCommand#COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE
+         * @see SessionCommand#COMMAND_CODE_PLAYER_SET_REPEAT_MODE
+         * @see SessionCommand#COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM
+         * @see SessionCommand#COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM
+         * @see SessionCommand#COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM
+         * @see SessionCommand#COMMAND_CODE_PLAYER_GET_PLAYLIST
+         * @see SessionCommand#COMMAND_CODE_PLAYER_SET_PLAYLIST
+         * @see SessionCommand#COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA
+         * @see SessionCommand#COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA
+         * @see SessionCommand#COMMAND_CODE_VOLUME_SET_VOLUME
+         * @see SessionCommand#COMMAND_CODE_VOLUME_ADJUST_VOLUME
          */
-        public @ResultCode int onCommandRequest(@NonNull MediaSession2 session,
-                @NonNull ControllerInfo controller, @NonNull SessionCommand2 command) {
+        public @ResultCode int onCommandRequest(@NonNull MediaSession session,
+                @NonNull ControllerInfo controller, @NonNull SessionCommand command) {
             return RESULT_CODE_SUCCESS;
         }
 
         /**
-         * Called when a controller has sent a command with a {@link MediaItem2} to add a new media
+         * Called when a controller has sent a command with a {@link MediaItem} to add a new media
          * item to this session. Being specific, this will be called for following APIs.
          * <ol>
-         * <li>{@link MediaController2#addPlaylistItem(int, String)}
-         * <li>{@link MediaController2#replacePlaylistItem(int, String)}
-         * <li>{@link MediaController2#setPlaylist(List, MediaMetadata2)}
-         * <li>{@link MediaController2#setMediaItem(String)}
+         * <li>{@link MediaController#addPlaylistItem(int, String)}
+         * <li>{@link MediaController#replacePlaylistItem(int, String)}
+         * <li>{@link MediaController#setPlaylist(List, MediaMetadata)}
+         * <li>{@link MediaController#setMediaItem(String)}
          * </ol>
-         * Override this to translate incoming {@code mediaId} to a {@link MediaItem2} to be
+         * Override this to translate incoming {@code mediaId} to a {@link MediaItem} to be
          * understood by your player. For example, a player may only understand
-         * {@link FileMediaItem2}, {@link UriMediaItem2}, and {@link CallbackMediaItem2}. Check the
+         * {@link FileMediaItem}, {@link UriMediaItem}, and {@link CallbackMediaItem}. Check the
          * documentation of the player that you're using.
          * <p>
          * If the given media ID is valid, you should return the media item with the given media ID.
@@ -481,7 +463,7 @@
          * <tr><td>replacePlaylistItem</td> <td>Ignore</td></tr>
          * <tr><td>setPlaylist</td>
          *     <td>Ignore {@code null} items, and build a list with non-{@code null} items. Call
-         *         {@link SessionPlayer2#setPlaylist(List, MediaMetadata2)} with the list</td></tr>
+         *         {@link SessionPlayer#setPlaylist(List, MediaMetadata)} with the list</td></tr>
          * <tr><td>setMediaItem</td> <td>Ignore</td></tr>
          * </table>
          * <p>
@@ -494,19 +476,19 @@
          * @param controller controller information
          * @param mediaId non-empty media id for creating item with
          * @return translated media item for player with the mediaId. Can be {@code null} to ignore.
-         * @see MediaMetadata2#METADATA_KEY_MEDIA_ID
+         * @see MediaMetadata#METADATA_KEY_MEDIA_ID
          */
-        public @Nullable MediaItem2 onCreateMediaItem(@NonNull MediaSession2 session,
+        public @Nullable MediaItem onCreateMediaItem(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull String mediaId) {
             return null;
         }
 
         /**
          * Called when a controller set rating of a media item through
-         * {@link MediaController2#setRating(String, Rating2)}.
+         * {@link MediaController#setRating(String, Rating)}.
          * <p>
-         * To allow setting user rating for a {@link MediaItem2}, the media item's metadata
-         * should have {@link Rating2} with the key {@link MediaMetadata2#METADATA_KEY_USER_RATING},
+         * To allow setting user rating for a {@link MediaItem}, the media item's metadata
+         * should have {@link Rating} with the key {@link MediaMetadata#METADATA_KEY_USER_RATING},
          * in order to provide possible rating style for controller. Controller will follow the
          * rating style.
          *
@@ -514,17 +496,17 @@
          * @param controller controller information
          * @param mediaId non-empty media id
          * @param rating new rating from the controller
-         * @see SessionCommand2#COMMAND_CODE_SESSION_SET_RATING
+         * @see SessionCommand#COMMAND_CODE_SESSION_SET_RATING
          */
-        public @ResultCode int onSetRating(@NonNull MediaSession2 session,
+        public @ResultCode int onSetRating(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull String mediaId,
-                @NonNull Rating2 rating) {
+                @NonNull Rating rating) {
             return RESULT_CODE_NOT_SUPPORTED;
         }
 
         /**
          * Called when a controller sent a custom command through
-         * {@link MediaController2#sendCustomCommand(SessionCommand2, Bundle)}.
+         * {@link MediaController#sendCustomCommand(SessionCommand, Bundle)}.
          * <p>
          * Interoperability: This would be also called by {@link
          * android.support.v4.media.MediaBrowserCompat
@@ -537,27 +519,28 @@
          * @param args optional arguments
          * @return result of handling custom command. A runtime exception will be thrown if
          *         {@code null} is returned.
-         * @see SessionCommand2#COMMAND_CODE_CUSTOM
+         * @see SessionCommand#COMMAND_CODE_CUSTOM
          */
-        public @NonNull SessionResult onCustomCommand(@NonNull MediaSession2 session,
-                @NonNull ControllerInfo controller, @NonNull SessionCommand2 customCommand,
+        public @NonNull SessionResult onCustomCommand(@NonNull MediaSession session,
+                @NonNull ControllerInfo controller, @NonNull SessionCommand customCommand,
                 @Nullable Bundle args) {
             return new SessionResult(RESULT_CODE_NOT_SUPPORTED, null);
         }
 
         /**
          * Called when a controller requested to play a specific mediaId through
-         * {@link MediaController2#playFromMediaId(String, Bundle)}.
+         * {@link MediaController#playFromMediaId(String, Bundle)}.
          *
          * @param session the session for this event
          * @param controller controller information
          * @param mediaId non-empty media id
          * @param extras optional extra bundle
-         * @see SessionCommand2#COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID
+         * @see SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onPlayFromMediaId(@NonNull MediaSession2 session,
+        @ResultCode
+        public int onPlayFromMediaId(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull String mediaId,
                 @Nullable Bundle extras) {
             return RESULT_CODE_NOT_SUPPORTED;
@@ -565,17 +548,18 @@
 
         /**
          * Called when a controller requested to begin playback from a search query through
-         * {@link MediaController2#playFromSearch(String, Bundle)}
+         * {@link MediaController#playFromSearch(String, Bundle)}
          *
          * @param session the session for this event
          * @param controller controller information
          * @param query non-empty search query.
          * @param extras optional extra bundle
-         * @see SessionCommand2#COMMAND_CODE_SESSION_PLAY_FROM_SEARCH
+         * @see SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_SEARCH
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onPlayFromSearch(@NonNull MediaSession2 session,
+        @ResultCode
+        public int onPlayFromSearch(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull String query,
                 @Nullable Bundle extras) {
             return RESULT_CODE_NOT_SUPPORTED;
@@ -583,17 +567,18 @@
 
         /**
          * Called when a controller requested to play a specific media item represented by a URI
-         * through {@link MediaController2#playFromUri(Uri, Bundle)}
+         * through {@link MediaController#playFromUri(Uri, Bundle)}
          *
          * @param session the session for this event
          * @param controller controller information
          * @param uri uri
          * @param extras optional extra bundle
-         * @see SessionCommand2#COMMAND_CODE_SESSION_PLAY_FROM_URI
+         * @see SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_URI
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onPlayFromUri(@NonNull MediaSession2 session,
+        @ResultCode
+        public int onPlayFromUri(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull Uri uri,
                 @Nullable Bundle extras) {
             return RESULT_CODE_NOT_SUPPORTED;
@@ -601,14 +586,14 @@
 
         /**
          * Called when a controller requested to prepare for playing a specific mediaId through
-         * {@link MediaController2#prepareFromMediaId(String, Bundle)}.
+         * {@link MediaController#prepareFromMediaId(String, Bundle)}.
          * <p>
          * During the prepare, a session should not hold audio focus in order to allow
          * other sessions play seamlessly. The state of playback should be updated to
-         * {@link SessionPlayer2#PLAYER_STATE_PAUSED} after the prepare is done.
+         * {@link SessionPlayer#PLAYER_STATE_PAUSED} after the prepare is done.
          * <p>
          * The playback of the prepared content should start in the later calls of
-         * {@link SessionPlayer2#play()}.
+         * {@link SessionPlayer#play()}.
          * <p>
          * Override {@link #onPlayFromMediaId} to handle requests for starting
          * playback without preparation.
@@ -617,11 +602,12 @@
          * @param controller controller information
          * @param mediaId non-empty media id
          * @param extras optional extra bundle
-         * @see SessionCommand2#COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID
+         * @see SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onPrepareFromMediaId(@NonNull MediaSession2 session,
+        @ResultCode
+        public int onPrepareFromMediaId(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull String mediaId,
                 @Nullable Bundle extras) {
             return RESULT_CODE_NOT_SUPPORTED;
@@ -629,14 +615,14 @@
 
         /**
          * Called when a controller requested to prepare playback from a search query through
-         * {@link MediaController2#prepareFromSearch(String, Bundle)}.
+         * {@link MediaController#prepareFromSearch(String, Bundle)}.
          * <p>
          * During the prepare, a session should not hold audio focus in order to allow
          * other sessions play seamlessly. The state of playback should be updated to
-         * {@link SessionPlayer2#PLAYER_STATE_PAUSED} after the prepare is done.
+         * {@link SessionPlayer#PLAYER_STATE_PAUSED} after the prepare is done.
          * <p>
          * The playback of the prepared content should start in the later calls of
-         * {@link SessionPlayer2#play()}.
+         * {@link SessionPlayer#play()}.
          * <p>
          * Override {@link #onPlayFromSearch} to handle requests for starting playback without
          * preparation.
@@ -645,11 +631,12 @@
          * @param controller controller information
          * @param query non-empty search query
          * @param extras optional extra bundle
-         * @see SessionCommand2#COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH
+         * @see SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onPrepareFromSearch(@NonNull MediaSession2 session,
+        @ResultCode
+        public int onPrepareFromSearch(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull String query,
                 @Nullable Bundle extras) {
             return RESULT_CODE_NOT_SUPPORTED;
@@ -657,14 +644,14 @@
 
         /**
          * Called when a controller requested to prepare a specific media item represented by a URI
-         * through {@link MediaController2#prepareFromUri(Uri, Bundle)}.
+         * through {@link MediaController#prepareFromUri(Uri, Bundle)}.
          * <p>
          * During the prepare, a session should not hold audio focus in order to allow
          * other sessions play seamlessly. The state of playback should be updated to
-         * {@link SessionPlayer2#PLAYER_STATE_PAUSED} after the prepare is done.
+         * {@link SessionPlayer#PLAYER_STATE_PAUSED} after the prepare is done.
          * <p>
          * The playback of the prepared content should start in the later calls of
-         * {@link SessionPlayer2#play()}.
+         * {@link SessionPlayer#play()}.
          * <p>
          * Override {@link #onPlayFromUri} to handle requests for starting playback without
          * preparation.
@@ -673,132 +660,85 @@
          * @param controller controller information
          * @param uri uri
          * @param extras optional extra bundle
-         * @see SessionCommand2#COMMAND_CODE_SESSION_PREPARE_FROM_URI
+         * @see SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_URI
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onPrepareFromUri(@NonNull MediaSession2 session,
+        @ResultCode
+        public int onPrepareFromUri(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller, @NonNull Uri uri, @Nullable Bundle extras) {
             return RESULT_CODE_NOT_SUPPORTED;
         }
 
         /**
-         * Called when a controller called {@link MediaController2#fastForward()}.
+         * Called when a controller called {@link MediaController#fastForward()}.
          * <p>
          * It's recommended to increase the playback speed when this method is called.
          *
          * @param session the session for this event
          * @param controller controller information
-         * @see SessionCommand2#COMMAND_CODE_SESSION_FAST_FORWARD
+         * @see SessionCommand#COMMAND_CODE_SESSION_FAST_FORWARD
          */
-        public @ResultCode int onFastForward(@NonNull MediaSession2 session,
+        public @ResultCode int onFastForward(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller) {
             return RESULT_CODE_NOT_SUPPORTED;
         }
 
         /**
-         * Called when a controller called {@link MediaController2#rewind()}.
+         * Called when a controller called {@link MediaController#rewind()}.
          * <p>
          * It's recommended to decrease the playback speed when this method is called.
          *
          * @param session the session for this event
          * @param controller controller information
-         * @see SessionCommand2#COMMAND_CODE_SESSION_REWIND
+         * @see SessionCommand#COMMAND_CODE_SESSION_REWIND
          */
-        public @ResultCode int onRewind(@NonNull MediaSession2 session,
+        public @ResultCode int onRewind(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller) {
             return RESULT_CODE_NOT_SUPPORTED;
         }
 
         /**
-         * Called when a controller called {@link MediaController2#skipForward()}.
+         * Called when a controller called {@link MediaController#skipForward()}.
          * <p>
          * It's recommended to seek forward within the current media item when this method
          * is called.
          *
          * @param session the session for this event
          * @param controller controller information
-         * @see SessionCommand2#COMMAND_CODE_SESSION_SKIP_FORWARD
+         * @see SessionCommand#COMMAND_CODE_SESSION_SKIP_FORWARD
          */
-        public @ResultCode int onSkipForward(@NonNull MediaSession2 session,
+        public @ResultCode int onSkipForward(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller) {
             return RESULT_CODE_NOT_SUPPORTED;
         }
 
         /**
-         * Called when a controller called {@link MediaController2#skipBackward()}.
+         * Called when a controller called {@link MediaController#skipBackward()}.
          * <p>
          * It's recommended to seek backward within the current media item when this method
          * is called.
          *
          * @param session the session for this event
          * @param controller controller information
-         * @see SessionCommand2#COMMAND_CODE_SESSION_SKIP_BACKWARD
+         * @see SessionCommand#COMMAND_CODE_SESSION_SKIP_BACKWARD
          */
-        public @ResultCode int onSkipBackward(@NonNull MediaSession2 session,
+        public @ResultCode int onSkipBackward(@NonNull MediaSession session,
                 @NonNull ControllerInfo controller) {
             return RESULT_CODE_NOT_SUPPORTED;
         }
 
         /**
-         * Called when a controller called {@link MediaController2#subscribeRoutesInfo()}
-         * Session app should notify the routes information by calling
-         * {@link MediaSession2#notifyRoutesInfoChanged(ControllerInfo, List)}.
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @see SessionCommand2#COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO
-         * @hide
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onSubscribeRoutesInfo(@NonNull MediaSession2 session,
-                @NonNull ControllerInfo controller) {
-            return RESULT_CODE_NOT_SUPPORTED;
-        }
-
-        /**
-         * Called when a controller called {@link MediaController2#unsubscribeRoutesInfo()}
-         *
-         * @param session the session for this event
-         * @param controller controller information
-         * @see SessionCommand2#COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO
-         * @hide
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onUnsubscribeRoutesInfo(@NonNull MediaSession2 session,
-                @NonNull ControllerInfo controller) {
-            return RESULT_CODE_NOT_SUPPORTED;
-        }
-
-        /**
-         * Called when a controller called {@link MediaController2#selectRoute(Bundle)}.
-         * @param session the session for this event
-         * @param controller controller information
-         * @param route The route bundle from {@link
-         *              androidx.mediarouter.media.MediaRouter.RouteInfo
-         *              #getUniqueRouteDescriptorBundle RouteInfo}
-         * @see SessionCommand2#COMMAND_CODE_SESSION_SELECT_ROUTE
-         * @see androidx.mediarouter.media.MediaRouter.RouteInfo#getUniqueRouteDescriptorBundle
-         * @see androidx.mediarouter.media.MediaRouter#getRoute
-         * @hide
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public @ResultCode int onSelectRoute(@NonNull MediaSession2 session,
-                @NonNull ControllerInfo controller, @NonNull Bundle route) {
-            return RESULT_CODE_NOT_SUPPORTED;
-        }
-
-        /**
          * Called when the player state is changed. Used internally for setting the
-         * {@link MediaSessionService2} as foreground/background.
+         * {@link MediaSessionService} as foreground/background.
          */
-        final void onPlayerStateChanged(MediaSession2 session, @PlayerState int state) {
+        final void onPlayerStateChanged(MediaSession session, @PlayerState int state) {
             if (mForegroundServiceEventCallback != null) {
                 mForegroundServiceEventCallback.onPlayerStateChanged(session, state);
             }
         }
 
-        final void onSessionClosed(MediaSession2 session) {
+        final void onSessionClosed(MediaSession session) {
             if (mForegroundServiceEventCallback != null) {
                 mForegroundServiceEventCallback.onSessionClosed(session);
             }
@@ -809,19 +749,19 @@
         }
 
         abstract static class ForegroundServiceEventCallback {
-            public void onPlayerStateChanged(MediaSession2 session, @PlayerState int state) { }
-            public void onSessionClosed(MediaSession2 session) { }
+            public void onPlayerStateChanged(MediaSession session, @PlayerState int state) { }
+            public void onSessionClosed(MediaSession session) { }
         }
     }
 
     /**
-     * Builder for {@link MediaSession2}.
+     * Builder for {@link MediaSession}.
      * <p>
-     * Any incoming event from the {@link MediaController2} will be handled on the thread
+     * Any incoming event from the {@link MediaController} will be handled on the thread
      * that created session with the {@link Builder#build()}.
      */
-    public static final class Builder extends BuilderBase<MediaSession2, Builder, SessionCallback> {
-        public Builder(@NonNull Context context, @NonNull SessionPlayer2 player) {
+    public static final class Builder extends BuilderBase<MediaSession, Builder, SessionCallback> {
+        public Builder(@NonNull Context context, @NonNull SessionPlayer player) {
             super(context, player);
         }
 
@@ -836,20 +776,21 @@
         }
 
         @Override
-        public @NonNull Builder setSessionCallback(@NonNull Executor executor,
+        @NonNull
+        public Builder setSessionCallback(@NonNull Executor executor,
                 @NonNull SessionCallback callback) {
             return super.setSessionCallback(executor, callback);
         }
 
         @Override
-        public @NonNull MediaSession2 build() {
+        public @NonNull MediaSession build() {
             if (mCallbackExecutor == null) {
                 mCallbackExecutor = ContextCompat.getMainExecutor(mContext);
             }
             if (mCallback == null) {
                 mCallback = new SessionCallback() {};
             }
-            return new MediaSession2(mContext, mId, mPlayer, mSessionActivity,
+            return new MediaSession(mContext, mId, mPlayer, mSessionActivity,
                     mCallbackExecutor, mCallback);
         }
     }
@@ -866,7 +807,7 @@
          * @param remoteUserInfo remote user info
          * @param trusted {@code true} if trusted, {@code false} otherwise
          * @param cb ControllerCb. Can be {@code null} only when a MediaBrowserCompat connects to
-         *           MediaSessionService2 and ControllerInfo is needed for
+         *           MediaSessionService and ControllerInfo is needed for
          *           SessionCallback#onConnected().
          * @hide
          */
@@ -947,26 +888,18 @@
     }
 
     /**
-     * Button for a {@link SessionCommand2} that will be shown by the controller.
+     * Button for a {@link SessionCommand} that will be shown by the controller.
      * <p>
      * It's up to the controller's decision to respect or ignore this customization request.
      */
     @VersionedParcelize
     public static final class CommandButton implements VersionedParcelable {
-        private static final String KEY_COMMAND = "android.media.session2.command_button.command";
-        private static final String KEY_ICON_RES_ID =
-                "android.media.session2.command_button.icon_res_id";
-        private static final String KEY_DISPLAY_NAME =
-                "android.media.session2.command_button.display_name";
-        private static final String KEY_EXTRAS = "android.media.session2.command_button.extras";
-        private static final String KEY_ENABLED = "android.media.session2.command_button.enabled";
-
         @ParcelField(1)
-        SessionCommand2 mCommand;
+        SessionCommand mCommand;
         @ParcelField(2)
         int mIconResId;
         @ParcelField(3)
-        String mDisplayName;
+        CharSequence mDisplayName;
         @ParcelField(4)
         Bundle mExtras;
         @ParcelField(5)
@@ -978,8 +911,8 @@
         CommandButton() {
         }
 
-        CommandButton(@Nullable SessionCommand2 command, int iconResId,
-                @Nullable String displayName, Bundle extras, boolean enabled) {
+        CommandButton(@Nullable SessionCommand command, int iconResId,
+                @Nullable CharSequence displayName, Bundle extras, boolean enabled) {
             mCommand = command;
             mIconResId = iconResId;
             mDisplayName = displayName;
@@ -993,7 +926,7 @@
          *
          * @return command or {@code null}
          */
-        public @Nullable SessionCommand2 getCommand() {
+        public @Nullable SessionCommand getCommand() {
             return mCommand;
         }
 
@@ -1013,7 +946,7 @@
          *
          * @return custom display name. Can be {@code null} or empty.
          */
-        public @Nullable String getDisplayName() {
+        public @Nullable CharSequence getDisplayName() {
             return mDisplayName;
         }
 
@@ -1036,60 +969,22 @@
         }
 
         /**
-         * @hide
-         * @return Bundle
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public @NonNull Bundle toBundle() {
-            Bundle bundle = new Bundle();
-            bundle.putBundle(KEY_COMMAND, mCommand.toBundle());
-            bundle.putInt(KEY_ICON_RES_ID, mIconResId);
-            bundle.putString(KEY_DISPLAY_NAME, mDisplayName);
-            bundle.putBundle(KEY_EXTRAS, mExtras);
-            bundle.putBoolean(KEY_ENABLED, mEnabled);
-            return bundle;
-        }
-
-        /**
-         * @hide
-         * @return CommandButton
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public static @Nullable CommandButton fromBundle(Bundle bundle) {
-            if (bundle == null) {
-                return null;
-            }
-            CommandButton.Builder builder = new CommandButton.Builder();
-            builder.setCommand(SessionCommand2.fromBundle(bundle.getBundle(KEY_COMMAND)));
-            builder.setIconResId(bundle.getInt(KEY_ICON_RES_ID, 0));
-            builder.setDisplayName(bundle.getString(KEY_DISPLAY_NAME));
-            builder.setExtras(bundle.getBundle(KEY_EXTRAS));
-            builder.setEnabled(bundle.getBoolean(KEY_ENABLED));
-            try {
-                return builder.build();
-            } catch (IllegalStateException e) {
-                // Malformed or version mismatch. Return null for now.
-                return null;
-            }
-        }
-
-        /**
          * Builder for {@link CommandButton}.
          */
         public static final class Builder {
-            private SessionCommand2 mCommand;
+            private SessionCommand mCommand;
             private int mIconResId;
-            private String mDisplayName;
+            private CharSequence mDisplayName;
             private Bundle mExtras;
             private boolean mEnabled;
 
             /**
-             * Sets the {@link SessionCommand2} that would be sent to the session when the button
+             * Sets the {@link SessionCommand} that would be sent to the session when the button
              * is clicked.
              *
              * @param command session command
              */
-            public @NonNull Builder setCommand(@Nullable SessionCommand2 command) {
+            public @NonNull Builder setCommand(@Nullable SessionCommand command) {
                 mCommand = command;
                 return this;
             }
@@ -1098,7 +993,7 @@
              * Sets the bitmap-type (e.g. PNG) icon resource id of the button.
              * <p>
              * None bitmap type (e.g. VectorDrawabale) may cause unexpected behavior when it's sent
-             * to {@link MediaController2} app, so please avoid using it especially for the older
+             * to {@link MediaController} app, so please avoid using it especially for the older
              * platform (API < 21).
              *
              * @param resId resource id of the button
@@ -1113,7 +1008,7 @@
              *
              * @param displayName display name of the button
              */
-            public @NonNull Builder setDisplayName(@Nullable String displayName) {
+            public @NonNull Builder setDisplayName(@Nullable CharSequence displayName) {
                 mDisplayName = displayName;
                 return this;
             }
@@ -1157,64 +1052,61 @@
         abstract void onSessionResult(int seq, SessionResult result) throws RemoteException;
         abstract void onLibraryResult(int seq, LibraryResult result) throws RemoteException;
 
-        // Mostly matched with the methods in MediaController2.ControllerCallback
+        // Mostly matched with the methods in MediaController.ControllerCallback
         abstract void setCustomLayout(int seq, @NonNull List<CommandButton> layout)
                 throws RemoteException;
-        abstract void sendCustomCommand(int seq, @NonNull SessionCommand2 command,
+        abstract void sendCustomCommand(int seq, @NonNull SessionCommand command,
                 @Nullable Bundle args) throws RemoteException;
         abstract void onPlaybackInfoChanged(@NonNull PlaybackInfo info) throws RemoteException;
-        abstract void onAllowedCommandsChanged(@NonNull SessionCommandGroup2 commands)
+        abstract void onAllowedCommandsChanged(@NonNull SessionCommandGroup commands)
                 throws RemoteException;
         abstract void onPlayerStateChanged(long eventTimeMs, long positionMs, int playerState)
                 throws RemoteException;
         abstract void onPlaybackSpeedChanged(long eventTimeMs, long positionMs, float speed)
                 throws RemoteException;
-        abstract void onBufferingStateChanged(@NonNull MediaItem2 item,
+        abstract void onBufferingStateChanged(@NonNull MediaItem item,
                 @BuffState int bufferingState, long bufferedPositionMs) throws RemoteException;
         abstract void onSeekCompleted(long eventTimeMs, long positionMs, long position)
                 throws RemoteException;
-        abstract void onCurrentMediaItemChanged(@Nullable MediaItem2 item) throws RemoteException;
-        abstract void onPlaylistChanged(@NonNull List<MediaItem2> playlist,
-                @Nullable MediaMetadata2 metadata) throws RemoteException;
-        abstract void onPlaylistMetadataChanged(@Nullable MediaMetadata2 metadata)
+        abstract void onCurrentMediaItemChanged(@Nullable MediaItem item) throws RemoteException;
+        abstract void onPlaylistChanged(@NonNull List<MediaItem> playlist,
+                @Nullable MediaMetadata metadata) throws RemoteException;
+        abstract void onPlaylistMetadataChanged(@Nullable MediaMetadata metadata)
                 throws RemoteException;
-        abstract void onShuffleModeChanged(@SessionPlayer2.ShuffleMode int shuffleMode)
+        abstract void onShuffleModeChanged(@SessionPlayer.ShuffleMode int shuffleMode)
                 throws RemoteException;
-        abstract void onRepeatModeChanged(@SessionPlayer2.RepeatMode int repeatMode)
+        abstract void onRepeatModeChanged(@SessionPlayer.RepeatMode int repeatMode)
                 throws RemoteException;
         abstract void onPlaybackCompleted() throws RemoteException;
-        abstract void onRoutesInfoChanged(@Nullable List<Bundle> routes) throws RemoteException;
         abstract void onDisconnected() throws RemoteException;
 
-        // Mostly matched with the methods in MediaBrowser2.BrowserCallback.
+        // Mostly matched with the methods in MediaBrowser.BrowserCallback.
         abstract void onChildrenChanged(@NonNull String parentId, int itemCount,
                 @Nullable LibraryParams params) throws RemoteException;
         abstract void onSearchResultChanged(@NonNull String query, int itemCount,
                 @Nullable LibraryParams params) throws RemoteException;
     }
 
-    interface MediaSession2Impl extends MediaInterface2.SessionPlayer, AutoCloseable {
-        void updatePlayer(@NonNull SessionPlayer2 player,
-                @Nullable SessionPlayer2 playlistAgent);
-        void updatePlayer(@NonNull SessionPlayer2 player);
-        @NonNull SessionPlayer2 getPlayer();
+    interface MediaSessionImpl extends MediaInterface.SessionPlayer, AutoCloseable {
+        void updatePlayer(@NonNull SessionPlayer player,
+                @Nullable SessionPlayer playlistAgent);
+        void updatePlayer(@NonNull SessionPlayer player);
+        @NonNull SessionPlayer getPlayer();
         @NonNull String getId();
-        @NonNull SessionToken2 getToken();
+        @NonNull SessionToken getToken();
         @NonNull List<ControllerInfo> getConnectedControllers();
         boolean isConnected(@NonNull ControllerInfo controller);
 
         ListenableFuture<SessionResult> setCustomLayout(@NonNull ControllerInfo controller,
                 @NonNull List<CommandButton> layout);
         void setAllowedCommands(@NonNull ControllerInfo controller,
-                @NonNull SessionCommandGroup2 commands);
-        void broadcastCustomCommand(@NonNull SessionCommand2 command, @Nullable Bundle args);
+                @NonNull SessionCommandGroup commands);
+        void broadcastCustomCommand(@NonNull SessionCommand command, @Nullable Bundle args);
         ListenableFuture<SessionResult> sendCustomCommand(@NonNull ControllerInfo controller,
-                @NonNull SessionCommand2 command, @Nullable Bundle args);
-        void notifyRoutesInfoChanged(@NonNull ControllerInfo controller,
-                @Nullable List<Bundle> routes);
+                @NonNull SessionCommand command, @Nullable Bundle args);
 
         // Internally used methods
-        MediaSession2 getInstance();
+        MediaSession getInstance();
         MediaSessionCompat getSessionCompat();
         Context getContext();
         Executor getCallbackExecutor();
@@ -1224,13 +1116,13 @@
         PlaybackInfo getPlaybackInfo();
         PendingIntent getSessionActivity();
         IBinder getLegacyBrowserServiceBinder();
-        void connectFromService(IMediaController2 caller, String packageName, int pid, int uid);
+        void connectFromService(IMediaController caller, String packageName, int pid, int uid);
     }
 
     /**
-     * Base builder class for MediaSession2 and its subclass. Any change in this class should be
-     * also applied to the subclasses {@link MediaSession2.Builder} and
-     * {@link MediaLibraryService2.MediaLibrarySession.Builder}.
+     * Base builder class for MediaSession and its subclass. Any change in this class should be
+     * also applied to the subclasses {@link MediaSession.Builder} and
+     * {@link MediaLibraryService.MediaLibrarySession.Builder}.
      * <p>
      * APIs here should be package private, but should have documentations for developers.
      * Otherwise, javadoc will generate documentation with the generic types such as follows.
@@ -1239,22 +1131,22 @@
      * This class is hidden to prevent from generating test stub, which fails with
      * 'unexpected bound' because it tries to auto generate stub class as follows.
      * <pre>abstract static class BuilderBase<
-     *      T extends android.media.MediaSession2,
-     *      U extends android.media.MediaSession2.BuilderBase<
-     *              T, U, C extends android.media.MediaSession2.SessionCallback>, C></pre>
+     *      T extends androidx.media2.MediaSession,
+     *      U extends androidx.media2.MediaSession.BuilderBase<
+     *              T, U, C extends androidx.media2.MediaSession.SessionCallback>, C></pre>
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
     abstract static class BuilderBase
-            <T extends MediaSession2, U extends BuilderBase<T, U, C>, C extends SessionCallback> {
+            <T extends MediaSession, U extends BuilderBase<T, U, C>, C extends SessionCallback> {
         final Context mContext;
-        SessionPlayer2 mPlayer;
+        SessionPlayer mPlayer;
         String mId;
         Executor mCallbackExecutor;
         C mCallback;
         PendingIntent mSessionActivity;
 
-        BuilderBase(@NonNull Context context, @NonNull SessionPlayer2 player) {
+        BuilderBase(@NonNull Context context, @NonNull SessionPlayer player) {
             if (context == null) {
                 throw new IllegalArgumentException("context shouldn't be null");
             }
@@ -1317,7 +1209,7 @@
         }
 
         /**
-         * Build {@link MediaSession2}.
+         * Build {@link MediaSession}.
          *
          * @return a new session
          * @throws IllegalStateException if the session with the same id is already exists for the
@@ -1331,7 +1223,7 @@
      */
     // Specify full name to avoid build error 'cannot find symbol' for versioned parcelable.
     @androidx.versionedparcelable.VersionedParcelize
-    public static class SessionResult implements RemoteResult2,
+    public static class SessionResult implements RemoteResult,
             androidx.versionedparcelable.VersionedParcelable {
         /**
          * @hide
@@ -1364,11 +1256,11 @@
         @ParcelField(3)
         Bundle mCustomCommandResult;
         @ParcelField(4)
-        MediaItem2 mItem;
+        MediaItem mItem;
 
         /**
          * Constructor to be used by {@link SessionCallback#onCustomCommand(
-         * MediaSession2, ControllerInfo, SessionCommand2, Bundle)}.
+         * MediaSession, ControllerInfo, SessionCommand, Bundle)}.
          *
          * @param resultCode result code
          * @param customCommandResult custom command result.
@@ -1387,7 +1279,7 @@
         }
 
         SessionResult(@ResultCode int resultCode, @Nullable Bundle customCommandResult,
-                @Nullable MediaItem2 item, long completionTime) {
+                @Nullable MediaItem item, long completionTime) {
             mResultCode = resultCode;
             mCustomCommandResult = customCommandResult;
             mItem = item;
@@ -1443,12 +1335,12 @@
         }
 
         /**
-         * Gets the result of {@link #sendCustomCommand(ControllerInfo, SessionCommand2, Bundle)}.
+         * Gets the result of {@link #sendCustomCommand(ControllerInfo, SessionCommand, Bundle)}.
          * This is only valid when it's returned by the
-         * {@link #sendCustomCommand(ControllerInfo, SessionCommand2, Bundle)} and will be
+         * {@link #sendCustomCommand(ControllerInfo, SessionCommand, Bundle)} and will be
          * {@code null} otherwise.
          *
-         * @see #sendCustomCommand(ControllerInfo, SessionCommand2, Bundle)
+         * @see #sendCustomCommand(ControllerInfo, SessionCommand, Bundle)
          * @return result of send custom command
          */
         public @Nullable Bundle getCustomCommandResult() {
@@ -1471,7 +1363,7 @@
          */
         @RestrictTo(LIBRARY)
         @Override
-        public MediaItem2 getMediaItem() {
+        public MediaItem getMediaItem() {
             return mItem;
         }
     }
diff --git a/media2/src/main/java/androidx/media2/MediaSession2ImplBase.java b/media2/src/main/java/androidx/media2/MediaSessionImplBase.java
similarity index 81%
rename from media2/src/main/java/androidx/media2/MediaSession2ImplBase.java
rename to media2/src/main/java/androidx/media2/MediaSessionImplBase.java
index e02d881..fa81ade 100644
--- a/media2/src/main/java/androidx/media2/MediaSession2ImplBase.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionImplBase.java
@@ -16,19 +16,24 @@
 
 package androidx.media2;
 
-import static androidx.media2.BaseResult2.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.MediaSession2.ControllerCb;
-import static androidx.media2.MediaSession2.ControllerInfo;
-import static androidx.media2.MediaSession2.SessionCallback;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_DISCONNECTED;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SKIPPED;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_UNKNOWN_ERROR;
-import static androidx.media2.MediaUtils2.DIRECT_EXECUTOR;
-import static androidx.media2.SessionPlayer2.PLAYER_STATE_IDLE;
-import static androidx.media2.SessionPlayer2.UNKNOWN_TIME;
-import static androidx.media2.SessionToken2.TYPE_SESSION;
+import static androidx.media2.BaseResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_NONE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_BROWSABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DURATION;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_ID;
+import static androidx.media2.MediaMetadata.METADATA_KEY_PLAYABLE;
+import static androidx.media2.MediaSession.ControllerCb;
+import static androidx.media2.MediaSession.ControllerInfo;
+import static androidx.media2.MediaSession.SessionCallback;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_DISCONNECTED;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SKIPPED;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.MediaUtils.DIRECT_EXECUTOR;
+import static androidx.media2.SessionPlayer.PLAYER_STATE_IDLE;
+import static androidx.media2.SessionPlayer.UNKNOWN_TIME;
+import static androidx.media2.SessionToken.TYPE_SESSION;
 
 import android.annotation.SuppressLint;
 import android.app.PendingIntent;
@@ -59,11 +64,11 @@
 import androidx.media.AudioAttributesCompat;
 import androidx.media.MediaBrowserServiceCompat;
 import androidx.media.VolumeProviderCompat;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaSession2.MediaSession2Impl;
-import androidx.media2.MediaSession2.SessionResult;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaSession.MediaSessionImpl;
+import androidx.media2.MediaSession.SessionResult;
 import androidx.media2.SequencedFutureManager.SequencedFuture;
-import androidx.media2.SessionPlayer2.PlayerResult;
+import androidx.media2.SessionPlayer.PlayerResult;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -73,16 +78,16 @@
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicInteger;
 
-class MediaSession2ImplBase implements MediaSession2Impl {
-    private static final String DEFAULT_MEDIA_SESSION_TAG_PREFIX = "android.media.session2.id";
+class MediaSessionImplBase implements MediaSessionImpl {
+    private static final String DEFAULT_MEDIA_SESSION_TAG_PREFIX = "androidx.media2.session.id";
     private static final String DEFAULT_MEDIA_SESSION_TAG_DELIM = ".";
 
-    static final String TAG = "MS2ImplBase";
+    static final String TAG = "MSImplBase";
     static final boolean DEBUG = true; //Log.isLoggable(TAG, Log.DEBUG);
 
     // Note: This checks the uniqueness of a session ID only in single process.
     // When the framework becomes able to check the uniqueness, this logic should be removed.
-    @GuardedBy("MediaSession2ImplBase.class")
+    @GuardedBy("MediaSessionImplBase.class")
     private static final List<String> SESSION_ID_LIST = new ArrayList<>();
 
     private static final SessionResult RESULT_WHEN_CLOSED = new SessionResult(RESULT_CODE_SKIPPED);
@@ -91,17 +96,17 @@
     private final HandlerThread mHandlerThread;
     private final Handler mHandler;
     private final MediaSessionCompat mSessionCompat;
-    private final MediaSession2Stub mSession2Stub;
+    private final MediaSessionStub mSessionStub;
     private final MediaSessionLegacyStub mSessionLegacyStub;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final Executor mCallbackExecutor;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final SessionCallback mCallback;
     private final String mSessionId;
-    private final SessionToken2 mSessionToken;
+    private final SessionToken mSessionToken;
     private final AudioManager mAudioManager;
-    private final SessionPlayer2.PlayerCallback mPlayerCallback;
-    private final MediaSession2 mInstance;
+    private final SessionPlayer.PlayerCallback mPlayerCallback;
+    private final MediaSession mInstance;
     private final PendingIntent mSessionActivity;
 
     final Object mLock = new Object();
@@ -111,19 +116,19 @@
     PlaybackInfo mPlaybackInfo;
 
     @GuardedBy("mLock")
-    private SessionPlayer2 mPlayer;
+    private SessionPlayer mPlayer;
     @GuardedBy("mLock")
     private MediaBrowserServiceCompat mBrowserServiceLegacyStub;
 
-    MediaSession2ImplBase(MediaSession2 instance, Context context, String id, SessionPlayer2 player,
+    MediaSessionImplBase(MediaSession instance, Context context, String id, SessionPlayer player,
             PendingIntent sessionActivity, Executor callbackExecutor, SessionCallback callback) {
         mContext = context;
         mInstance = instance;
-        mHandlerThread = new HandlerThread("MediaController2_Thread");
+        mHandlerThread = new HandlerThread("MediaSession_Thread");
         mHandlerThread.start();
         mHandler = new Handler(mHandlerThread.getLooper());
 
-        mSession2Stub = new MediaSession2Stub(this);
+        mSessionStub = new MediaSessionStub(this);
         mSessionActivity = sessionActivity;
 
         mCallback = callback;
@@ -132,15 +137,15 @@
 
         mPlayerCallback = new SessionPlayerCallback(this);
 
-        synchronized (MediaSession2ImplBase.class) {
+        synchronized (MediaSessionImplBase.class) {
             if (SESSION_ID_LIST.contains(id)) {
                 throw new IllegalArgumentException("Session ID must be unique. ID=" + id);
             }
             SESSION_ID_LIST.add(id);
         }
         mSessionId = id;
-        mSessionToken = new SessionToken2(new SessionToken2ImplBase(Process.myUid(),
-                TYPE_SESSION, context.getPackageName(), mSession2Stub));
+        mSessionToken = new SessionToken(new SessionTokenImplBase(Process.myUid(),
+                TYPE_SESSION, context.getPackageName(), mSessionStub));
         String sessionCompatId = TextUtils.join(DEFAULT_MEDIA_SESSION_TAG_DELIM,
                 new String[] {DEFAULT_MEDIA_SESSION_TAG_PREFIX, id});
 
@@ -159,18 +164,18 @@
     }
 
     @Override
-    public void updatePlayer(@NonNull SessionPlayer2 player,
-            @Nullable SessionPlayer2 playlistAgent) {
+    public void updatePlayer(@NonNull SessionPlayer player,
+            @Nullable SessionPlayer playlistAgent) {
         // No-op
     }
 
     // TODO(jaewan): Remove SuppressLint when removing duplication session callback.
     @Override
     @SuppressLint("WrongConstant")
-    public void updatePlayer(@NonNull SessionPlayer2 player) {
+    public void updatePlayer(@NonNull SessionPlayer player) {
         final boolean isPlaybackInfoChanged;
 
-        final SessionPlayer2 oldPlayer;
+        final SessionPlayer oldPlayer;
         final PlaybackInfo info = createPlaybackInfo(player, null);
 
         synchronized (mLock) {
@@ -210,8 +215,8 @@
             }
         }
 
-        if (player instanceof RemoteSessionPlayer2) {
-            final RemoteSessionPlayer2 remotePlayer = (RemoteSessionPlayer2) player;
+        if (player instanceof RemoteSessionPlayer) {
+            final RemoteSessionPlayer remotePlayer = (RemoteSessionPlayer) player;
             VolumeProviderCompat volumeProvider =
                     new VolumeProviderCompat(remotePlayer.getVolumeControlType(),
                             remotePlayer.getMaxVolume(),
@@ -233,12 +238,12 @@
         }
     }
 
-    @NonNull PlaybackInfo createPlaybackInfo(@NonNull SessionPlayer2 player,
+    @NonNull PlaybackInfo createPlaybackInfo(@NonNull SessionPlayer player,
             AudioAttributesCompat audioAttributes) {
         final AudioAttributesCompat attrs = audioAttributes != null ? audioAttributes :
                 player.getAudioAttributes();
 
-        if (!(player instanceof RemoteSessionPlayer2)) {
+        if (!(player instanceof RemoteSessionPlayer)) {
             int stream = getLegacyStreamType(attrs);
             int controlType = VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE;
             if (Build.VERSION.SDK_INT >= 21 && mAudioManager.isVolumeFixed()) {
@@ -251,7 +256,7 @@
                     mAudioManager.getStreamMaxVolume(stream),
                     mAudioManager.getStreamVolume(stream));
         } else {
-            RemoteSessionPlayer2 remotePlayer = (RemoteSessionPlayer2) player;
+            RemoteSessionPlayer remotePlayer = (RemoteSessionPlayer) player;
             return PlaybackInfo.createPlaybackInfo(
                     PlaybackInfo.PLAYBACK_TYPE_REMOTE,
                     attrs,
@@ -287,7 +292,7 @@
             if (DEBUG) {
                 Log.d(TAG, "Closing session, id=" + getId() + ", token=" + getToken());
             }
-            synchronized (MediaSession2ImplBase.class) {
+            synchronized (MediaSessionImplBase.class) {
                 SESSION_ID_LIST.remove(mSessionId);
             }
             mPlayer.unregisterPlayerCallback(mPlayerCallback);
@@ -311,7 +316,7 @@
     }
 
     @Override
-    public @NonNull SessionPlayer2 getPlayer() {
+    public @NonNull SessionPlayer getPlayer() {
         synchronized (mLock) {
             return mPlayer;
         }
@@ -323,14 +328,14 @@
     }
 
     @Override
-    public @NonNull SessionToken2 getToken() {
+    public @NonNull SessionToken getToken() {
         return mSessionToken;
     }
 
     @Override
     public @NonNull List<ControllerInfo> getConnectedControllers() {
         List<ControllerInfo> controllers = new ArrayList<>();
-        controllers.addAll(mSession2Stub.getConnectedControllersManager()
+        controllers.addAll(mSessionStub.getConnectedControllersManager()
                 .getConnectedControllers());
         controllers.addAll(mSessionLegacyStub.getConnectedControllersManager()
                 .getConnectedControllers());
@@ -345,13 +350,13 @@
         if (controller.equals(mSessionLegacyStub.getControllersForAll())) {
             return true;
         }
-        return mSession2Stub.getConnectedControllersManager().isConnected(controller)
+        return mSessionStub.getConnectedControllersManager().isConnected(controller)
                 || mSessionLegacyStub.getConnectedControllersManager().isConnected(controller);
     }
 
     @Override
     public ListenableFuture<SessionResult> setCustomLayout(@NonNull ControllerInfo controller,
-            @NonNull final List<MediaSession2.CommandButton> layout) {
+            @NonNull final List<MediaSession.CommandButton> layout) {
         return dispatchRemoteControllerTask(controller, new RemoteControllerTask() {
             @Override
             public void run(ControllerCb controller, int seq) throws RemoteException {
@@ -362,9 +367,9 @@
 
     @Override
     public void setAllowedCommands(@NonNull ControllerInfo controller,
-            @NonNull final SessionCommandGroup2 commands) {
-        if (mSession2Stub.getConnectedControllersManager().isConnected(controller)) {
-            mSession2Stub.getConnectedControllersManager()
+            @NonNull final SessionCommandGroup commands) {
+        if (mSessionStub.getConnectedControllersManager().isConnected(controller)) {
+            mSessionStub.getConnectedControllersManager()
                     .updateAllowedCommands(controller, commands);
             dispatchRemoteControllerCallbackTask(controller, new RemoteControllerCallbackTask() {
                 @Override
@@ -379,7 +384,7 @@
     }
 
     @Override
-    public void broadcastCustomCommand(@NonNull final SessionCommand2 command,
+    public void broadcastCustomCommand(@NonNull final SessionCommand command,
             @Nullable final Bundle args) {
         dispatchRemoteControllerTask(new RemoteControllerTask() {
             @Override
@@ -391,7 +396,7 @@
 
     @Override
     public ListenableFuture<SessionResult> sendCustomCommand(
-            @NonNull ControllerInfo controller, @NonNull final SessionCommand2 command,
+            @NonNull ControllerInfo controller, @NonNull final SessionCommand command,
             @Nullable final Bundle args) {
         return dispatchRemoteControllerTask(controller, new RemoteControllerTask() {
             @Override
@@ -405,7 +410,7 @@
     public ListenableFuture<PlayerResult> play() {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 if (player.getPlayerState() != PLAYER_STATE_IDLE) {
                     return player.play();
                 }
@@ -425,7 +430,7 @@
     public ListenableFuture<PlayerResult> pause() {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.pause();
             }
         });
@@ -435,7 +440,7 @@
     public ListenableFuture<PlayerResult> prepare() {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.prepare();
             }
         });
@@ -445,86 +450,75 @@
     public ListenableFuture<PlayerResult> seekTo(final long pos) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.seekTo(pos);
             }
         });
     }
 
-    @Override
-    public void notifyRoutesInfoChanged(@NonNull ControllerInfo controller,
-            @Nullable final List<Bundle> routes) {
-        dispatchRemoteControllerCallbackTask(controller, new RemoteControllerCallbackTask() {
-            @Override
-            public void run(ControllerCb callback) throws RemoteException {
-                callback.onRoutesInfoChanged(routes);
-            }
-        });
-    }
-
-    @Override public @SessionPlayer2.PlayerState int getPlayerState() {
+    @Override public @SessionPlayer.PlayerState int getPlayerState() {
         return dispatchPlayerTask(new PlayerTask<Integer>() {
             @Override
-            public Integer run(SessionPlayer2 player) throws Exception {
+            public Integer run(SessionPlayer player) throws Exception {
                 return player.getPlayerState();
             }
-        }, SessionPlayer2.PLAYER_STATE_ERROR);
+        }, SessionPlayer.PLAYER_STATE_ERROR);
     }
 
     @Override
     public long getCurrentPosition() {
         return dispatchPlayerTask(new PlayerTask<Long>() {
             @Override
-            public Long run(SessionPlayer2 player) throws Exception {
+            public Long run(SessionPlayer player) throws Exception {
                 if (isInPlaybackState(player)) {
                     return player.getCurrentPosition();
                 }
                 return null;
             }
-        }, SessionPlayer2.UNKNOWN_TIME);
+        }, SessionPlayer.UNKNOWN_TIME);
     }
 
     @Override
     public long getDuration() {
         return dispatchPlayerTask(new PlayerTask<Long>() {
             @Override
-            public Long run(SessionPlayer2 player) throws Exception {
+            public Long run(SessionPlayer player) throws Exception {
                 if (isInPlaybackState(player)) {
                     return player.getDuration();
                 }
                 return null;
             }
-        }, SessionPlayer2.UNKNOWN_TIME);
+        }, SessionPlayer.UNKNOWN_TIME);
     }
 
     @Override
     public long getBufferedPosition() {
         return dispatchPlayerTask(new PlayerTask<Long>() {
             @Override
-            public Long run(SessionPlayer2 player) throws Exception {
+            public Long run(SessionPlayer player) throws Exception {
                 if (isInPlaybackState(player)) {
                     return player.getBufferedPosition();
                 }
                 return null;
             }
-        }, SessionPlayer2.UNKNOWN_TIME);
+        }, SessionPlayer.UNKNOWN_TIME);
     }
 
     @Override
-    public @SessionPlayer2.BuffState int getBufferingState() {
+    public @SessionPlayer.BuffState int getBufferingState() {
         return dispatchPlayerTask(new PlayerTask<Integer>() {
             @Override
-            public Integer run(SessionPlayer2 player) throws Exception {
+            public Integer run(SessionPlayer player) throws Exception {
                 return player.getBufferingState();
             }
-        }, SessionPlayer2.BUFFERING_STATE_UNKNOWN);
+        }, SessionPlayer.BUFFERING_STATE_UNKNOWN);
     }
 
     @Override
     public float getPlaybackSpeed() {
         return dispatchPlayerTask(new PlayerTask<Float>() {
             @Override
-            public Float run(SessionPlayer2 player) throws Exception {
+            public Float run(SessionPlayer player) throws Exception {
                 if (isInPlaybackState(player)) {
                     return player.getPlaybackSpeed();
                 }
@@ -537,28 +531,28 @@
     public ListenableFuture<PlayerResult> setPlaybackSpeed(final float speed) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.setPlaybackSpeed(speed);
             }
         });
     }
 
     @Override
-    public List<MediaItem2> getPlaylist() {
-        return dispatchPlayerTask(new PlayerTask<List<MediaItem2>>() {
+    public List<MediaItem> getPlaylist() {
+        return dispatchPlayerTask(new PlayerTask<List<MediaItem>>() {
             @Override
-            public List<MediaItem2> run(SessionPlayer2 player) throws Exception {
+            public List<MediaItem> run(SessionPlayer player) throws Exception {
                 return player.getPlaylist();
             }
         }, null);
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setPlaylist(final @NonNull List<MediaItem2> list,
-            final @Nullable MediaMetadata2 metadata) {
+    public ListenableFuture<PlayerResult> setPlaylist(final @NonNull List<MediaItem> list,
+            final @Nullable MediaMetadata metadata) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 if (list == null) {
                     throw new IllegalArgumentException("list shouldn't be null");
                 }
@@ -568,10 +562,10 @@
     }
 
     @Override
-    public ListenableFuture<PlayerResult> setMediaItem(final @NonNull MediaItem2 item) {
+    public ListenableFuture<PlayerResult> setMediaItem(final @NonNull MediaItem item) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 if (item == null) {
                     throw new IllegalArgumentException("item shouldn't be null");
                 }
@@ -584,11 +578,11 @@
     public ListenableFuture<PlayerResult> skipToPlaylistItem(final int index) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 if (index < 0) {
                     throw new IllegalArgumentException("index shouldn't be negative");
                 }
-                final List<MediaItem2> list = player.getPlaylist();
+                final List<MediaItem> list = player.getPlaylist();
                 if (index >= list.size()) {
                     return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                 }
@@ -601,7 +595,7 @@
     public ListenableFuture<PlayerResult> skipToPreviousItem() {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.skipToPreviousPlaylistItem();
             }
         });
@@ -611,17 +605,17 @@
     public ListenableFuture<PlayerResult> skipToNextItem() {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.skipToNextPlaylistItem();
             }
         });
     }
 
     @Override
-    public MediaMetadata2 getPlaylistMetadata() {
-        return dispatchPlayerTask(new PlayerTask<MediaMetadata2>() {
+    public MediaMetadata getPlaylistMetadata() {
+        return dispatchPlayerTask(new PlayerTask<MediaMetadata>() {
             @Override
-            public MediaMetadata2 run(SessionPlayer2 player) throws Exception {
+            public MediaMetadata run(SessionPlayer player) throws Exception {
                 return player.getPlaylistMetadata();
             }
         }, null);
@@ -629,10 +623,10 @@
 
     @Override
     public ListenableFuture<PlayerResult> addPlaylistItem(final int index,
-            final @NonNull MediaItem2 item) {
+            final @NonNull MediaItem item) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 if (index < 0) {
                     throw new IllegalArgumentException("index shouldn't be negative");
                 }
@@ -648,11 +642,11 @@
     public ListenableFuture<PlayerResult> removePlaylistItem(final int index) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 if (index < 0) {
                     throw new IllegalArgumentException("index shouldn't be negative");
                 }
-                final List<MediaItem2> list = player.getPlaylist();
+                final List<MediaItem> list = player.getPlaylist();
                 if (index >= list.size()) {
                     return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                 }
@@ -663,10 +657,10 @@
 
     @Override
     public ListenableFuture<PlayerResult> replacePlaylistItem(final int index,
-            final @NonNull MediaItem2 item) {
+            final @NonNull MediaItem item) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 if (index < 0) {
                     throw new IllegalArgumentException("index shouldn't be negative");
                 }
@@ -680,10 +674,10 @@
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
-        return dispatchPlayerTask(new PlayerTask<MediaItem2>() {
+    public MediaItem getCurrentMediaItem() {
+        return dispatchPlayerTask(new PlayerTask<MediaItem>() {
             @Override
-            public MediaItem2 run(SessionPlayer2 player) throws Exception {
+            public MediaItem run(SessionPlayer player) throws Exception {
                 return player.getCurrentMediaItem();
             }
         }, null);
@@ -691,52 +685,52 @@
 
     @Override
     public ListenableFuture<PlayerResult> updatePlaylistMetadata(
-            final @Nullable MediaMetadata2 metadata) {
+            final @Nullable MediaMetadata metadata) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.updatePlaylistMetadata(metadata);
             }
         });
     }
 
     @Override
-    public @SessionPlayer2.RepeatMode int getRepeatMode() {
+    public @SessionPlayer.RepeatMode int getRepeatMode() {
         return dispatchPlayerTask(new PlayerTask<Integer>() {
             @Override
-            public Integer run(SessionPlayer2 player) throws Exception {
+            public Integer run(SessionPlayer player) throws Exception {
                 return player.getRepeatMode();
             }
-        }, SessionPlayer2.REPEAT_MODE_NONE);
+        }, SessionPlayer.REPEAT_MODE_NONE);
     }
 
     @Override
     public ListenableFuture<PlayerResult> setRepeatMode(
-            final @SessionPlayer2.RepeatMode int repeatMode) {
+            final @SessionPlayer.RepeatMode int repeatMode) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.setRepeatMode(repeatMode);
             }
         });
     }
 
     @Override
-    public @SessionPlayer2.ShuffleMode int getShuffleMode() {
+    public @SessionPlayer.ShuffleMode int getShuffleMode() {
         return dispatchPlayerTask(new PlayerTask<Integer>() {
             @Override
-            public Integer run(SessionPlayer2 player) throws Exception {
+            public Integer run(SessionPlayer player) throws Exception {
                 return player.getShuffleMode();
             }
-        }, SessionPlayer2.SHUFFLE_MODE_NONE);
+        }, SessionPlayer.SHUFFLE_MODE_NONE);
     }
 
     @Override
     public ListenableFuture<PlayerResult> setShuffleMode(
-            final @SessionPlayer2.ShuffleMode int shuffleMode) {
+            final @SessionPlayer.ShuffleMode int shuffleMode) {
         return dispatchPlayerTask(new PlayerTask<ListenableFuture<PlayerResult>>() {
             @Override
-            public ListenableFuture<PlayerResult> run(SessionPlayer2 player) throws Exception {
+            public ListenableFuture<PlayerResult> run(SessionPlayer player) throws Exception {
                 return player.setShuffleMode(shuffleMode);
             }
         });
@@ -746,7 +740,7 @@
     // package private and private methods
     ///////////////////////////////////////////////////
     @Override
-    public @NonNull MediaSession2 getInstance() {
+    public @NonNull MediaSession getInstance() {
         return mInstance;
     }
 
@@ -778,7 +772,7 @@
     @Override
     public PlaybackStateCompat createPlaybackStateCompat() {
         synchronized (mLock) {
-            int state = MediaUtils2.convertToPlaybackStateCompatState(getPlayerState(),
+            int state = MediaUtils.convertToPlaybackStateCompatState(getPlayerState(),
                     getBufferingState());
             long allActions = PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_PAUSE
                     | PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_REWIND
@@ -818,14 +812,14 @@
         return mSessionActivity;
     }
 
-    MediaBrowserServiceCompat createLegacyBrowserService(Context context, SessionToken2 token,
+    MediaBrowserServiceCompat createLegacyBrowserService(Context context, SessionToken token,
             Token sessionToken) {
-        return new MediaSessionService2LegacyStub(context, this, sessionToken);
+        return new MediaSessionServiceLegacyStub(context, this, sessionToken);
     }
 
     @Override
-    public void connectFromService(IMediaController2 caller, String packageName, int pid, int uid) {
-        mSession2Stub.connect(caller, packageName, pid, uid);
+    public void connectFromService(IMediaController caller, String packageName, int pid, int uid) {
+        mSessionStub.connect(caller, packageName, pid, uid);
     }
 
     /**
@@ -855,22 +849,22 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    boolean isInPlaybackState(@NonNull SessionPlayer2 player) {
+    boolean isInPlaybackState(@NonNull SessionPlayer player) {
         return !isClosed()
-                && player.getPlayerState() != SessionPlayer2.PLAYER_STATE_IDLE
-                && player.getPlayerState() != SessionPlayer2.PLAYER_STATE_ERROR;
+                && player.getPlayerState() != SessionPlayer.PLAYER_STATE_IDLE
+                && player.getPlayerState() != SessionPlayer.PLAYER_STATE_ERROR;
     }
 
-    private @Nullable MediaItem2 getCurrentMediaItemOrNull() {
-        final SessionPlayer2 player;
+    private @Nullable MediaItem getCurrentMediaItemOrNull() {
+        final SessionPlayer player;
         synchronized (mLock) {
             player = mPlayer;
         }
         return player != null ? player.getCurrentMediaItem() : null;
     }
 
-    private @Nullable List<MediaItem2> getPlaylistOrNull() {
-        final SessionPlayer2 player;
+    private @Nullable List<MediaItem> getPlaylistOrNull() {
+        final SessionPlayer player;
         synchronized (mLock) {
             player = mPlayer;
         }
@@ -885,7 +879,7 @@
     }
 
     private <T> T dispatchPlayerTask(@NonNull PlayerTask<T> command, T defaultResult) {
-        final SessionPlayer2 player;
+        final SessionPlayer player;
         synchronized (mLock) {
             player = mPlayer;
         }
@@ -905,11 +899,11 @@
 
     // TODO(jaewan): Remove SuppressLint when removing duplication session callback.
     @SuppressLint("WrongConstant")
-    private void notifyPlayerUpdatedNotLocked(SessionPlayer2 oldPlayer) {
+    private void notifyPlayerUpdatedNotLocked(SessionPlayer oldPlayer) {
         // Tells the playlist change first, to current item can change be notified with an item
         // within the playlist.
-        List<MediaItem2> oldPlaylist = oldPlayer.getPlaylist();
-        final List<MediaItem2> newPlaylist = getPlaylistOrNull();
+        List<MediaItem> oldPlaylist = oldPlayer.getPlaylist();
+        final List<MediaItem> newPlaylist = getPlaylistOrNull();
         if (!ObjectsCompat.equals(oldPlaylist, newPlaylist)) {
             dispatchRemoteControllerCallbackTask(new RemoteControllerCallbackTask() {
                 @Override
@@ -919,8 +913,8 @@
                 }
             });
         } else {
-            MediaMetadata2 oldMetadata = oldPlayer.getPlaylistMetadata();
-            final MediaMetadata2 newMetadata = getPlaylistMetadata();
+            MediaMetadata oldMetadata = oldPlayer.getPlaylistMetadata();
+            final MediaMetadata newMetadata = getPlaylistMetadata();
             if (!ObjectsCompat.equals(oldMetadata, newMetadata)) {
                 dispatchRemoteControllerCallbackTask(new RemoteControllerCallbackTask() {
                     @Override
@@ -930,8 +924,8 @@
                 });
             }
         }
-        MediaItem2 oldCurrentItem = oldPlayer.getCurrentMediaItem();
-        final MediaItem2 newCurrentItem = getCurrentMediaItemOrNull();
+        MediaItem oldCurrentItem = oldPlayer.getCurrentMediaItem();
+        final MediaItem newCurrentItem = getCurrentMediaItemOrNull();
         if (!ObjectsCompat.equals(oldCurrentItem, newCurrentItem)) {
             dispatchRemoteControllerCallbackTask(new RemoteControllerCallbackTask() {
                 @Override
@@ -940,7 +934,7 @@
                 }
             });
         }
-        final @SessionPlayer2.RepeatMode int repeatMode = getRepeatMode();
+        final @SessionPlayer.RepeatMode int repeatMode = getRepeatMode();
         if (oldPlayer.getRepeatMode() != repeatMode) {
             dispatchRemoteControllerCallbackTask(new RemoteControllerCallbackTask() {
                 @Override
@@ -949,7 +943,7 @@
                 }
             });
         }
-        final @SessionPlayer2.ShuffleMode int shuffleMode = getShuffleMode();
+        final @SessionPlayer.ShuffleMode int shuffleMode = getShuffleMode();
         if (oldPlayer.getShuffleMode() != shuffleMode) {
             dispatchRemoteControllerCallbackTask(new RemoteControllerCallbackTask() {
                 @Override
@@ -970,7 +964,7 @@
                 callback.onPlayerStateChanged(currentTimeMs, positionMs, playerState);
             }
         });
-        final MediaItem2 item = getCurrentMediaItemOrNull();
+        final MediaItem item = getCurrentMediaItemOrNull();
         if (item != null) {
             final int bufferingState = getBufferingState();
             final long bufferedPositionMs = getBufferedPosition();
@@ -1025,7 +1019,7 @@
 
     void dispatchRemoteControllerCallbackTask(@NonNull RemoteControllerCallbackTask task) {
         List<ControllerInfo> controllers =
-                mSession2Stub.getConnectedControllersManager().getConnectedControllers();
+                mSessionStub.getConnectedControllersManager().getConnectedControllers();
         controllers.add(mSessionLegacyStub.getControllersForAll());
         for (int i = 0; i < controllers.size(); i++) {
             dispatchRemoteControllerCallbackTask(controllers.get(i), task);
@@ -1041,7 +1035,7 @@
             final ListenableFuture<SessionResult> future;
             final int seq;
             final SequencedFutureManager manager =
-                    mSession2Stub.getConnectedControllersManager()
+                    mSessionStub.getConnectedControllersManager()
                             .getSequencedFutureManager(controller);
             if (manager != null) {
                 future = manager.createSequencedFuture(RESULT_WHEN_CLOSED);
@@ -1073,14 +1067,14 @@
 
     void dispatchRemoteControllerTask(@NonNull RemoteControllerTask task) {
         List<ControllerInfo> controllers =
-                mSession2Stub.getConnectedControllersManager().getConnectedControllers();
+                mSessionStub.getConnectedControllersManager().getConnectedControllers();
         controllers.add(mSessionLegacyStub.getControllersForAll());
         for (int i = 0; i < controllers.size(); i++) {
             ControllerInfo controller = controllers.get(i);
             try {
                 final int seq;
                 final SequencedFutureManager manager =
-                        mSession2Stub.getConnectedControllersManager()
+                        mSessionStub.getConnectedControllersManager()
                                 .getSequencedFutureManager(controller);
                 if (manager != null) {
                     seq = manager.obtainNextSequenceNumber();
@@ -1113,9 +1107,9 @@
         if (DEBUG) {
             Log.d(TAG, controller.toString() + " is gone", e);
         }
-        // Note: Only removing from MediaSession2Stub and ignoring (legacy) stubs would be fine for
+        // Note: Only removing from MediaSessionStub and ignoring (legacy) stubs would be fine for
         //       now. Because calls to the legacy stubs doesn't throw DeadObjectException.
-        mSession2Stub.getConnectedControllersManager().removeController(controller);
+        mSessionStub.getConnectedControllersManager().removeController(controller);
     }
 
     ///////////////////////////////////////////////////
@@ -1123,7 +1117,7 @@
     ///////////////////////////////////////////////////
     @FunctionalInterface
     interface PlayerTask<T> {
-        T run(@NonNull SessionPlayer2 player) throws Exception;
+        T run(@NonNull SessionPlayer player) throws Exception;
     }
 
     @FunctionalInterface
@@ -1136,22 +1130,22 @@
         void run(ControllerCb controller) throws RemoteException;
     }
 
-    private static class SessionPlayerCallback extends SessionPlayer2.PlayerCallback {
-        private final WeakReference<MediaSession2ImplBase> mSession;
-        private MediaItem2 mMediaItem;
-        private List<MediaItem2> mList;
+    private static class SessionPlayerCallback extends SessionPlayer.PlayerCallback {
+        private final WeakReference<MediaSessionImplBase> mSession;
+        private MediaItem mMediaItem;
+        private List<MediaItem> mList;
         private final CurrentMediaItemListener mCurrentItemChangedListener;
         private final PlaylistItemListener mPlaylistItemChangedListener;
 
-        SessionPlayerCallback(MediaSession2ImplBase session) {
+        SessionPlayerCallback(MediaSessionImplBase session) {
             mSession = new WeakReference<>(session);
             mCurrentItemChangedListener = new CurrentMediaItemListener(session);
             mPlaylistItemChangedListener = new PlaylistItemListener(session);
         }
 
         @Override
-        public void onCurrentMediaItemChanged(final SessionPlayer2 player, final MediaItem2 item) {
-            final MediaSession2ImplBase session = getSession();
+        public void onCurrentMediaItemChanged(final SessionPlayer player, final MediaItem item) {
+            final MediaSessionImplBase session = getSession();
             if (session == null || session.getPlayer() != player || player == null) {
                 return;
             }
@@ -1177,8 +1171,8 @@
         }
 
         @Override
-        public void onPlayerStateChanged(final SessionPlayer2 player, final int state) {
-            final MediaSession2ImplBase session = getSession();
+        public void onPlayerStateChanged(final SessionPlayer player, final int state) {
+            final MediaSessionImplBase session = getSession();
             if (session == null || session.getPlayer() != player || player == null) {
                 return;
             }
@@ -1194,8 +1188,8 @@
         }
 
         @Override
-        public void onBufferingStateChanged(final SessionPlayer2 player,
-                final MediaItem2 item, final int state) {
+        public void onBufferingStateChanged(final SessionPlayer player,
+                final MediaItem item, final int state) {
             updateDurationIfNeeded(player, item);
             dispatchRemoteControllerTask(player, new RemoteControllerCallbackTask() {
                 @Override
@@ -1206,7 +1200,7 @@
         }
 
         @Override
-        public void onPlaybackSpeedChanged(final SessionPlayer2 player, final float speed) {
+        public void onPlaybackSpeedChanged(final SessionPlayer player, final float speed) {
             dispatchRemoteControllerTask(player, new RemoteControllerCallbackTask() {
                 @Override
                 public void run(ControllerCb callback) throws RemoteException {
@@ -1217,7 +1211,7 @@
         }
 
         @Override
-        public void onSeekCompleted(final SessionPlayer2 player, final long position) {
+        public void onSeekCompleted(final SessionPlayer player, final long position) {
             dispatchRemoteControllerTask(player, new RemoteControllerCallbackTask() {
                 @Override
                 public void run(ControllerCb callback) throws RemoteException {
@@ -1228,9 +1222,9 @@
         }
 
         @Override
-        public void onPlaylistChanged(final SessionPlayer2 player, final List<MediaItem2> list,
-                final MediaMetadata2 metadata) {
-            final MediaSession2ImplBase session = getSession();
+        public void onPlaylistChanged(final SessionPlayer player, final List<MediaItem> list,
+                final MediaMetadata metadata) {
+            final MediaSessionImplBase session = getSession();
             if (session == null || session.getPlayer() != player || player == null) {
                 return;
             }
@@ -1258,8 +1252,8 @@
         }
 
         @Override
-        public void onPlaylistMetadataChanged(final SessionPlayer2 player,
-                final MediaMetadata2 metadata) {
+        public void onPlaylistMetadataChanged(final SessionPlayer player,
+                final MediaMetadata metadata) {
             dispatchRemoteControllerTask(player, new RemoteControllerCallbackTask() {
                 @Override
                 public void run(ControllerCb callback) throws RemoteException {
@@ -1269,7 +1263,7 @@
         }
 
         @Override
-        public void onRepeatModeChanged(final SessionPlayer2 player, final int repeatMode) {
+        public void onRepeatModeChanged(final SessionPlayer player, final int repeatMode) {
             dispatchRemoteControllerTask(player, new RemoteControllerCallbackTask() {
                 @Override
                 public void run(ControllerCb callback) throws RemoteException {
@@ -1279,7 +1273,7 @@
         }
 
         @Override
-        public void onShuffleModeChanged(final SessionPlayer2 player, final int shuffleMode) {
+        public void onShuffleModeChanged(final SessionPlayer player, final int shuffleMode) {
             dispatchRemoteControllerTask(player, new RemoteControllerCallbackTask() {
                 @Override
                 public void run(ControllerCb callback) throws RemoteException {
@@ -1289,7 +1283,7 @@
         }
 
         @Override
-        public void onPlaybackCompleted(SessionPlayer2 player) {
+        public void onPlaybackCompleted(SessionPlayer player) {
             dispatchRemoteControllerTask(player, new RemoteControllerCallbackTask() {
                 @Override
                 public void run(ControllerCb callback) throws RemoteException {
@@ -1299,9 +1293,9 @@
         }
 
         @Override
-        public void onAudioAttributesChanged(final SessionPlayer2 player,
+        public void onAudioAttributesChanged(final SessionPlayer player,
                 final AudioAttributesCompat attributes) {
-            final MediaSession2ImplBase session = getSession();
+            final MediaSessionImplBase session = getSession();
             if (session == null || session.getPlayer() != player || player == null) {
                 return;
             }
@@ -1316,25 +1310,25 @@
             }
         }
 
-        private MediaSession2ImplBase getSession() {
-            final MediaSession2ImplBase session = mSession.get();
+        private MediaSessionImplBase getSession() {
+            final MediaSessionImplBase session = mSession.get();
             if (session == null && DEBUG) {
                 Log.d(TAG, "Session is closed", new IllegalStateException());
             }
             return session;
         }
 
-        private void dispatchRemoteControllerTask(@NonNull SessionPlayer2 player,
+        private void dispatchRemoteControllerTask(@NonNull SessionPlayer player,
                 @NonNull RemoteControllerCallbackTask task) {
-            final MediaSession2ImplBase session = getSession();
+            final MediaSessionImplBase session = getSession();
             if (session == null || session.getPlayer() != player || player == null) {
                 return;
             }
             session.dispatchRemoteControllerCallbackTask(task);
         }
 
-        private void updateDurationIfNeeded(@NonNull final SessionPlayer2 player,
-                @Nullable final MediaItem2 item) {
+        private void updateDurationIfNeeded(@NonNull final SessionPlayer player,
+                @Nullable final MediaItem item) {
             if (item == null) {
                 return;
             }
@@ -1346,14 +1340,14 @@
                 return;
             }
 
-            MediaMetadata2 metadata = item.getMetadata();
+            MediaMetadata metadata = item.getMetadata();
             if (metadata != null) {
-                if (!metadata.containsKey(MediaMetadata2.METADATA_KEY_DURATION)) {
-                    metadata = new MediaMetadata2.Builder(metadata).putLong(
-                            MediaMetadata2.METADATA_KEY_DURATION, duration).build();
+                if (!metadata.containsKey(METADATA_KEY_DURATION)) {
+                    metadata = new MediaMetadata.Builder(metadata).putLong(
+                            METADATA_KEY_DURATION, duration).build();
                 } else {
                     long durationFromMetadata =
-                            metadata.getLong(MediaMetadata2.METADATA_KEY_DURATION);
+                            metadata.getLong(METADATA_KEY_DURATION);
                     if (duration == durationFromMetadata) {
                         return;
                     }
@@ -1369,13 +1363,11 @@
                     // duration set by developer.
                 }
             } else {
-                metadata = new MediaMetadata2.Builder()
-                        .putLong(MediaMetadata2.METADATA_KEY_DURATION, duration)
-                        .putString(MediaMetadata2.METADATA_KEY_MEDIA_ID,
-                                item.getMediaId())
-                        .putLong(MediaMetadata2.METADATA_KEY_BROWSABLE,
-                                MediaMetadata2.BROWSABLE_TYPE_NONE)
-                        .putLong(MediaMetadata2.METADATA_KEY_PLAYABLE, 1)
+                metadata = new MediaMetadata.Builder()
+                        .putLong(METADATA_KEY_DURATION, duration)
+                        .putString(METADATA_KEY_MEDIA_ID, item.getMediaId())
+                        .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
+                        .putLong(METADATA_KEY_PLAYABLE, 1)
                         .build();
             }
             if (metadata != null) {
@@ -1391,20 +1383,20 @@
         }
     }
 
-    static class CurrentMediaItemListener implements MediaItem2.OnMetadataChangedListener {
-        private final WeakReference<MediaSession2ImplBase> mSession;
+    static class CurrentMediaItemListener implements MediaItem.OnMetadataChangedListener {
+        private final WeakReference<MediaSessionImplBase> mSession;
 
-        CurrentMediaItemListener(MediaSession2ImplBase session) {
+        CurrentMediaItemListener(MediaSessionImplBase session) {
             mSession = new WeakReference<>(session);
         }
 
         @Override
-        public void onMetadataChanged(final MediaItem2 item) {
-            final MediaSession2ImplBase session = mSession.get();
+        public void onMetadataChanged(final MediaItem item) {
+            final MediaSessionImplBase session = mSession.get();
             if (session == null || item == null) {
                 return;
             }
-            final MediaItem2 currentItem = session.getCurrentMediaItem();
+            final MediaItem currentItem = session.getCurrentMediaItem();
             if (currentItem != null && item.equals(currentItem)) {
                 session.dispatchRemoteControllerCallbackTask(new RemoteControllerCallbackTask() {
                     @Override
@@ -1416,20 +1408,20 @@
         }
     }
 
-    static class PlaylistItemListener implements MediaItem2.OnMetadataChangedListener {
-        private final WeakReference<MediaSession2ImplBase> mSession;
+    static class PlaylistItemListener implements MediaItem.OnMetadataChangedListener {
+        private final WeakReference<MediaSessionImplBase> mSession;
 
-        PlaylistItemListener(MediaSession2ImplBase session) {
+        PlaylistItemListener(MediaSessionImplBase session) {
             mSession = new WeakReference<>(session);
         }
 
         @Override
-        public void onMetadataChanged(final MediaItem2 item) {
-            final MediaSession2ImplBase session = mSession.get();
+        public void onMetadataChanged(final MediaItem item) {
+            final MediaSessionImplBase session = mSession.get();
             if (session == null || item == null) {
                 return;
             }
-            final List<MediaItem2> list = session.getPlaylist();
+            final List<MediaItem> list = session.getPlaylist();
             if (list == null) {
                 return;
             }
@@ -1448,12 +1440,12 @@
         }
     }
 
-    static final class CombinedCommandResultFuture<T extends BaseResult2>
+    static final class CombinedCommandResultFuture<T extends BaseResult>
             extends AbstractResolvableFuture<T> {
         final ListenableFuture<T>[] mFutures;
         AtomicInteger mSuccessCount = new AtomicInteger(0);
 
-        public static <U extends BaseResult2> CombinedCommandResultFuture create(
+        public static <U extends BaseResult> CombinedCommandResultFuture create(
                 Executor executor, ListenableFuture<U>... futures) {
             return new CombinedCommandResultFuture<U>(executor, futures);
         }
diff --git a/media2/src/main/java/androidx/media2/MediaSessionLegacyStub.java b/media2/src/main/java/androidx/media2/MediaSessionLegacyStub.java
index 284c36b..7157a9f 100644
--- a/media2/src/main/java/androidx/media2/MediaSessionLegacyStub.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionLegacyStub.java
@@ -16,12 +16,12 @@
 
 package androidx.media2;
 
-import static androidx.media2.MediaMetadata2.METADATA_KEY_DISPLAY_TITLE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_TITLE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaUtils2.TRANSACTION_SIZE_LIMIT_IN_BYTES;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_CUSTOM;
-import static androidx.media2.SessionCommand2.COMMAND_VERSION_CURRENT;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DISPLAY_TITLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_TITLE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaUtils.TRANSACTION_SIZE_LIMIT_IN_BYTES;
+import static androidx.media2.SessionCommand.COMMAND_CODE_CUSTOM;
+import static androidx.media2.SessionCommand.COMMAND_VERSION_CURRENT;
 
 import android.content.Context;
 import android.net.Uri;
@@ -43,16 +43,16 @@
 import androidx.annotation.Nullable;
 import androidx.media.MediaSessionManager;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.ControllerCb;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.MediaSession2Impl;
-import androidx.media2.MediaSession2.SessionResult;
-import androidx.media2.SessionCommand2.CommandCode;
-import androidx.media2.SessionPlayer2.PlayerResult;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSession.ControllerCb;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.MediaSessionImpl;
+import androidx.media2.MediaSession.SessionResult;
+import androidx.media2.SessionCommand.CommandCode;
+import androidx.media2.SessionPlayer.PlayerResult;
 
 import java.util.List;
 import java.util.Set;
@@ -64,16 +64,16 @@
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    static final SparseArray<SessionCommand2> sCommandsForOnCommandRequest =
+    static final SparseArray<SessionCommand> sCommandsForOnCommandRequest =
             new SparseArray<>();
 
     static {
-        SessionCommandGroup2 group = new SessionCommandGroup2.Builder()
+        SessionCommandGroup group = new SessionCommandGroup.Builder()
                 .addAllPlayerCommands(COMMAND_VERSION_CURRENT)
                 .addAllVolumeCommands(COMMAND_VERSION_CURRENT)
                 .build();
-        Set<SessionCommand2> commands = group.getCommands();
-        for (SessionCommand2 command : commands) {
+        Set<SessionCommand> commands = group.getCommands();
+        for (SessionCommand command : commands) {
             sCommandsForOnCommandRequest.append(command.getCommandCode(), command);
         }
     }
@@ -82,12 +82,12 @@
 
     final Object mLock = new Object();
 
-    final MediaSession2Impl mSessionImpl;
+    final MediaSessionImpl mSessionImpl;
     final MediaSessionManager mSessionManager;
     final Context mContext;
     final ControllerInfo mControllerInfoForAll;
 
-    MediaSessionLegacyStub(MediaSession2Impl session) {
+    MediaSessionLegacyStub(MediaSessionImpl session) {
         mSessionImpl = session;
         mContext = mSessionImpl.getContext();
         mSessionManager = MediaSessionManager.getSessionManager(mContext);
@@ -104,7 +104,7 @@
         if (commandName == null) {
             return;
         }
-        final SessionCommand2 command = new SessionCommand2(commandName, null);
+        final SessionCommand command = new SessionCommand(commandName, null);
         dispatchSessionTask(command, new SessionTask() {
             @Override
             public void run(final ControllerInfo controller) throws RemoteException {
@@ -119,7 +119,7 @@
 
     @Override
     public void onPrepare() {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_PREPARE, new SessionTask() {
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_PREPARE, new SessionTask() {
             @Override
             public void run(ControllerInfo controller) throws RemoteException {
                 mSessionImpl.prepare();
@@ -129,7 +129,7 @@
 
     @Override
     public void onPrepareFromMediaId(final String mediaId, final Bundle extras) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -146,7 +146,7 @@
 
     @Override
     public void onPrepareFromSearch(final String query, final Bundle extras) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -166,7 +166,7 @@
         if (uri == null) {
             return;
         }
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_URI,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -178,7 +178,7 @@
 
     @Override
     public void onPlay() {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_PLAY, new SessionTask() {
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_PLAY, new SessionTask() {
             @Override
             public void run(ControllerInfo controller) throws RemoteException {
                 mSessionImpl.play();
@@ -188,7 +188,7 @@
 
     @Override
     public void onPlayFromMediaId(final String mediaId, final Bundle extras) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -205,7 +205,7 @@
 
     @Override
     public void onPlayFromSearch(final String query, final Bundle extras) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -225,7 +225,7 @@
         if (uri == null) {
             return;
         }
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_URI,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -237,7 +237,7 @@
 
     @Override
     public void onPause() {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE, new SessionTask() {
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_PAUSE, new SessionTask() {
             @Override
             public void run(ControllerInfo controller) throws RemoteException {
                 mSessionImpl.pause();
@@ -247,14 +247,14 @@
 
     @Override
     public void onStop() {
-        // Here, we don't call SessionPlayer2#reset() since it may result removing
+        // Here, we don't call SessionPlayer#reset() since it may result removing
         // all callbacks from the player. Instead, we pause and seek to zero.
         // Here, we check both permissions: Pause / SeekTo.
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_PAUSE, new SessionTask() {
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_PAUSE, new SessionTask() {
             @Override
             public void run(ControllerInfo controller) throws RemoteException {
                 handleTaskOnExecutor(controller, null,
-                        SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO, new SessionTask() {
+                        SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO, new SessionTask() {
                             @Override
                             public void run(ControllerInfo controller) throws RemoteException {
                                 mSessionImpl.pause();
@@ -267,7 +267,7 @@
 
     @Override
     public void onSeekTo(final long pos) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO, new SessionTask() {
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO, new SessionTask() {
             @Override
             public void run(ControllerInfo controller) throws RemoteException {
                 mSessionImpl.seekTo(pos);
@@ -277,7 +277,7 @@
 
     @Override
     public void onSkipToNext() {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -288,7 +288,7 @@
 
     @Override
     public void onSkipToPrevious() {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -299,16 +299,16 @@
 
     @Override
     public void onSkipToQueueItem(final long queueId) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
-                        List<MediaItem2> playlist = mSessionImpl.getPlayer().getPlaylist();
+                        List<MediaItem> playlist = mSessionImpl.getPlayer().getPlaylist();
                         if (playlist == null) {
                             return;
                         }
                         // Use queueId as an index as we've published {@link QueueItem} as so.
-                        // see: {@link MediaUtils2#convertToQueueItemList}.
+                        // see: {@link MediaUtils#convertToQueueItemList}.
                         mSessionImpl.skipToPlaylistItem((int) queueId);
                     }
                 });
@@ -316,7 +316,7 @@
 
     @Override
     public void onFastForward() {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_FAST_FORWARD,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -328,7 +328,7 @@
 
     @Override
     public void onRewind() {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_REWIND,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_REWIND,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -348,17 +348,17 @@
             return;
         }
         // extras is ignored.
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_SESSION_SET_RATING,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_SESSION_SET_RATING,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
-                        MediaItem2 currentItem = mSessionImpl.getCurrentMediaItem();
+                        MediaItem currentItem = mSessionImpl.getCurrentMediaItem();
                         if (currentItem == null) {
                             return;
                         }
                         mSessionImpl.getCallback().onSetRating(mSessionImpl.getInstance(),
                                 controller, currentItem.getMediaId(),
-                                MediaUtils2.convertToRating2(rating));
+                                MediaUtils.convertToRating(rating));
                     }
                 });
     }
@@ -375,7 +375,7 @@
 
     @Override
     public void onSetRepeatMode(final int repeatMode) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_SET_REPEAT_MODE,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_SET_REPEAT_MODE,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -386,7 +386,7 @@
 
     @Override
     public void onSetShuffleMode(final int shuffleMode) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -405,7 +405,7 @@
         if (description == null) {
             return;
         }
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -414,7 +414,7 @@
                             Log.w(TAG, "onAddQueueItem(): Media ID shouldn't be empty");
                             return;
                         }
-                        MediaItem2 newItem = mSessionImpl.getCallback().onCreateMediaItem(
+                        MediaItem newItem = mSessionImpl.getCallback().onCreateMediaItem(
                                 mSessionImpl.getInstance(), controller, mediaId);
                         mSessionImpl.addPlaylistItem(index, newItem);
                     }
@@ -426,7 +426,7 @@
         if (description == null) {
             return;
         }
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -435,9 +435,9 @@
                             Log.w(TAG, "onRemoveQueueItem(): Media ID shouldn't be null");
                             return;
                         }
-                        List<MediaItem2> playlist = mSessionImpl.getPlaylist();
+                        List<MediaItem> playlist = mSessionImpl.getPlaylist();
                         for (int i = 0; i < playlist.size(); i++) {
-                            MediaItem2 item = playlist.get(i);
+                            MediaItem item = playlist.get(i);
                             if (TextUtils.equals(item.getMediaId(), mediaId)) {
                                 mSessionImpl.removePlaylistItem(i);
                                 return;
@@ -449,7 +449,7 @@
 
     @Override
     public void onRemoveQueueItemAt(final int index) {
-        dispatchSessionTask(SessionCommand2.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
+        dispatchSessionTask(SessionCommand.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
                 new SessionTask() {
                     @Override
                     public void run(ControllerInfo controller) throws RemoteException {
@@ -475,12 +475,12 @@
         dispatchSessionTaskInternal(null, commandCode, task);
     }
 
-    private void dispatchSessionTask(@NonNull final SessionCommand2 sessionCommand,
+    private void dispatchSessionTask(@NonNull final SessionCommand sessionCommand,
             @NonNull final SessionTask task) {
         dispatchSessionTaskInternal(sessionCommand, COMMAND_CODE_CUSTOM, task);
     }
 
-    private void dispatchSessionTaskInternal(@Nullable final SessionCommand2 sessionCommand,
+    private void dispatchSessionTaskInternal(@Nullable final SessionCommand sessionCommand,
             @CommandCode final int commandCode, @NonNull final SessionTask task) {
         if (mSessionImpl.isClosed()) {
             return;
@@ -511,7 +511,7 @@
                     return;
                 }
                 if (!mConnectedControllersManager.isConnected(controller)) {
-                    SessionCommandGroup2 allowedCommands = mSessionImpl.getCallback().onConnect(
+                    SessionCommandGroup allowedCommands = mSessionImpl.getCallback().onConnect(
                             mSessionImpl.getInstance(), controller);
                     if (allowedCommands == null) {
                         try {
@@ -531,9 +531,9 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     void handleTaskOnExecutor(@NonNull final ControllerInfo controller,
-            @Nullable final SessionCommand2 sessionCommand, @CommandCode final int commandCode,
+            @Nullable final SessionCommand sessionCommand, @CommandCode final int commandCode,
             @NonNull final SessionTask task) {
-        SessionCommand2 command;
+        SessionCommand command;
         if (sessionCommand != null) {
             if (!mConnectedControllersManager.isAllowedCommand(controller, sessionCommand)) {
                 return;
@@ -608,12 +608,12 @@
         }
 
         @Override
-        void onAllowedCommandsChanged(SessionCommandGroup2 commands) throws RemoteException {
+        void onAllowedCommandsChanged(SessionCommandGroup commands) throws RemoteException {
             // no-op
         }
 
         @Override
-        void sendCustomCommand(int seq, SessionCommand2 command, Bundle args)
+        void sendCustomCommand(int seq, SessionCommand command, Bundle args)
                 throws RemoteException {
             // no-op
         }
@@ -631,7 +631,7 @@
         }
 
         @Override
-        void onBufferingStateChanged(MediaItem2 item, int bufferingState, long bufferedPositionMs)
+        void onBufferingStateChanged(MediaItem item, int bufferingState, long bufferedPositionMs)
                 throws RemoteException {
             throw new AssertionError("This shouldn't be called.");
         }
@@ -643,18 +643,18 @@
         }
 
         @Override
-        void onCurrentMediaItemChanged(MediaItem2 item) throws RemoteException {
+        void onCurrentMediaItemChanged(MediaItem item) throws RemoteException {
             throw new AssertionError("This shouldn't be called.");
         }
 
         @Override
-        void onPlaylistChanged(List<MediaItem2> playlist, MediaMetadata2 metadata)
+        void onPlaylistChanged(List<MediaItem> playlist, MediaMetadata metadata)
                 throws RemoteException {
             throw new AssertionError("This shouldn't be called.");
         }
 
         @Override
-        void onPlaylistMetadataChanged(MediaMetadata2 metadata) throws RemoteException {
+        void onPlaylistMetadataChanged(MediaMetadata metadata) throws RemoteException {
             throw new AssertionError("This shouldn't be called.");
         }
 
@@ -674,11 +674,6 @@
         }
 
         @Override
-        void onRoutesInfoChanged(List<Bundle> routes) throws RemoteException {
-            // no-op
-        }
-
-        @Override
         void onChildrenChanged(String parentId, int itemCount, LibraryParams params)
                 throws RemoteException {
             // no-op
@@ -727,12 +722,12 @@
         }
 
         @Override
-        void onAllowedCommandsChanged(SessionCommandGroup2 commands) throws RemoteException {
+        void onAllowedCommandsChanged(SessionCommandGroup commands) throws RemoteException {
             throw new AssertionError("This shouldn't be called.");
         }
 
         @Override
-        void sendCustomCommand(int seq, SessionCommand2 command, Bundle args)
+        void sendCustomCommand(int seq, SessionCommand command, Bundle args)
                 throws RemoteException {
             // no-op
         }
@@ -754,7 +749,7 @@
         }
 
         @Override
-        void onBufferingStateChanged(MediaItem2 item, int bufferingState, long bufferedPositionMs)
+        void onBufferingStateChanged(MediaItem item, int bufferingState, long bufferedPositionMs)
                 throws RemoteException {
             // Note: This method does not use any of the given arguments.
             mSessionImpl.getSessionCompat().setPlaybackState(
@@ -770,19 +765,19 @@
         }
 
         @Override
-        void onCurrentMediaItemChanged(MediaItem2 item) throws RemoteException {
+        void onCurrentMediaItemChanged(MediaItem item) throws RemoteException {
             mSessionImpl.getSessionCompat().setMetadata(item == null ? null
-                    : MediaUtils2.convertToMediaMetadataCompat(item.getMetadata()));
+                    : MediaUtils.convertToMediaMetadataCompat(item.getMetadata()));
         }
 
         @Override
-        void onPlaylistChanged(List<MediaItem2> playlist, MediaMetadata2 metadata)
+        void onPlaylistChanged(List<MediaItem> playlist, MediaMetadata metadata)
                 throws RemoteException {
             if (Build.VERSION.SDK_INT < 21) {
                 // In order to avoid TransactionTooLargeException for below API 21,
                 // we need to cut the list so that it doesn't exceed the binder transaction limit.
-                List<QueueItem> queueItemList = MediaUtils2.convertToQueueItemList(playlist);
-                List<QueueItem> truncatedList = MediaUtils2.truncateListBySize(
+                List<QueueItem> queueItemList = MediaUtils.convertToQueueItemList(playlist);
+                List<QueueItem> truncatedList = MediaUtils.truncateListBySize(
                         queueItemList, TRANSACTION_SIZE_LIMIT_IN_BYTES);
                 if (truncatedList.size() != playlist.size()) {
                     Log.i(TAG, "Sending " + truncatedList.size() + " items out of "
@@ -793,13 +788,13 @@
                 // Framework MediaSession#setQueue() uses ParceledListSlice,
                 // which means we can safely send long lists.
                 mSessionImpl.getSessionCompat().setQueue(
-                        MediaUtils2.convertToQueueItemList(playlist));
+                        MediaUtils.convertToQueueItemList(playlist));
             }
             onPlaylistMetadataChanged(metadata);
         }
 
         @Override
-        void onPlaylistMetadataChanged(MediaMetadata2 metadata) throws RemoteException {
+        void onPlaylistMetadataChanged(MediaMetadata metadata) throws RemoteException {
             // Since there is no 'queue metadata', only set title of the queue.
             CharSequence oldTitle = mSessionImpl.getSessionCompat().getController().getQueueTitle();
             CharSequence newTitle = null;
@@ -839,11 +834,6 @@
         }
 
         @Override
-        void onRoutesInfoChanged(List<Bundle> routes) throws RemoteException {
-            throw new AssertionError("This shouldn't be called.");
-        }
-
-        @Override
         void onChildrenChanged(String parentId, int itemCount, LibraryParams params)
                 throws RemoteException {
             // no-op
diff --git a/media2/src/main/java/androidx/media2/MediaSessionManager2.java b/media2/src/main/java/androidx/media2/MediaSessionManager.java
similarity index 74%
rename from media2/src/main/java/androidx/media2/MediaSessionManager2.java
rename to media2/src/main/java/androidx/media2/MediaSessionManager.java
index 76dbf85..9694802 100644
--- a/media2/src/main/java/androidx/media2/MediaSessionManager2.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionManager.java
@@ -41,63 +41,63 @@
  * in order to express their ongoing media playback state.
  *
  * @see MediaSessionCompat
- * @see MediaSession2
- * @see MediaSessionService2
- * @see MediaLibraryService2
+ * @see MediaSession
+ * @see MediaSessionService
+ * @see MediaLibraryService
  * @see MediaControllerCompat
- * @see MediaController2
- * @see MediaBrowser2
+ * @see MediaController
+ * @see MediaBrowser
  */
 @RequiresApi(28)
-public final class MediaSessionManager2 {
-    static final String TAG = "MediaSessionManager2";
+public final class MediaSessionManager {
+    static final String TAG = "MediaSessionManager";
     static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     private static final Object sLock = new Object();
     @GuardedBy("sLock")
-    private static MediaSessionManager2 sInstance;
+    private static MediaSessionManager sInstance;
 
     private final Context mContext;
 
     /**
-     * Gets an instance of MediaSessionManager2 associated with the context.
+     * Gets an instance of MediaSessionManager associated with the context.
      *
-     * @return the MediaSessionManager2 instance for this context.
+     * @return the MediaSessionManager instance for this context.
      */
-    public static @NonNull MediaSessionManager2 getInstance(@NonNull Context context) {
+    public static @NonNull MediaSessionManager getInstance(@NonNull Context context) {
         if (context == null) {
             throw new IllegalArgumentException("context cannot be null");
         }
         synchronized (sLock) {
             if (sInstance == null) {
-                sInstance = new MediaSessionManager2(context.getApplicationContext());
+                sInstance = new MediaSessionManager(context.getApplicationContext());
             }
             return sInstance;
         }
     }
 
-    private MediaSessionManager2(Context context) {
+    private MediaSessionManager(Context context) {
         mContext = context;
     }
 
     /**
-     * Gets {@link Set} of {@link SessionToken2} for {@link MediaSessionService2} regardless of
+     * Gets {@link Set} of {@link SessionToken} for {@link MediaSessionService} regardless of
      * their activeness. This list represents media apps that support background playback.
      *
      * @return set of tokens
      */
-    public @NonNull Set<SessionToken2> getSessionServiceTokens() {
-        ArraySet<SessionToken2> sessionServiceTokens = new ArraySet<>();
+    public @NonNull Set<SessionToken> getSessionServiceTokens() {
+        ArraySet<SessionToken> sessionServiceTokens = new ArraySet<>();
         PackageManager pm = mContext.getPackageManager();
         List<ResolveInfo> services = new ArrayList<>();
         // If multiple actions are declared for a service, browser gets higher priority.
         List<ResolveInfo> libraryServices = pm.queryIntentServices(
-                new Intent(MediaLibraryService2.SERVICE_INTERFACE), PackageManager.GET_META_DATA);
+                new Intent(MediaLibraryService.SERVICE_INTERFACE), PackageManager.GET_META_DATA);
         if (libraryServices != null) {
             services.addAll(libraryServices);
         }
         List<ResolveInfo> sessionServices = pm.queryIntentServices(
-                new Intent(MediaSessionService2.SERVICE_INTERFACE), PackageManager.GET_META_DATA);
+                new Intent(MediaSessionService.SERVICE_INTERFACE), PackageManager.GET_META_DATA);
         if (sessionServices != null) {
             services.addAll(sessionServices);
         }
@@ -113,13 +113,13 @@
                 continue;
             }
             ServiceInfo serviceInfo = service.serviceInfo;
-            SessionToken2 token = new SessionToken2(mContext,
+            SessionToken token = new SessionToken(mContext,
                     new ComponentName(serviceInfo.packageName, serviceInfo.name));
             sessionServiceTokens.add(token);
         }
         if (DEBUG) {
             Log.d(TAG, "Found " + sessionServiceTokens.size() + " session services");
-            for (SessionToken2 token : sessionServiceTokens) {
+            for (SessionToken token : sessionServiceTokens) {
                 Log.d(TAG, "   " + token);
             }
         }
diff --git a/media2/src/main/java/androidx/media2/MediaSessionService2.java b/media2/src/main/java/androidx/media2/MediaSessionService.java
similarity index 82%
rename from media2/src/main/java/androidx/media2/MediaSessionService2.java
rename to media2/src/main/java/androidx/media2/MediaSessionService.java
index 06a7b7e..0254d92 100644
--- a/media2/src/main/java/androidx/media2/MediaSessionService2.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionService.java
@@ -25,19 +25,19 @@
 import androidx.annotation.CallSuper;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.media2.MediaSession2.ControllerInfo;
+import androidx.media2.MediaSession.ControllerInfo;
 
 import java.util.List;
 
 /**
- * Base class for media session services, which is the service containing {@link MediaSession2}.
+ * Base class for media session services, which is the service containing {@link MediaSession}.
  * <p>
  * It's highly recommended for an app to use this if it wants to keep media playback in the
  * background.
  * <p>
- * Here are the benefits of using {@link MediaSessionService2}.
+ * Here are the benefits of using {@link MediaSessionService}.
  * <ul>
- * <li>Another app can know that your app supports {@link MediaSession2} even when your app
+ * <li>Another app can know that your app supports {@link MediaSession} even when your app
  * isn't running.
  * <li>Another app can start playback of your app even when your app isn't running.
  * </ul>
@@ -47,7 +47,7 @@
  * <pre>
  * &lt;service android:name="component_name_of_your_implementation" &gt;
  *   &lt;intent-filter&gt;
- *     &lt;action android:name="android.media.MediaSessionService2" /&gt;
+ *     &lt;action android:name="androidx.media2.MediaSessionService" /&gt;
  *   &lt;/intent-filter&gt;
  * &lt;/service&gt;</pre>
  * <p>
@@ -55,7 +55,7 @@
  * {@link android.support.v4.media.MediaBrowserCompat}. This service can handle handle it
  * automatically.
  * <p>
- * It's recommended for an app to have a single {@link MediaSessionService2} declared in the
+ * It's recommended for an app to have a single {@link MediaSessionService} declared in the
  * manifest. Otherwise, your app might be shown twice in the list of the Auto/Wearable, or another
  * app fails to pick the right session service when it wants to start the playback this app.
  * If you want to provide multiple sessions here, take a look at
@@ -71,17 +71,17 @@
  * <a name="ServiceLifecycle"></a>
  * <h3>Service Lifecycle</h3>
  * <p>
- * Session service is bound service. When a {@link MediaController2} is created for the
+ * Session service is bound service. When a {@link MediaController} is created for the
  * session service, the controller binds to the session service. {@link #onGetSession()}
  * would be called inside of the {@link #onBind(Intent)}.
  * <p>
  * After the binding, session's
- * {@link MediaSession2.SessionCallback#onConnect(MediaSession2, ControllerInfo)}
+ * {@link MediaSession.SessionCallback#onConnect(MediaSession, ControllerInfo)}
  * will be called to accept or reject connection request from a controller. If the connection is
  * rejected, the controller will unbind. If it's accepted, the controller will be available to use
  * and keep binding.
  * <p>
- * When playback is started for this session service, {@link #onUpdateNotification(MediaSession2)}
+ * When playback is started for this session service, {@link #onUpdateNotification(MediaSession)}
  * is called for the playback's session and service would become a foreground service. It's needed
  * to keep playback after the controller is destroyed. The session service becomes background
  * service when all playbacks are stopped. Apps targeting API
@@ -95,33 +95,33 @@
  * <p>
  * Any app can bind to the session service with controller, but the controller can be used only if
  * the session service accepted the connection request through
- * {@link MediaSession2.SessionCallback#onConnect(MediaSession2, ControllerInfo)}.
+ * {@link MediaSession.SessionCallback#onConnect(MediaSession, ControllerInfo)}.
  * <a name="MultipleSessions"></a>
  * <h3>Supporting Multiple Sessions</h3>
  * You may want to keep multiple playback while the app is in the background, create multiple
- * sessions and add to this service with {@link #addSession(MediaSession2)}.
+ * sessions and add to this service with {@link #addSession(MediaSession)}.
  * <p>
- * Note that {@link MediaController2} can be created with {@link SessionToken2} for
+ * Note that {@link MediaController} can be created with {@link SessionToken} for
  * connecting any session in this service. In that case, {@link #onGetSession()} will be called
  * to know which session to handle incoming connection request. Pick the best session among added
  * sessions, or create new one and return from the {@link #onGetSession()}.
  */
-public abstract class MediaSessionService2 extends Service {
+public abstract class MediaSessionService extends Service {
     /**
      * The {@link Intent} that must be declared as handled by the service.
      */
-    public static final String SERVICE_INTERFACE = "android.media.MediaSessionService2";
+    public static final String SERVICE_INTERFACE = "androidx.media2.MediaSessionService";
 
-    private final MediaSessionService2Impl mImpl;
+    private final MediaSessionServiceImpl mImpl;
 
-    public MediaSessionService2() {
+    public MediaSessionService() {
         super();
         // Note: This service doesn't have valid context at this moment.
         mImpl = createImpl();
     }
 
-    MediaSessionService2Impl createImpl() {
-        return new MediaSessionService2ImplBase();
+    MediaSessionServiceImpl createImpl() {
+        return new MediaSessionServiceImplBase();
     }
 
     /**
@@ -138,21 +138,21 @@
     }
 
     /**
-     * Called when another app has requested to get {@link MediaSession2}.
+     * Called when another app has requested to get {@link MediaSession}.
      * <p>
      * Session returned here will be added to this service automatically. You don't need to call
-     * {@link #addSession(MediaSession2)} for that.
+     * {@link #addSession(MediaSession)} for that.
      * <p>
      * Session service will accept or reject the connection with the
-     * {@link MediaSession2.SessionCallback} in the session returned here.
+     * {@link MediaSession.SessionCallback} in the session returned here.
      * <p>
      * This method is always called on the main thread.
      *
      * @return a new session
-     * @see MediaSession2.Builder
+     * @see MediaSession.Builder
      * @see #getSessions()
      */
-    public @NonNull abstract MediaSession2 onGetSession();
+    public @NonNull abstract MediaSession onGetSession();
 
     /**
      * Adds a session to this service.
@@ -161,9 +161,9 @@
      * {@link #removeSession} is called.
      *
      * @param session a session to be added.
-     * @see #removeSession(MediaSession2)
+     * @see #removeSession(MediaSession)
      */
-    public final void addSession(@NonNull MediaSession2 session) {
+    public final void addSession(@NonNull MediaSession session) {
         if (session == null) {
             throw new IllegalArgumentException("session shouldn't be null");
         }
@@ -177,9 +177,9 @@
      * Removes a session from this service.
      *
      * @param session a session to be removed.
-     * @see #addSession(MediaSession2)
+     * @see #addSession(MediaSession)
      */
-    public final void removeSession(@NonNull MediaSession2 session) {
+    public final void removeSession(@NonNull MediaSession session) {
         if (session == null) {
             throw new IllegalArgumentException("session shouldn't be null");
         }
@@ -190,7 +190,7 @@
      * Called when notification UI needs update. Override this method to show or cancel your own
      * notification UI.
      * <p>
-     * This would be called on {@link MediaSession2}'s callback executor when player state is
+     * This would be called on {@link MediaSession}'s callback executor when player state is
      * changed.
      * <p>
      * With the notification returned here, the service becomes foreground service when the playback
@@ -201,7 +201,7 @@
      * @param session a session that needs notification update.
      * @return a {@link MediaNotification}. Can be {@code null}.
      */
-    public @Nullable MediaNotification onUpdateNotification(@NonNull MediaSession2 session) {
+    public @Nullable MediaNotification onUpdateNotification(@NonNull MediaSession session) {
         if (session == null) {
             throw new IllegalArgumentException("session shouldn't be null");
         }
@@ -209,16 +209,16 @@
     }
 
     /**
-     * Gets the list of {@link MediaSession2}s that you've added to this service.
+     * Gets the list of {@link MediaSession}s that you've added to this service.
      *
      * @return sessions
      */
-    public final @NonNull List<MediaSession2> getSessions() {
+    public final @NonNull List<MediaSession> getSessions() {
         return mImpl.getSessions();
     }
 
     /**
-     * Default implementation for {@link MediaSessionService2} to handle incoming binding
+     * Default implementation for {@link MediaSessionService} to handle incoming binding
      * request. If the request is for getting the session, the intent will have action
      * {@link #SERVICE_INTERFACE}.
      * <p>
@@ -257,7 +257,7 @@
     }
 
     /**
-     * Returned by {@link #onUpdateNotification(MediaSession2)} for making session service
+     * Returned by {@link #onUpdateNotification(MediaSession)} for making session service
      * foreground service to keep playback running in the background. It's highly recommended to
      * show media style notification here.
      */
@@ -300,14 +300,14 @@
         }
     }
 
-    interface MediaSessionService2Impl {
-        void onCreate(MediaSessionService2 service);
+    interface MediaSessionServiceImpl {
+        void onCreate(MediaSessionService service);
         int onStartCommand(Intent intent, int flags, int startId);
         IBinder onBind(Intent intent);
         void onDestroy();
-        void addSession(MediaSession2 session);
-        void removeSession(MediaSession2 session);
-        MediaNotification onUpdateNotification(MediaSession2 session);
-        List<MediaSession2> getSessions();
+        void addSession(MediaSession session);
+        void removeSession(MediaSession session);
+        MediaNotification onUpdateNotification(MediaSession session);
+        List<MediaSession> getSessions();
     }
 }
diff --git a/media2/src/main/java/androidx/media2/MediaSessionService2ImplBase.java b/media2/src/main/java/androidx/media2/MediaSessionServiceImplBase.java
similarity index 61%
rename from media2/src/main/java/androidx/media2/MediaSessionService2ImplBase.java
rename to media2/src/main/java/androidx/media2/MediaSessionServiceImplBase.java
index eff821b..ad8e4cf 100644
--- a/media2/src/main/java/androidx/media2/MediaSessionService2ImplBase.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionServiceImplBase.java
@@ -31,8 +31,8 @@
 import androidx.annotation.GuardedBy;
 import androidx.collection.ArrayMap;
 import androidx.media.MediaBrowserServiceCompat;
-import androidx.media2.MediaSessionService2.MediaNotification;
-import androidx.media2.MediaSessionService2.MediaSessionService2Impl;
+import androidx.media2.MediaSessionService.MediaNotification;
+import androidx.media2.MediaSessionService.MediaSessionServiceImpl;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -40,47 +40,47 @@
 import java.util.Map;
 
 /**
- * Implementation of {@link MediaSessionService2}.
+ * Implementation of {@link MediaSessionService}.
  */
-class MediaSessionService2ImplBase implements MediaSessionService2Impl {
+class MediaSessionServiceImplBase implements MediaSessionServiceImpl {
     private static final String TAG = "MSS2ImplBase";
     private static final boolean DEBUG = true;
 
     private final Object mLock = new Object();
     @GuardedBy("mLock")
-    MediaSessionService2Stub mStub;
+    MediaSessionServiceStub mStub;
     @GuardedBy("mLock")
-    MediaSessionService2 mInstance;
+    MediaSessionService mInstance;
     @GuardedBy("mLock")
-    private Map<String, MediaSession2> mSessions = new ArrayMap<>();
+    private Map<String, MediaSession> mSessions = new ArrayMap<>();
     @GuardedBy("mLock")
     private MediaNotificationHandler mNotificationHandler;
 
-    MediaSessionService2ImplBase() {
+    MediaSessionServiceImplBase() {
     }
 
     @Override
-    public void onCreate(MediaSessionService2 service) {
+    public void onCreate(MediaSessionService service) {
         synchronized (mLock) {
             mInstance = service;
-            mStub = new MediaSessionService2Stub(this);
+            mStub = new MediaSessionServiceStub(this);
             mNotificationHandler = new MediaNotificationHandler(service);
         }
     }
 
     @Override
     public IBinder onBind(Intent intent) {
-        final MediaSessionService2 service = getInstance();
+        final MediaSessionService service = getInstance();
         if (service == null) {
             Log.w(TAG, "Service hasn't created before onBind()");
             return null;
         }
         switch (intent.getAction()) {
-            case MediaSessionService2.SERVICE_INTERFACE: {
+            case MediaSessionService.SERVICE_INTERFACE: {
                 return getServiceBinder();
             }
             case MediaBrowserServiceCompat.SERVICE_INTERFACE: {
-                final MediaSession2 session = service.onGetSession();
+                final MediaSession session = service.onGetSession();
                 addSession(session);
                 // Return a specific session's legacy binder although the Android framework caches
                 // the returned binder here and next binding request may reuse cached binder even
@@ -106,8 +106,8 @@
     }
 
     @Override
-    public void addSession(final MediaSession2 session) {
-        final MediaSession2 old;
+    public void addSession(final MediaSession session) {
+        final MediaSession old;
         synchronized (mLock) {
             old = mSessions.get(session.getId());
             if (old != null && old != session) {
@@ -130,7 +130,7 @@
     }
 
     @Override
-    public void removeSession(MediaSession2 session) {
+    public void removeSession(MediaSession session) {
         synchronized (mLock) {
             mSessions.remove(session.getId());
         }
@@ -143,11 +143,11 @@
         }
         switch (intent.getAction()) {
             case Intent.ACTION_MEDIA_BUTTON: {
-                final MediaSessionService2 instance = getInstance();
+                final MediaSessionService instance = getInstance();
                 if (instance == null) {
                     Log.wtf(TAG, "Service hasn't created");
                 }
-                final MediaSession2 session = instance.onGetSession();
+                final MediaSession session = instance.onGetSession();
                 if (session == null) {
                     Log.w(TAG, "No session for handling media key");
                     break;
@@ -163,7 +163,7 @@
     }
 
     @Override
-    public MediaNotification onUpdateNotification(MediaSession2 session) {
+    public MediaNotification onUpdateNotification(MediaSession session) {
         final MediaNotificationHandler handler;
         synchronized (mLock) {
             handler = mNotificationHandler;
@@ -175,8 +175,8 @@
     }
 
     @Override
-    public List<MediaSession2> getSessions() {
-        List<MediaSession2> list = new ArrayList<>();
+    public List<MediaSession> getSessions() {
+        List<MediaSession> list = new ArrayList<>();
         synchronized (mLock) {
             list.addAll(mSessions.values());
         }
@@ -184,7 +184,7 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    MediaSessionService2 getInstance() {
+    MediaSessionService getInstance() {
         synchronized (mLock) {
             return mInstance;
         }
@@ -197,21 +197,21 @@
     }
 
     @TargetApi(Build.VERSION_CODES.P)
-    private static final class MediaSessionService2Stub extends IMediaSessionService2.Stub
+    private static final class MediaSessionServiceStub extends IMediaSessionService.Stub
             implements AutoCloseable {
         @SuppressWarnings("WeakerAccess") /* synthetic access */
-        final WeakReference<MediaSessionService2ImplBase> mServiceImpl;
+        final WeakReference<MediaSessionServiceImplBase> mServiceImpl;
         @SuppressWarnings("WeakerAccess") /* synthetic access */
         final Handler mHandler;
 
-        MediaSessionService2Stub(final MediaSessionService2ImplBase serviceImpl) {
+        MediaSessionServiceStub(final MediaSessionServiceImplBase serviceImpl) {
             mServiceImpl = new WeakReference<>(serviceImpl);
             mHandler = new Handler(serviceImpl.getInstance().getMainLooper());
         }
 
         @Override
-        public void connect(final IMediaController2 caller, final String packageName) {
-            final MediaSessionService2ImplBase serviceImpl = mServiceImpl.get();
+        public void connect(final IMediaController caller, final String packageName) {
+            final MediaSessionServiceImplBase serviceImpl = mServiceImpl.get();
             if (serviceImpl == null) {
                 if (DEBUG) {
                     Log.d(TAG, "ServiceImpl isn't available");
@@ -220,59 +220,64 @@
             }
             final int pid = Binder.getCallingPid();
             final int uid = Binder.getCallingUid();
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    boolean shouldNotifyDisconnected = true;
-                    try {
-                        final MediaSessionService2ImplBase serviceImpl = mServiceImpl.get();
-                        if (serviceImpl == null) {
-                            if (DEBUG) {
-                                Log.d(TAG, "ServiceImpl isn't available");
-                            }
-                            return;
-                        }
-                        final MediaSessionService2 service = serviceImpl.getInstance();
-                        if (service == null) {
-                            if (DEBUG) {
-                                Log.d(TAG, "Service isn't available");
-                            }
-                            return;
-                        }
-                        if (DEBUG) {
-                            Log.d(TAG, "Handling incoming connection request from the controller"
-                                    + ", controller=" + packageName);
-
-                        }
-                        final MediaSession2 session;
+            final long token = Binder.clearCallingIdentity();
+            try {
+                mHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        boolean shouldNotifyDisconnected = true;
                         try {
-                            session = service.onGetSession();
-                            service.addSession(session);
-                            shouldNotifyDisconnected = false;
-
-                            session.handleControllerConnectionFromService(caller, packageName,
-                                    pid, uid);
-                        } catch (Exception e) {
-                            // Don't propagate exception in service to the controller.
-                            Log.w(TAG, "Failed to add a session to session service", e);
-                        }
-                    } finally {
-                        // Trick to call onDisconnected() in one place.
-                        if (shouldNotifyDisconnected) {
-                            if (DEBUG) {
-                                Log.d(TAG, "Service has destroyed prematurely."
-                                        + " Rejecting connection");
+                            final MediaSessionServiceImplBase serviceImpl = mServiceImpl.get();
+                            if (serviceImpl == null) {
+                                if (DEBUG) {
+                                    Log.d(TAG, "ServiceImpl isn't available");
+                                }
+                                return;
                             }
+                            final MediaSessionService service = serviceImpl.getInstance();
+                            if (service == null) {
+                                if (DEBUG) {
+                                    Log.d(TAG, "Service isn't available");
+                                }
+                                return;
+                            }
+                            if (DEBUG) {
+                                Log.d(TAG, "Handling incoming connection request from the"
+                                        + " controller, controller=" + packageName);
+
+                            }
+                            final MediaSession session;
                             try {
-                                caller.onDisconnected();
-                            } catch (RemoteException e) {
-                                // Controller may be died prematurely.
-                                // Not an issue because we'll ignore it anyway.
+                                session = service.onGetSession();
+                                service.addSession(session);
+                                shouldNotifyDisconnected = false;
+
+                                session.handleControllerConnectionFromService(caller, packageName,
+                                        pid, uid);
+                            } catch (Exception e) {
+                                // Don't propagate exception in service to the controller.
+                                Log.w(TAG, "Failed to add a session to session service", e);
+                            }
+                        } finally {
+                            // Trick to call onDisconnected() in one place.
+                            if (shouldNotifyDisconnected) {
+                                if (DEBUG) {
+                                    Log.d(TAG, "Service has destroyed prematurely."
+                                            + " Rejecting connection");
+                                }
+                                try {
+                                    caller.onDisconnected();
+                                } catch (RemoteException e) {
+                                    // Controller may be died prematurely.
+                                    // Not an issue because we'll ignore it anyway.
+                                }
                             }
                         }
                     }
-                }
-            });
+                });
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
         }
 
         @Override
diff --git a/media2/src/main/java/androidx/media2/MediaSessionService2LegacyStub.java b/media2/src/main/java/androidx/media2/MediaSessionServiceLegacyStub.java
similarity index 85%
rename from media2/src/main/java/androidx/media2/MediaSessionService2LegacyStub.java
rename to media2/src/main/java/androidx/media2/MediaSessionServiceLegacyStub.java
index aceff8c..dab23c2 100644
--- a/media2/src/main/java/androidx/media2/MediaSessionService2LegacyStub.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionServiceLegacyStub.java
@@ -24,22 +24,22 @@
 import androidx.media.MediaBrowserServiceCompat;
 import androidx.media.MediaSessionManager;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.MediaSession2Impl;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.MediaSessionImpl;
 
 import java.util.List;
 
 /**
  * Implementation of {@link MediaBrowserServiceCompat} for interoperability between
- * {@link MediaLibraryService2} and {@link android.support.v4.media.MediaBrowserCompat}.
+ * {@link MediaLibraryService} and {@link android.support.v4.media.MediaBrowserCompat}.
  */
-class MediaSessionService2LegacyStub extends MediaBrowserServiceCompat {
-    private final MediaSession2Impl mSessionImpl;
+class MediaSessionServiceLegacyStub extends MediaBrowserServiceCompat {
+    private final MediaSessionImpl mSessionImpl;
     private final ConnectedControllersManager<RemoteUserInfo> mConnectedControllersManager;
 
     final MediaSessionManager mManager;
 
-    MediaSessionService2LegacyStub(Context context, MediaSession2Impl sessionImpl,
+    MediaSessionServiceLegacyStub(Context context, MediaSessionImpl sessionImpl,
             MediaSessionCompat.Token token) {
         super();
         attachToBaseContext(context);
@@ -64,14 +64,14 @@
         // not.
         // Because of the reason, just call onConnect() directly here. onConnect() has documentation
         // that it may be called on the main thread.
-        SessionCommandGroup2 connectResult = mSessionImpl.getCallback().onConnect(
+        SessionCommandGroup connectResult = mSessionImpl.getCallback().onConnect(
                 mSessionImpl.getInstance(), controller);
         if (connectResult == null) {
             return null;
         }
         mConnectedControllersManager.addController(info, controller, connectResult);
         // No library root, but keep browser compat connected to allow getting session.
-        return MediaUtils2.sDefaultBrowserRoot;
+        return MediaUtils.sDefaultBrowserRoot;
     }
 
     @Override
diff --git a/media2/src/main/java/androidx/media2/MediaSession2Stub.java b/media2/src/main/java/androidx/media2/MediaSessionStub.java
similarity index 65%
rename from media2/src/main/java/androidx/media2/MediaSession2Stub.java
rename to media2/src/main/java/androidx/media2/MediaSessionStub.java
index 4f66691..21a8c18 100644
--- a/media2/src/main/java/androidx/media2/MediaSession2Stub.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionStub.java
@@ -16,13 +16,13 @@
 
 package androidx.media2;
 
-import static androidx.media2.BaseResult2.RESULT_CODE_UNKNOWN_ERROR;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_BAD_VALUE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_INVALID_STATE;
-import static androidx.media2.MediaSession2.SessionResult.RESULT_CODE_SUCCESS;
-import static androidx.media2.MediaUtils2.DIRECT_EXECUTOR;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_CUSTOM;
-import static androidx.media2.SessionCommand2.COMMAND_VERSION_CURRENT;
+import static androidx.media2.BaseResult.RESULT_CODE_UNKNOWN_ERROR;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_BAD_VALUE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_INVALID_STATE;
+import static androidx.media2.MediaSession.SessionResult.RESULT_CODE_SUCCESS;
+import static androidx.media2.MediaUtils.DIRECT_EXECUTOR;
+import static androidx.media2.SessionCommand.COMMAND_CODE_CUSTOM;
+import static androidx.media2.SessionCommand.COMMAND_VERSION_CURRENT;
 
 import android.app.PendingIntent;
 import android.content.Context;
@@ -41,19 +41,19 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.media.MediaSessionManager;
-import androidx.media2.MediaController2.PlaybackInfo;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaLibraryService2.LibraryResult;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession;
-import androidx.media2.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionImpl;
-import androidx.media2.MediaSession2.CommandButton;
-import androidx.media2.MediaSession2.ControllerCb;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.MediaSession2Impl;
-import androidx.media2.MediaSession2.SessionResult;
-import androidx.media2.MediaSession2ImplBase.PlayerTask;
-import androidx.media2.SessionCommand2.CommandCode;
-import androidx.media2.SessionPlayer2.PlayerResult;
+import androidx.media2.MediaController.PlaybackInfo;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaLibraryService.LibraryResult;
+import androidx.media2.MediaLibraryService.MediaLibrarySession;
+import androidx.media2.MediaLibraryService.MediaLibrarySession.MediaLibrarySessionImpl;
+import androidx.media2.MediaSession.CommandButton;
+import androidx.media2.MediaSession.ControllerCb;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.MediaSessionImpl;
+import androidx.media2.MediaSession.SessionResult;
+import androidx.media2.MediaSessionImplBase.PlayerTask;
+import androidx.media2.SessionCommand.CommandCode;
+import androidx.media2.SessionPlayer.PlayerResult;
 import androidx.versionedparcelable.ParcelImpl;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -65,28 +65,28 @@
 import java.util.concurrent.TimeUnit;
 
 /**
- * Handles incoming commands from {@link MediaController2} and {@link MediaBrowser2}
- * to both {@link MediaSession2} and {@link MediaLibrarySession}.
+ * Handles incoming commands from {@link MediaController} and {@link MediaBrowser}
+ * to both {@link MediaSession} and {@link MediaLibrarySession}.
  * <p>
  * We cannot create a subclass for library service specific function because AIDL doesn't support
  * subclassing and it's generated stub class is an abstract class.
  */
-class MediaSession2Stub extends IMediaSession2.Stub {
-    private static final String TAG = "MediaSession2Stub";
+class MediaSessionStub extends IMediaSession.Stub {
+    private static final String TAG = "MediaSessionStub";
     private static final boolean DEBUG = true; //Log.isLoggable(TAG, Log.DEBUG);
     private static final boolean RETHROW_EXCEPTION = true;
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    static final SparseArray<SessionCommand2> sCommandsForOnCommandRequest =
+    static final SparseArray<SessionCommand> sCommandsForOnCommandRequest =
             new SparseArray<>();
 
     static {
-        SessionCommandGroup2 group = new SessionCommandGroup2.Builder()
+        SessionCommandGroup group = new SessionCommandGroup.Builder()
                 .addAllPlayerCommands(COMMAND_VERSION_CURRENT)
                 .addAllVolumeCommands(COMMAND_VERSION_CURRENT)
                 .build();
-        Set<SessionCommand2> commands = group.getCommands();
-        for (SessionCommand2 command : commands) {
+        Set<SessionCommand> commands = group.getCommands();
+        for (SessionCommand command : commands) {
             sCommandsForOnCommandRequest.append(command.getCommandCode(), command);
         }
     }
@@ -96,7 +96,7 @@
 
     final Object mLock = new Object();
 
-    final MediaSession2Impl mSessionImpl;
+    final MediaSessionImpl mSessionImpl;
     final Context mContext;
     final MediaSessionManager mSessionManager;
 
@@ -104,7 +104,7 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final Set<IBinder> mConnectingControllers = new HashSet<>();
 
-    MediaSession2Stub(MediaSession2Impl sessionImpl) {
+    MediaSessionStub(MediaSessionImpl sessionImpl) {
         mSessionImpl = sessionImpl;
         mContext = mSessionImpl.getContext();
         mSessionManager = MediaSessionManager.getSessionManager(mContext);
@@ -157,158 +157,168 @@
         }
     }
 
-    private void dispatchSessionTask(@NonNull IMediaController2 caller, int seq,
+    private void dispatchSessionTask(@NonNull IMediaController caller, int seq,
             final @CommandCode int commandCode,
             final @NonNull SessionTask task) {
         dispatchSessionTaskInternal(caller, seq, null, commandCode, task);
     }
 
-    private void dispatchSessionTask(@NonNull IMediaController2 caller, int seq,
-            @NonNull final SessionCommand2 sessionCommand,
+    private void dispatchSessionTask(@NonNull IMediaController caller, int seq,
+            @NonNull final SessionCommand sessionCommand,
             @NonNull final SessionTask task) {
         dispatchSessionTaskInternal(caller, seq, sessionCommand, COMMAND_CODE_CUSTOM, task);
     }
 
-    private void dispatchSessionTaskInternal(@NonNull IMediaController2 caller, final int seq,
-            final @Nullable SessionCommand2 sessionCommand,
+    private void dispatchSessionTaskInternal(@NonNull IMediaController caller, final int seq,
+            final @Nullable SessionCommand sessionCommand,
             final @CommandCode int commandCode,
             final @NonNull SessionTask task) {
-        final ControllerInfo controller = mConnectedControllersManager.getController(
-                caller.asBinder());
-        if (mSessionImpl.isClosed() || controller == null) {
-            return;
-        }
-        mSessionImpl.getCallbackExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                if (!mConnectedControllersManager.isConnected(controller)) {
-                    return;
-                }
-                SessionCommand2 commandForOnCommandRequest;
-                if (sessionCommand != null) {
-                    if (!mConnectedControllersManager.isAllowedCommand(
-                            controller, sessionCommand)) {
-                        if (DEBUG) {
-                            Log.d(TAG, "Command (" + sessionCommand + ") from "
-                                    + controller + " isn't allowed.");
-                        }
+        final long token = Binder.clearCallingIdentity();
+        try {
+            final ControllerInfo controller = mConnectedControllersManager.getController(
+                    caller.asBinder());
+            if (mSessionImpl.isClosed() || controller == null) {
+                return;
+            }
+            mSessionImpl.getCallbackExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    if (!mConnectedControllersManager.isConnected(controller)) {
                         return;
                     }
-                    commandForOnCommandRequest = sCommandsForOnCommandRequest.get(
-                            sessionCommand.getCommandCode());
-                } else {
-                    if (!mConnectedControllersManager.isAllowedCommand(controller, commandCode)) {
-                        if (DEBUG) {
-                            Log.d(TAG, "Command (" + commandCode + ") from "
-                                    + controller + " isn't allowed.");
-                        }
-                        return;
-                    }
-                    commandForOnCommandRequest = sCommandsForOnCommandRequest.get(
-                            commandCode);
-                }
-                try {
-                    if (commandForOnCommandRequest != null) {
-                        int resultCode = mSessionImpl.getCallback().onCommandRequest(
-                                mSessionImpl.getInstance(), controller, commandForOnCommandRequest);
-                        if (resultCode != RESULT_CODE_SUCCESS) {
-                            // Don't run rejected command.
+                    SessionCommand commandForOnCommandRequest;
+                    if (sessionCommand != null) {
+                        if (!mConnectedControllersManager.isAllowedCommand(
+                                controller, sessionCommand)) {
                             if (DEBUG) {
-                                Log.d(TAG, "Command (" + commandForOnCommandRequest + ") from "
-                                        + controller + " was rejected by " + mSessionImpl
-                                        + ", code=" + resultCode);
+                                Log.d(TAG, "Command (" + sessionCommand + ") from "
+                                        + controller + " isn't allowed.");
                             }
-                            sendSessionResult(controller, seq, resultCode);
                             return;
                         }
+                        commandForOnCommandRequest = sCommandsForOnCommandRequest.get(
+                                sessionCommand.getCommandCode());
+                    } else {
+                        if (!mConnectedControllersManager.isAllowedCommand(controller,
+                                commandCode)) {
+                            if (DEBUG) {
+                                Log.d(TAG, "Command (" + commandCode + ") from "
+                                        + controller + " isn't allowed.");
+                            }
+                            return;
+                        }
+                        commandForOnCommandRequest = sCommandsForOnCommandRequest.get(
+                                commandCode);
                     }
-                    if (task instanceof SessionPlayerTask) {
-                        final ListenableFuture<PlayerResult> future =
-                                ((SessionPlayerTask) task).run(controller);
-                        if (future == null) {
-                            throw new RuntimeException("SessionPlayer has returned null,"
-                                    + " commandCode=" + commandCode);
-                        } else {
-                            future.addListener(new Runnable() {
-                                @Override
-                                public void run() {
-                                    try {
-                                        sendPlayerResult(controller, seq,
-                                                future.get(0, TimeUnit.MILLISECONDS));
-                                    } catch (Exception e) {
-                                        Log.w(TAG, "Cannot obtain PlayerResult after the"
-                                                + " command is finished", e);
-                                        sendSessionResult(controller, seq,
-                                                RESULT_CODE_INVALID_STATE);
-                                    }
+                    try {
+                        if (commandForOnCommandRequest != null) {
+                            int resultCode = mSessionImpl.getCallback().onCommandRequest(
+                                    mSessionImpl.getInstance(), controller,
+                                    commandForOnCommandRequest);
+                            if (resultCode != RESULT_CODE_SUCCESS) {
+                                // Don't run rejected command.
+                                if (DEBUG) {
+                                    Log.d(TAG, "Command (" + commandForOnCommandRequest
+                                            + ") from " + controller + " was rejected by "
+                                            + mSessionImpl + ", code=" + resultCode);
                                 }
-                            }, DIRECT_EXECUTOR);
+                                sendSessionResult(controller, seq, resultCode);
+                                return;
+                            }
                         }
-                    } else if (task instanceof SessionCallbackTask) {
-                        final Object result = ((SessionCallbackTask) task).run(controller);
-                        if (result == null) {
-                            throw new RuntimeException("SessionCallback has returned null,"
-                                    + " commandCode=" + commandCode);
-                        } else if (result instanceof Integer) {
-                            sendSessionResult(controller, seq, (Integer) result);
-                        } else if (result instanceof SessionResult) {
-                            sendSessionResult(controller, seq, (SessionResult) result);
+                        if (task instanceof SessionPlayerTask) {
+                            final ListenableFuture<PlayerResult> future =
+                                    ((SessionPlayerTask) task).run(controller);
+                            if (future == null) {
+                                throw new RuntimeException("SessionPlayer has returned null,"
+                                        + " commandCode=" + commandCode);
+                            } else {
+                                future.addListener(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        try {
+                                            sendPlayerResult(controller, seq,
+                                                    future.get(0, TimeUnit.MILLISECONDS));
+                                        } catch (Exception e) {
+                                            Log.w(TAG, "Cannot obtain PlayerResult after the"
+                                                    + " command is finished", e);
+                                            sendSessionResult(controller, seq,
+                                                    RESULT_CODE_INVALID_STATE);
+                                        }
+                                    }
+                                }, DIRECT_EXECUTOR);
+                            }
+                        } else if (task instanceof SessionCallbackTask) {
+                            final Object result = ((SessionCallbackTask) task).run(controller);
+                            if (result == null) {
+                                throw new RuntimeException("SessionCallback has returned null,"
+                                        + " commandCode=" + commandCode);
+                            } else if (result instanceof Integer) {
+                                sendSessionResult(controller, seq, (Integer) result);
+                            } else if (result instanceof SessionResult) {
+                                sendSessionResult(controller, seq, (SessionResult) result);
+                            } else if (DEBUG) {
+                                throw new RuntimeException("Unexpected return type " + result
+                                        + ". Fix bug");
+                            }
+                        } else if (task instanceof LibrarySessionCallbackTask) {
+                            final Object result = ((LibrarySessionCallbackTask) task).run(
+                                    controller);
+                            if (result == null) {
+                                throw new RuntimeException("LibrarySessionCallback has returned"
+                                        + " null, commandCode=" + commandCode);
+                            } else if (result instanceof Integer) {
+                                sendLibraryResult(controller, seq, (Integer) result);
+                            } else if (result instanceof LibraryResult) {
+                                sendLibraryResult(controller, seq, (LibraryResult) result);
+                            } else if (DEBUG) {
+                                throw new RuntimeException("Unexpected return type " + result
+                                        + ". Fix bug");
+                            }
                         } else if (DEBUG) {
-                            throw new RuntimeException("Unexpected return type " + result
-                                    + ". Fix bug");
+                            throw new RuntimeException("Unknown task " + task + ". Fix bug");
                         }
-                    } else if (task instanceof LibrarySessionCallbackTask) {
-                        final Object result = ((LibrarySessionCallbackTask) task).run(controller);
-                        if (result == null) {
-                            throw new RuntimeException("LibrarySessionCallback has returned"
-                                    + " null, commandCode=" + commandCode);
-                        } else if (result instanceof Integer) {
-                            sendLibraryResult(controller, seq, (Integer) result);
-                        } else if (result instanceof LibraryResult) {
-                            sendLibraryResult(controller, seq, (LibraryResult) result);
-                        } else if (DEBUG) {
-                            throw new RuntimeException("Unexpected return type " + result
-                                    + ". Fix bug");
+                    } catch (RemoteException e) {
+                        // Currently it's TransactionTooLargeException or DeadSystemException.
+                        // We'd better to leave log for those cases because
+                        //   - TransactionTooLargeException means that we may need to fix our code.
+                        //     (e.g. add pagination or special way to deliver Bitmap)
+                        //   - DeadSystemException means that errors around it can be ignored.
+                        Log.w(TAG, "Exception in " + controller.toString(), e);
+                    } catch (Exception e) {
+                        // Any random exception may be happen inside
+                        // of the session player / callback.
+
+                        if (RETHROW_EXCEPTION) {
+                            throw e;
                         }
-                    } else if (DEBUG) {
-                        throw new RuntimeException("Unknown task " + task + ". Fix bug");
-                    }
-                } catch (RemoteException e) {
-                    // Currently it's TransactionTooLargeException or DeadSystemException.
-                    // We'd better to leave log for those cases because
-                    //   - TransactionTooLargeException means that we may need to fix our code.
-                    //     (e.g. add pagination or special way to deliver Bitmap)
-                    //   - DeadSystemException means that errors around it can be ignored.
-                    Log.w(TAG, "Exception in " + controller.toString(), e);
-                } catch (Exception e) {
-                    // Any random exception may be happen inside of the session player / callback.
-                    if (RETHROW_EXCEPTION) {
-                        throw e;
-                    }
-                    if (task instanceof PlayerTask) {
-                        sendPlayerResult(controller, seq,
-                                new PlayerResult(PlayerResult.RESULT_CODE_UNKNOWN_ERROR, null));
-                    } else if (task instanceof SessionCallbackTask) {
-                        sendSessionResult(controller, seq,
-                                SessionResult.RESULT_CODE_UNKNOWN_ERROR);
-                    } else if (task instanceof LibrarySessionCallbackTask) {
-                        sendLibraryResult(controller, seq,
-                                LibraryResult.RESULT_CODE_UNKNOWN_ERROR);
+                        if (task instanceof PlayerTask) {
+                            sendPlayerResult(controller, seq,
+                                    new PlayerResult(PlayerResult.RESULT_CODE_UNKNOWN_ERROR, null));
+                        } else if (task instanceof SessionCallbackTask) {
+                            sendSessionResult(controller, seq,
+                                    SessionResult.RESULT_CODE_UNKNOWN_ERROR);
+                        } else if (task instanceof LibrarySessionCallbackTask) {
+                            sendLibraryResult(controller, seq,
+                                    LibraryResult.RESULT_CODE_UNKNOWN_ERROR);
+                        }
                     }
                 }
-            }
-        });
+            });
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
     }
 
-    private void dispatchLibrarySessionTask(@NonNull IMediaController2 caller, int seq,
+    private void dispatchLibrarySessionTask(@NonNull IMediaController caller, int seq,
             @CommandCode final int commandCode, final @NonNull LibrarySessionCallbackTask task) {
         if (!(mSessionImpl instanceof MediaLibrarySessionImpl)) {
-            throw new RuntimeException("MediaSession2 cannot handle MediaLibrarySession command");
+            throw new RuntimeException("MediaSession cannot handle MediaLibrarySession command");
         }
         dispatchSessionTaskInternal(caller, seq, null, commandCode, task);
     }
 
-    void connect(final IMediaController2 caller, final String callingPackage, final int pid,
+    void connect(final IMediaController caller, final String callingPackage, final int pid,
             final int uid) {
         MediaSessionManager.RemoteUserInfo
                 remoteUserInfo = new MediaSessionManager.RemoteUserInfo(callingPackage, pid, uid);
@@ -329,7 +339,7 @@
                     // (e.g. setCustomLayout()) instead of pending them.
                     mConnectingControllers.add(callbackBinder);
                 }
-                SessionCommandGroup2 allowedCommands = mSessionImpl.getCallback().onConnect(
+                SessionCommandGroup allowedCommands = mSessionImpl.getCallback().onConnect(
                         mSessionImpl.getInstance(), controllerInfo);
                 // Don't reject connection for the request from trusted app.
                 // Otherwise server will fail to retrieve session's information to dispatch
@@ -343,7 +353,7 @@
                     if (allowedCommands == null) {
                         // For trusted apps, send non-null allowed commands to keep
                         // connection.
-                        allowedCommands = new SessionCommandGroup2();
+                        allowedCommands = new SessionCommandGroup();
                     }
                     synchronized (mLock) {
                         mConnectingControllers.remove(callbackBinder);
@@ -355,26 +365,26 @@
                     // session/controller.
                     // Note: We're doing this after the onConnectionChanged(), but there's no
                     //       guarantee that events here are notified after the onConnected()
-                    //       because IMediaController2 is oneway (i.e. async call) and Stub will
+                    //       because IMediaController is oneway (i.e. async call) and Stub will
                     //       use thread poll for incoming calls.
                     final int playerState = mSessionImpl.getPlayerState();
-                    final ParcelImpl currentItem = MediaUtils2.toParcelable(
+                    final ParcelImpl currentItem = MediaUtils.toParcelable(
                             mSessionImpl.getCurrentMediaItem());
                     final long positionEventTimeMs = SystemClock.elapsedRealtime();
                     final long positionMs = mSessionImpl.getCurrentPosition();
                     final float playbackSpeed = mSessionImpl.getPlaybackSpeed();
                     final long bufferedPositionMs = mSessionImpl.getBufferedPosition();
                     final ParcelImpl playbackInfo =
-                            MediaUtils2.toParcelable(mSessionImpl.getPlaybackInfo());
+                            MediaUtils.toParcelable(mSessionImpl.getPlaybackInfo());
                     final int repeatMode = mSessionImpl.getRepeatMode();
                     final int shuffleMode = mSessionImpl.getShuffleMode();
                     final PendingIntent sessionActivity = mSessionImpl.getSessionActivity();
-                    final List<MediaItem2> playlist =
+                    final List<MediaItem> playlist =
                             allowedCommands.hasCommand(
-                                    SessionCommand2.COMMAND_CODE_PLAYER_GET_PLAYLIST)
+                                    SessionCommand.COMMAND_CODE_PLAYER_GET_PLAYLIST)
                                     ? mSessionImpl.getPlaylist() : null;
                     final ParcelImplListSlice playlistSlice =
-                            MediaUtils2.convertMediaItem2ListToParcelImplListSlice(playlist);
+                            MediaUtils.convertMediaItemListToParcelImplListSlice(playlist);
 
                     // Double check if session is still there, because close() can be called in
                     // another thread.
@@ -382,8 +392,8 @@
                         return;
                     }
                     try {
-                        caller.onConnected(MediaSession2Stub.this,
-                                MediaUtils2.toParcelable(allowedCommands),
+                        caller.onConnected(MediaSessionStub.this,
+                                MediaUtils.toParcelable(allowedCommands),
                                 playerState, currentItem, positionEventTimeMs, positionMs,
                                 playbackSpeed, bufferedPositionMs, playbackInfo, repeatMode,
                                 shuffleMode, playlistSlice, sessionActivity);
@@ -410,19 +420,19 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     @Nullable
-    MediaItem2 convertMediaItem2OnExecutor(ControllerInfo controller,
+    MediaItem convertMediaItemOnExecutor(ControllerInfo controller,
             @NonNull String mediaId) {
         if (TextUtils.isEmpty(mediaId)) {
             Log.w(TAG, "Media ID shouldn't be null");
             return null;
         }
-        MediaItem2 newItem = mSessionImpl.getCallback().onCreateMediaItem(
+        MediaItem newItem = mSessionImpl.getCallback().onCreateMediaItem(
                 mSessionImpl.getInstance(), controller, mediaId);
         if (newItem == null) {
             Log.w(TAG, "onCreateMediaItem(mediaId=" + mediaId + ") returned null. Ignoring");
         } else if (newItem.getMetadata() == null
                 || !TextUtils.equals(mediaId,
-                        newItem.getMetadata().getString(MediaMetadata2.METADATA_KEY_MEDIA_ID))) {
+                        newItem.getMetadata().getString(MediaMetadata.METADATA_KEY_MEDIA_ID))) {
             throw new RuntimeException("onCreateMediaItem(mediaId=" + mediaId + "): media ID in the"
                     + " returned media item should match");
         }
@@ -434,44 +444,61 @@
     //////////////////////////////////////////////////////////////////////////////////////////////
 
     @Override
-    public void connect(final IMediaController2 caller, int seq, final String callingPackage)
+    public void connect(final IMediaController caller, int seq, final String callingPackage)
             throws RuntimeException {
         if (caller == null || TextUtils.isEmpty(callingPackage)) {
             return;
         }
-        connect(caller, callingPackage, Binder.getCallingPid(), Binder.getCallingUid());
+        final int pid = Binder.getCallingPid();
+        final int uid = Binder.getCallingUid();
+        final long token = Binder.clearCallingIdentity();
+        try {
+            connect(caller, callingPackage, pid, uid);
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
     }
 
     @Override
-    public void release(final IMediaController2 caller, int seq) throws RemoteException {
+    public void release(final IMediaController caller, int seq) throws RemoteException {
         if (caller == null) {
             return;
         }
-        mConnectedControllersManager.removeController(caller.asBinder());
+        final long token = Binder.clearCallingIdentity();
+        try {
+            mConnectedControllersManager.removeController(caller.asBinder());
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
     }
 
     @Override
-    public void onControllerResult(final IMediaController2 caller, int seq,
+    public void onControllerResult(final IMediaController caller, int seq,
             final ParcelImpl controllerResult) {
         if (caller == null || controllerResult == null) {
             return;
         }
-        SequencedFutureManager manager = mConnectedControllersManager.getSequencedFutureManager(
-                caller.asBinder());
-        if (manager == null) {
-            return;
+        final long token = Binder.clearCallingIdentity();
+        try {
+            SequencedFutureManager manager = mConnectedControllersManager.getSequencedFutureManager(
+                    caller.asBinder());
+            if (manager == null) {
+                return;
+            }
+            MediaController.ControllerResult result = MediaUtils.fromParcelable(controllerResult);
+            manager.setFutureResult(seq, SessionResult.from(result));
+        } finally {
+            Binder.restoreCallingIdentity(token);
         }
-        MediaController2.ControllerResult result = MediaUtils2.fromParcelable(controllerResult);
-        manager.setFutureResult(seq, SessionResult.from(result));
     }
 
     @Override
-    public void setVolumeTo(final IMediaController2 caller, int seq, final int value,
+    public void setVolumeTo(final IMediaController caller, int seq, final int value,
             final int flags) throws RuntimeException {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_VOLUME_SET_VOLUME,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_VOLUME_SET_VOLUME,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -486,12 +513,12 @@
     }
 
     @Override
-    public void adjustVolume(IMediaController2 caller, int seq, final int direction,
+    public void adjustVolume(IMediaController caller, int seq, final int direction,
             final int flags) throws RuntimeException {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_VOLUME_ADJUST_VOLUME,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_VOLUME_ADJUST_VOLUME,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -506,11 +533,11 @@
     }
 
     @Override
-    public void play(IMediaController2 caller, int seq) throws RuntimeException {
+    public void play(IMediaController caller, int seq) throws RuntimeException {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_PLAY,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_PLAY,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -520,11 +547,11 @@
     }
 
     @Override
-    public void pause(IMediaController2 caller, int seq) throws RuntimeException {
+    public void pause(IMediaController caller, int seq) throws RuntimeException {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_PAUSE,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_PAUSE,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -534,11 +561,11 @@
     }
 
     @Override
-    public void prepare(IMediaController2 caller, int seq) throws RuntimeException {
+    public void prepare(IMediaController caller, int seq) throws RuntimeException {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_PREPARE,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_PREPARE,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -548,11 +575,11 @@
     }
 
     @Override
-    public void fastForward(IMediaController2 caller, int seq) {
+    public void fastForward(IMediaController caller, int seq) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_FAST_FORWARD,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -563,11 +590,11 @@
     }
 
     @Override
-    public void rewind(IMediaController2 caller, int seq) {
+    public void rewind(IMediaController caller, int seq) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_REWIND,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_REWIND,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -578,11 +605,11 @@
     }
 
     @Override
-    public void skipForward(IMediaController2 caller, int seq) {
+    public void skipForward(IMediaController caller, int seq) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_SKIP_FORWARD,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_SKIP_FORWARD,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -593,11 +620,11 @@
     }
 
     @Override
-    public void skipBackward(IMediaController2 caller, int seq) {
+    public void skipBackward(IMediaController caller, int seq) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_SKIP_BACKWARD,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_SKIP_BACKWARD,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -608,11 +635,11 @@
     }
 
     @Override
-    public void seekTo(IMediaController2 caller, int seq, final long pos) throws RuntimeException {
+    public void seekTo(IMediaController caller, int seq, final long pos) throws RuntimeException {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_SEEK_TO,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -622,12 +649,12 @@
     }
 
     @Override
-    public void onCustomCommand(final IMediaController2 caller, final int seq,
+    public void onCustomCommand(final IMediaController caller, final int seq,
             final ParcelImpl command, final Bundle args) {
         if (caller == null || command == null) {
             return;
         }
-        final SessionCommand2 sessionCommand = MediaUtils2.fromParcelable(command);
+        final SessionCommand sessionCommand = MediaUtils.fromParcelable(command);
         dispatchSessionTask(caller, seq, sessionCommand, new SessionCallbackTask<SessionResult>() {
             @Override
             public SessionResult run(final ControllerInfo controller) {
@@ -647,12 +674,12 @@
     }
 
     @Override
-    public void prepareFromUri(final IMediaController2 caller, int seq, final Uri uri,
+    public void prepareFromUri(final IMediaController caller, int seq, final Uri uri,
             final Bundle extras) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_URI,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -667,12 +694,12 @@
     }
 
     @Override
-    public void prepareFromSearch(final IMediaController2 caller, int seq, final String query,
+    public void prepareFromSearch(final IMediaController caller, int seq, final String query,
             final Bundle extras) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -688,13 +715,13 @@
     }
 
     @Override
-    public void prepareFromMediaId(final IMediaController2 caller, int seq, final String mediaId,
+    public void prepareFromMediaId(final IMediaController caller, int seq, final String mediaId,
             final Bundle extras) {
         if (caller == null) {
             return;
         }
         dispatchSessionTask(caller, seq,
-                SessionCommand2.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
+                SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -710,12 +737,12 @@
     }
 
     @Override
-    public void playFromUri(final IMediaController2 caller, int seq, final Uri uri,
+    public void playFromUri(final IMediaController caller, int seq, final Uri uri,
             final Bundle extras) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_URI,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -730,12 +757,12 @@
     }
 
     @Override
-    public void playFromSearch(final IMediaController2 caller, int seq, final String query,
+    public void playFromSearch(final IMediaController caller, int seq, final String query,
             final Bundle extras) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -750,12 +777,12 @@
     }
 
     @Override
-    public void playFromMediaId(final IMediaController2 caller, int seq, final String mediaId,
+    public void playFromMediaId(final IMediaController caller, int seq, final String mediaId,
             final Bundle extras) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -771,13 +798,13 @@
     }
 
     @Override
-    public void setRating(final IMediaController2 caller, int seq, final String mediaId,
-            final ParcelImpl rating) {
-        if (caller == null || rating == null) {
+    public void setRating(final IMediaController caller, int seq, final String mediaId,
+            final ParcelImpl ratingParcelable) {
+        if (caller == null || ratingParcelable == null) {
             return;
         }
-        final Rating2 rating2 = MediaUtils2.fromParcelable(rating);
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_SET_RATING,
+        final Rating rating = MediaUtils.fromParcelable(ratingParcelable);
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_SESSION_SET_RATING,
                 new SessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -785,22 +812,22 @@
                             Log.w(TAG, "setRating(): Ignoring empty mediaId from " + controller);
                             return RESULT_CODE_BAD_VALUE;
                         }
-                        if (rating2 == null) {
+                        if (rating == null) {
                             Log.w(TAG, "setRating(): Ignoring null rating from " + controller);
                             return RESULT_CODE_BAD_VALUE;
                         }
                         return mSessionImpl.getCallback().onSetRating(
-                                mSessionImpl.getInstance(), controller, mediaId, rating2);
+                                mSessionImpl.getInstance(), controller, mediaId, rating);
                     }
                 });
     }
 
     @Override
-    public void setPlaybackSpeed(final IMediaController2 caller, int seq, final float speed) {
+    public void setPlaybackSpeed(final IMediaController caller, int seq, final float speed) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_SET_SPEED,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_SET_SPEED,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -810,12 +837,12 @@
     }
 
     @Override
-    public void setPlaylist(final IMediaController2 caller, int seq, final List<String> playlist,
+    public void setPlaylist(final IMediaController caller, int seq, final List<String> playlist,
             final ParcelImpl metadata) {
         if (caller == null || metadata == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_SET_PLAYLIST,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_SET_PLAYLIST,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -823,26 +850,26 @@
                             Log.w(TAG, "setPlaylist(): Ignoring null playlist from " + controller);
                             return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                         }
-                        List<MediaItem2> list = new ArrayList<>();
+                        List<MediaItem> list = new ArrayList<>();
                         for (int i = 0; i < playlist.size(); i++) {
-                            MediaItem2 item = convertMediaItem2OnExecutor(controller,
+                            MediaItem item = convertMediaItemOnExecutor(controller,
                                     playlist.get(i));
                             if (item != null) {
                                 list.add(item);
                             }
                         }
                         return mSessionImpl.setPlaylist(list,
-                                (MediaMetadata2) MediaUtils2.fromParcelable(metadata));
+                                (MediaMetadata) MediaUtils.fromParcelable(metadata));
                     }
                 });
     }
 
     @Override
-    public void setMediaItem(final IMediaController2 caller, int seq, final String mediaId) {
+    public void setMediaItem(final IMediaController caller, int seq, final String mediaId) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_SET_MEDIA_ITEM,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_SET_MEDIA_ITEM,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -850,7 +877,7 @@
                             Log.w(TAG, "setMediaItem(): Ignoring empty mediaId from " + controller);
                             return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                         }
-                        MediaItem2 item = convertMediaItem2OnExecutor(controller, mediaId);
+                        MediaItem item = convertMediaItemOnExecutor(controller, mediaId);
                         if (item == null) {
                             return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                         }
@@ -860,28 +887,28 @@
     }
 
     @Override
-    public void updatePlaylistMetadata(final IMediaController2 caller, int seq,
+    public void updatePlaylistMetadata(final IMediaController caller, int seq,
             final ParcelImpl metadata) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
                         return mSessionImpl.updatePlaylistMetadata(
-                                (MediaMetadata2) MediaUtils2.fromParcelable(metadata));
+                                (MediaMetadata) MediaUtils.fromParcelable(metadata));
                     }
                 });
     }
 
     @Override
-    public void addPlaylistItem(IMediaController2 caller, int seq, final int index,
+    public void addPlaylistItem(IMediaController caller, int seq, final int index,
             final String mediaId) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -890,7 +917,7 @@
                                     + controller);
                             return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                         }
-                        MediaItem2 item = convertMediaItem2OnExecutor(controller, mediaId);
+                        MediaItem item = convertMediaItemOnExecutor(controller, mediaId);
                         if (item == null) {
                             return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                         }
@@ -900,11 +927,11 @@
     }
 
     @Override
-    public void removePlaylistItem(IMediaController2 caller, int seq, final int index) {
+    public void removePlaylistItem(IMediaController caller, int seq, final int index) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -914,12 +941,12 @@
     }
 
     @Override
-    public void replacePlaylistItem(IMediaController2 caller, int seq, final int index,
+    public void replacePlaylistItem(IMediaController caller, int seq, final int index,
             final String mediaId) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -928,7 +955,7 @@
                                     + controller);
                             return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                         }
-                        MediaItem2 item = convertMediaItem2OnExecutor(controller, mediaId);
+                        MediaItem item = convertMediaItemOnExecutor(controller, mediaId);
                         if (item == null) {
                             return PlayerResult.createFuture(RESULT_CODE_BAD_VALUE);
                         }
@@ -938,11 +965,11 @@
     }
 
     @Override
-    public void skipToPlaylistItem(IMediaController2 caller, int seq, final int index) {
+    public void skipToPlaylistItem(IMediaController caller, int seq, final int index) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -957,12 +984,12 @@
     }
 
     @Override
-    public void skipToPreviousItem(IMediaController2 caller, int seq) {
+    public void skipToPreviousItem(IMediaController caller, int seq) {
         if (caller == null) {
             return;
         }
         dispatchSessionTask(caller, seq,
-                SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM,
+                SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -972,12 +999,12 @@
     }
 
     @Override
-    public void skipToNextItem(IMediaController2 caller, int seq) {
+    public void skipToNextItem(IMediaController caller, int seq) {
         if (caller == null) {
             return;
         }
         dispatchSessionTask(caller, seq,
-                SessionCommand2.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM,
+                SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -987,11 +1014,11 @@
     }
 
     @Override
-    public void setRepeatMode(IMediaController2 caller, int seq, final int repeatMode) {
+    public void setRepeatMode(IMediaController caller, int seq, final int repeatMode) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_SET_REPEAT_MODE,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_SET_REPEAT_MODE,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -1001,11 +1028,11 @@
     }
 
     @Override
-    public void setShuffleMode(IMediaController2 caller, int seq, final int shuffleMode) {
+    public void setShuffleMode(IMediaController caller, int seq, final int shuffleMode) {
         if (caller == null) {
             return;
         }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE,
+        dispatchSessionTask(caller, seq, SessionCommand.COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE,
                 new SessionPlayerTask() {
                     @Override
                     public ListenableFuture<PlayerResult> run(ControllerInfo controller) {
@@ -1014,57 +1041,6 @@
                 });
     }
 
-    @Override
-    public void subscribeRoutesInfo(IMediaController2 caller, int seq) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq, SessionCommand2.COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        return mSessionImpl.getCallback().onSubscribeRoutesInfo(
-                                mSessionImpl.getInstance(), controller);
-                    }
-                });
-    }
-
-    @Override
-    public void unsubscribeRoutesInfo(IMediaController2 caller, int seq) {
-        if (caller == null) {
-            return;
-        }
-        dispatchSessionTask(caller, seq,
-                SessionCommand2.COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        return mSessionImpl.getCallback().onUnsubscribeRoutesInfo(
-                                mSessionImpl.getInstance(), controller);
-                    }
-                });
-    }
-
-    @Override
-    public void selectRoute(IMediaController2 caller, int seq, final Bundle route) {
-        if (caller == null) {
-            return;
-        }
-        if (MediaUtils2.isUnparcelableBundle(route)) {
-            // TODO (b/118472216): Prevent app crash from illegal binder call.
-            throw new RuntimeException("Unexpected route bundle: " + route);
-        }
-        dispatchSessionTask(caller, seq,
-                SessionCommand2.COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO,
-                new SessionCallbackTask<Integer>() {
-                    @Override
-                    public Integer run(ControllerInfo controller) {
-                        return mSessionImpl.getCallback().onSelectRoute(mSessionImpl.getInstance(),
-                                controller, route);
-                    }
-                });
-    }
-
     //////////////////////////////////////////////////////////////////////////////////////////////
     // AIDL methods for LibrarySession overrides
     //////////////////////////////////////////////////////////////////////////////////////////////
@@ -1078,26 +1054,26 @@
     }
 
     @Override
-    public void getLibraryRoot(final IMediaController2 caller, int seq,
+    public void getLibraryRoot(final IMediaController caller, int seq,
             final ParcelImpl libraryParams) throws RuntimeException {
         if (caller == null || libraryParams == null) {
             return;
         }
         dispatchLibrarySessionTask(caller, seq,
-                SessionCommand2.COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT,
+                SessionCommand.COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT,
                 new LibrarySessionCallbackTask<LibraryResult>() {
                     @Override
                     public LibraryResult run(ControllerInfo controller) {
                         return getLibrarySession().onGetLibraryRootOnExecutor(controller,
-                                (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
+                                (LibraryParams) MediaUtils.fromParcelable(libraryParams));
                     }
                 });
     }
 
     @Override
-    public void getItem(final IMediaController2 caller, int seq, final String mediaId)
+    public void getItem(final IMediaController caller, int seq, final String mediaId)
             throws RuntimeException {
-        dispatchLibrarySessionTask(caller, seq, SessionCommand2.COMMAND_CODE_LIBRARY_GET_ITEM,
+        dispatchLibrarySessionTask(caller, seq, SessionCommand.COMMAND_CODE_LIBRARY_GET_ITEM,
                 new LibrarySessionCallbackTask<LibraryResult>() {
                     @Override
                     public LibraryResult run(ControllerInfo controller) {
@@ -1111,13 +1087,13 @@
     }
 
     @Override
-    public void getChildren(final IMediaController2 caller, int seq, final String parentId,
+    public void getChildren(final IMediaController caller, int seq, final String parentId,
             final int page, final int pageSize, final ParcelImpl libraryParams)
             throws RuntimeException {
         if (caller == null || libraryParams == null) {
             return;
         }
-        dispatchLibrarySessionTask(caller, seq, SessionCommand2.COMMAND_CODE_LIBRARY_GET_CHILDREN,
+        dispatchLibrarySessionTask(caller, seq, SessionCommand.COMMAND_CODE_LIBRARY_GET_CHILDREN,
                 new LibrarySessionCallbackTask<LibraryResult>() {
                     @Override
                     public LibraryResult run(ControllerInfo controller) {
@@ -1136,18 +1112,18 @@
                         }
                         return getLibrarySession().onGetChildrenOnExecutor(controller, parentId,
                                 page, pageSize,
-                                (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
+                                (LibraryParams) MediaUtils.fromParcelable(libraryParams));
                     }
                 });
     }
 
     @Override
-    public void search(IMediaController2 caller, int seq, final String query,
+    public void search(IMediaController caller, int seq, final String query,
             final ParcelImpl libraryParams) {
         if (caller == null || libraryParams == null) {
             return;
         }
-        dispatchLibrarySessionTask(caller, seq, SessionCommand2.COMMAND_CODE_LIBRARY_SEARCH,
+        dispatchLibrarySessionTask(caller, seq, SessionCommand.COMMAND_CODE_LIBRARY_SEARCH,
                 new LibrarySessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -1156,19 +1132,19 @@
                             return LibraryResult.RESULT_CODE_BAD_VALUE;
                         }
                         return getLibrarySession().onSearchOnExecutor(controller, query,
-                                (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
+                                (LibraryParams) MediaUtils.fromParcelable(libraryParams));
                     }
                 });
     }
 
     @Override
-    public void getSearchResult(final IMediaController2 caller, int seq, final String query,
+    public void getSearchResult(final IMediaController caller, int seq, final String query,
             final int page, final int pageSize, final ParcelImpl libraryParams) {
         if (caller == null || libraryParams == null) {
             return;
         }
         dispatchLibrarySessionTask(caller, seq,
-                SessionCommand2.COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT,
+                SessionCommand.COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT,
                 new LibrarySessionCallbackTask<LibraryResult>() {
                     @Override
                     public LibraryResult run(ControllerInfo controller) {
@@ -1189,18 +1165,18 @@
                         }
                         return getLibrarySession().onGetSearchResultOnExecutor(controller,
                                 query, page, pageSize,
-                                (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
+                                (LibraryParams) MediaUtils.fromParcelable(libraryParams));
                     }
                 });
     }
 
     @Override
-    public void subscribe(final IMediaController2 caller, int seq, final String parentId,
+    public void subscribe(final IMediaController caller, int seq, final String parentId,
             final ParcelImpl libraryParams) {
         if (caller == null || libraryParams == null) {
             return;
         }
-        dispatchLibrarySessionTask(caller, seq, SessionCommand2.COMMAND_CODE_LIBRARY_SUBSCRIBE,
+        dispatchLibrarySessionTask(caller, seq, SessionCommand.COMMAND_CODE_LIBRARY_SUBSCRIBE,
                 new LibrarySessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -1210,17 +1186,17 @@
                         }
                         return getLibrarySession().onSubscribeOnExecutor(
                                 controller, parentId,
-                                (LibraryParams) MediaUtils2.fromParcelable(libraryParams));
+                                (LibraryParams) MediaUtils.fromParcelable(libraryParams));
                     }
                 });
     }
 
     @Override
-    public void unsubscribe(final IMediaController2 caller, int seq, final String parentId) {
+    public void unsubscribe(final IMediaController caller, int seq, final String parentId) {
         if (caller == null) {
             return;
         }
-        dispatchLibrarySessionTask(caller, seq, SessionCommand2.COMMAND_CODE_LIBRARY_UNSUBSCRIBE,
+        dispatchLibrarySessionTask(caller, seq, SessionCommand.COMMAND_CODE_LIBRARY_UNSUBSCRIBE,
                 new LibrarySessionCallbackTask<Integer>() {
                     @Override
                     public Integer run(ControllerInfo controller) {
@@ -1256,9 +1232,9 @@
 
     final class Controller2Cb extends ControllerCb {
         // TODO: Drop 'Callback' from the name.
-        private final IMediaController2 mIControllerCallback;
+        private final IMediaController mIControllerCallback;
 
-        Controller2Cb(@NonNull IMediaController2 callback) {
+        Controller2Cb(@NonNull IMediaController callback) {
             mIControllerCallback = callback;
         }
 
@@ -1277,7 +1253,7 @@
             if (result == null) {
                 result = new SessionResult(RESULT_CODE_UNKNOWN_ERROR, null);
             }
-            mIControllerCallback.onSessionResult(seq, MediaUtils2.toParcelable(result));
+            mIControllerCallback.onSessionResult(seq, MediaUtils.toParcelable(result));
         }
 
         @Override
@@ -1285,29 +1261,29 @@
             if (result == null) {
                 result = new LibraryResult(LibraryResult.RESULT_CODE_UNKNOWN_ERROR);
             }
-            mIControllerCallback.onLibraryResult(seq, MediaUtils2.toParcelable(result));
+            mIControllerCallback.onLibraryResult(seq, MediaUtils.toParcelable(result));
         }
 
         @Override
         void setCustomLayout(int seq, List<CommandButton> layout) throws RemoteException {
             mIControllerCallback.onSetCustomLayout(seq,
-                    MediaUtils2.convertCommandButtonListToParcelImplList(layout));
+                    MediaUtils.convertCommandButtonListToParcelImplList(layout));
         }
 
         @Override
         void onPlaybackInfoChanged(PlaybackInfo info) throws RemoteException {
-            mIControllerCallback.onPlaybackInfoChanged(MediaUtils2.toParcelable(info));
+            mIControllerCallback.onPlaybackInfoChanged(MediaUtils.toParcelable(info));
         }
 
         @Override
-        void onAllowedCommandsChanged(SessionCommandGroup2 commands) throws RemoteException {
-            mIControllerCallback.onAllowedCommandsChanged(MediaUtils2.toParcelable(commands));
+        void onAllowedCommandsChanged(SessionCommandGroup commands) throws RemoteException {
+            mIControllerCallback.onAllowedCommandsChanged(MediaUtils.toParcelable(commands));
         }
 
         @Override
-        void sendCustomCommand(int seq, SessionCommand2 command, Bundle args)
+        void sendCustomCommand(int seq, SessionCommand command, Bundle args)
                 throws RemoteException {
-            mIControllerCallback.onCustomCommand(seq, MediaUtils2.toParcelable(command), args);
+            mIControllerCallback.onCustomCommand(seq, MediaUtils.toParcelable(command), args);
         }
 
         @Override
@@ -1323,9 +1299,9 @@
         }
 
         @Override
-        void onBufferingStateChanged(MediaItem2 item, int bufferingState, long bufferedPositionMs)
+        void onBufferingStateChanged(MediaItem item, int bufferingState, long bufferedPositionMs)
                 throws RemoteException {
-            mIControllerCallback.onBufferingStateChanged(MediaUtils2.toParcelable(item),
+            mIControllerCallback.onBufferingStateChanged(MediaUtils.toParcelable(item),
                     bufferingState, bufferedPositionMs);
         }
 
@@ -1336,33 +1312,33 @@
         }
 
         @Override
-        void onCurrentMediaItemChanged(MediaItem2 item) throws RemoteException {
-            mIControllerCallback.onCurrentMediaItemChanged(MediaUtils2.toParcelable(item));
+        void onCurrentMediaItemChanged(MediaItem item) throws RemoteException {
+            mIControllerCallback.onCurrentMediaItemChanged(MediaUtils.toParcelable(item));
         }
 
         @Override
-        void onPlaylistChanged(List<MediaItem2> playlist, MediaMetadata2 metadata)
+        void onPlaylistChanged(List<MediaItem> playlist, MediaMetadata metadata)
                 throws RemoteException {
             ControllerInfo controller = mConnectedControllersManager.getController(
                     getCallbackBinder());
             if (mConnectedControllersManager.isAllowedCommand(controller,
-                    SessionCommand2.COMMAND_CODE_PLAYER_GET_PLAYLIST)) {
+                    SessionCommand.COMMAND_CODE_PLAYER_GET_PLAYLIST)) {
                 mIControllerCallback.onPlaylistChanged(
-                        MediaUtils2.convertMediaItem2ListToParcelImplListSlice(playlist),
-                        MediaUtils2.toParcelable(metadata));
+                        MediaUtils.convertMediaItemListToParcelImplListSlice(playlist),
+                        MediaUtils.toParcelable(metadata));
             } else if (mConnectedControllersManager.isAllowedCommand(controller,
-                    SessionCommand2.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA)) {
-                mIControllerCallback.onPlaylistMetadataChanged(MediaUtils2.toParcelable(metadata));
+                    SessionCommand.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA)) {
+                mIControllerCallback.onPlaylistMetadataChanged(MediaUtils.toParcelable(metadata));
             }
         }
 
         @Override
-        void onPlaylistMetadataChanged(MediaMetadata2 metadata) throws RemoteException {
+        void onPlaylistMetadataChanged(MediaMetadata metadata) throws RemoteException {
             ControllerInfo controller = mConnectedControllersManager.getController(
                     getCallbackBinder());
             if (mConnectedControllersManager.isAllowedCommand(controller,
-                    SessionCommand2.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA)) {
-                mIControllerCallback.onPlaylistMetadataChanged(MediaUtils2.toParcelable(metadata));
+                    SessionCommand.COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA)) {
+                mIControllerCallback.onPlaylistMetadataChanged(MediaUtils.toParcelable(metadata));
             }
         }
 
@@ -1382,22 +1358,17 @@
         }
 
         @Override
-        void onRoutesInfoChanged(List<Bundle> routes) throws RemoteException {
-            mIControllerCallback.onRoutesInfoChanged(routes);
-        }
-
-        @Override
         void onChildrenChanged(String parentId, int itemCount, LibraryParams params)
                 throws RemoteException {
             mIControllerCallback.onChildrenChanged(parentId, itemCount,
-                    MediaUtils2.toParcelable(params));
+                    MediaUtils.toParcelable(params));
         }
 
         @Override
         void onSearchResultChanged(String query, int itemCount, LibraryParams params)
                 throws RemoteException {
             mIControllerCallback.onSearchResultChanged(query, itemCount,
-                    MediaUtils2.toParcelable(params));
+                    MediaUtils.toParcelable(params));
         }
 
         @Override
diff --git a/media2/src/main/java/androidx/media2/MediaTimestamp2.java b/media2/src/main/java/androidx/media2/MediaTimestamp.java
similarity index 90%
rename from media2/src/main/java/androidx/media2/MediaTimestamp2.java
rename to media2/src/main/java/androidx/media2/MediaTimestamp.java
index 5b43367..cc6599a 100644
--- a/media2/src/main/java/androidx/media2/MediaTimestamp2.java
+++ b/media2/src/main/java/androidx/media2/MediaTimestamp.java
@@ -19,7 +19,6 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
 import android.annotation.TargetApi;
-import android.media.MediaTimestamp;
 import android.os.Build;
 
 import androidx.annotation.NonNull;
@@ -42,12 +41,12 @@
  *
  * @see MediaPlayer#getTimestamp
  */
-public final class MediaTimestamp2 {
+public final class MediaTimestamp {
     /**
      * An unknown media timestamp value
      */
-    public static final @NonNull MediaTimestamp2
-            TIMESTAMP_UNKNOWN = new MediaTimestamp2(-1, -1, 0.0f);
+    public static final @NonNull MediaTimestamp TIMESTAMP_UNKNOWN =
+            new MediaTimestamp(-1, -1, 0.0f);
 
     /**
      * Get the media time of the anchor in microseconds.
@@ -81,7 +80,7 @@
 
     /** @hide */
     @RestrictTo(LIBRARY_GROUP)
-    public MediaTimestamp2(long mediaUs, long systemNs, float rate) {
+    public MediaTimestamp(long mediaUs, long systemNs, float rate) {
         mMediaTimeUs = mediaUs;
         mNanoTime = systemNs;
         mClockRate = rate;
@@ -90,7 +89,7 @@
     /** @hide */
     @TargetApi(Build.VERSION_CODES.M)
     @RestrictTo(LIBRARY_GROUP)
-    MediaTimestamp2(MediaTimestamp timestamp) {
+    MediaTimestamp(android.media.MediaTimestamp timestamp) {
         mMediaTimeUs = timestamp.getAnchorMediaTimeUs();
         mNanoTime = timestamp.getAnchorSytemNanoTime();
         mClockRate = timestamp.getMediaClockRate();
@@ -98,7 +97,7 @@
 
     /** @hide */
     @RestrictTo(LIBRARY_GROUP)
-    MediaTimestamp2() {
+    MediaTimestamp() {
         mMediaTimeUs = 0;
         mNanoTime = 0;
         mClockRate = 1.0f;
@@ -109,7 +108,7 @@
         if (this == obj) return true;
         if (obj == null || getClass() != obj.getClass()) return false;
 
-        final MediaTimestamp2 that = (MediaTimestamp2) obj;
+        final MediaTimestamp that = (MediaTimestamp) obj;
         return (this.mMediaTimeUs == that.mMediaTimeUs)
                 && (this.mNanoTime == that.mNanoTime)
                 && (this.mClockRate == that.mClockRate);
diff --git a/media2/src/main/java/androidx/media2/MediaUtils2.java b/media2/src/main/java/androidx/media2/MediaUtils.java
similarity index 62%
rename from media2/src/main/java/androidx/media2/MediaUtils2.java
rename to media2/src/main/java/androidx/media2/MediaUtils.java
index bbeb639..ee5266a 100644
--- a/media2/src/main/java/androidx/media2/MediaUtils2.java
+++ b/media2/src/main/java/androidx/media2/MediaUtils.java
@@ -17,19 +17,22 @@
 package androidx.media2;
 
 import static android.support.v4.media.MediaDescriptionCompat.EXTRA_BT_FOLDER_TYPE;
+import static android.support.v4.media.session.MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS;
 
-import static androidx.media2.MediaMetadata2.BROWSABLE_TYPE_MIXED;
-import static androidx.media2.MediaMetadata2.BROWSABLE_TYPE_NONE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_BROWSABLE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_DISPLAY_DESCRIPTION;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_DISPLAY_ICON;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_DISPLAY_ICON_URI;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_DISPLAY_SUBTITLE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_DISPLAY_TITLE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_MEDIA_ID;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_MEDIA_URI;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_PLAYABLE;
-import static androidx.media2.MediaMetadata2.METADATA_KEY_TITLE;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_MIXED;
+import static androidx.media2.MediaMetadata.BROWSABLE_TYPE_NONE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_BROWSABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DISPLAY_DESCRIPTION;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DISPLAY_ICON;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DISPLAY_SUBTITLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_DISPLAY_TITLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_ID;
+import static androidx.media2.MediaMetadata.METADATA_KEY_MEDIA_URI;
+import static androidx.media2.MediaMetadata.METADATA_KEY_PLAYABLE;
+import static androidx.media2.MediaMetadata.METADATA_KEY_TITLE;
+import static androidx.media2.SessionCommand.COMMAND_CODE_PLAYER_SET_SPEED;
+import static androidx.media2.SessionCommand.COMMAND_VERSION_CURRENT;
 
 import android.annotation.SuppressLint;
 import android.content.Context;
@@ -38,22 +41,24 @@
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.v4.media.MediaBrowserCompat.MediaItem;
+import android.support.v4.media.MediaBrowserCompat;
 import android.support.v4.media.MediaDescriptionCompat;
 import android.support.v4.media.MediaMetadataCompat;
 import android.support.v4.media.RatingCompat;
 import android.support.v4.media.session.MediaControllerCompat;
 import android.support.v4.media.session.MediaSessionCompat.QueueItem;
 import android.support.v4.media.session.PlaybackStateCompat;
+import android.support.v4.media.session.PlaybackStateCompat.CustomAction;
 import android.text.TextUtils;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
 import androidx.media.AudioAttributesCompat;
 import androidx.media.MediaBrowserServiceCompat.BrowserRoot;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaSession2.CommandButton;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaSession.CommandButton;
 import androidx.versionedparcelable.ParcelImpl;
 import androidx.versionedparcelable.ParcelUtils;
 import androidx.versionedparcelable.VersionedParcelable;
@@ -67,13 +72,13 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
-public class MediaUtils2 {
-    public static final String TAG = "MediaUtils2";
+public class MediaUtils {
+    public static final String TAG = "MediaUtils";
     public static final int TRANSACTION_SIZE_LIMIT_IN_BYTES = 256 * 1024; // 256KB
 
     // Stub BrowserRoot for accepting any connection here.
     public static final BrowserRoot sDefaultBrowserRoot =
-            new BrowserRoot(MediaLibraryService2.SERVICE_INTERFACE, null);
+            new BrowserRoot(MediaLibraryService.SERVICE_INTERFACE, null);
 
     public static final Executor DIRECT_EXECUTOR = new Executor() {
         @Override
@@ -82,22 +87,22 @@
         }
     };
 
-    private MediaUtils2() {
+    private MediaUtils() {
     }
 
     /**
-     * Creates a {@link MediaItem} from the {@link MediaItem2}.
+     * Creates a {@link MediaBrowserCompat.MediaItem} from the {@link MediaItem}.
      *
      * @param item2 an item.
      * @return The newly created media item.
      */
-    public static MediaItem convertToMediaItem(MediaItem2 item2) {
+    public static MediaBrowserCompat.MediaItem convertToMediaItem(MediaItem item2) {
         if (item2 == null) {
             return null;
         }
         int flags = 0;
         MediaDescriptionCompat descCompat;
-        MediaMetadata2 metadata = item2.getMetadata();
+        MediaMetadata metadata = item2.getMetadata();
         if (metadata == null) {
             descCompat = new MediaDescriptionCompat.Builder()
                     .setMediaId(item2.getMediaId())
@@ -132,16 +137,89 @@
             boolean browsable = metadata.containsKey(METADATA_KEY_BROWSABLE)
                     && metadata.getLong(METADATA_KEY_BROWSABLE) != BROWSABLE_TYPE_NONE;
             boolean playable = metadata.getLong(METADATA_KEY_PLAYABLE) != 0;
-            flags = (browsable ? MediaItem.FLAG_BROWSABLE : 0)
-                    | (playable ? MediaItem.FLAG_PLAYABLE : 0);
+            flags = (browsable ? MediaBrowserCompat.MediaItem.FLAG_BROWSABLE : 0)
+                    | (playable ? MediaBrowserCompat.MediaItem.FLAG_PLAYABLE : 0);
         }
-        return new MediaItem(descCompat, flags);
+        return new MediaBrowserCompat.MediaItem(descCompat, flags);
     }
 
     /**
-     * Convert a list of {@link MediaItem2} to a list of {@link MediaItem}.
+     * Convert a list of {@link MediaItem} to a list of {@link MediaBrowserCompat.MediaItem}.
      */
-    public static List<MediaItem> convertToMediaItemList(List<MediaItem2> items) {
+    public static List<MediaBrowserCompat.MediaItem> convertToMediaItemList(List<MediaItem> items) {
+        if (items == null) {
+            return null;
+        }
+        List<MediaBrowserCompat.MediaItem> result = new ArrayList<>();
+        for (int i = 0; i < items.size(); i++) {
+            result.add(convertToMediaItem(items.get(i)));
+        }
+        return result;
+    }
+
+    /**
+     * Creates a {@link MediaItem} from the {@link MediaBrowserCompat.MediaItem}.
+     *
+     * @param item an item.
+     * @return The newly created media item.
+     */
+    public static MediaItem convertToMediaItem(MediaBrowserCompat.MediaItem item) {
+        if (item == null) {
+            return null;
+        }
+        MediaMetadata metadata = convertToMediaMetadata(item.getDescription(),
+                item.isBrowsable(), item.isPlayable());
+        return new MediaItem.Builder()
+                .setMetadata(metadata)
+                .build();
+    }
+
+    /**
+     * Convert a {@link QueueItem} to a {@link MediaItem}.
+     */
+    public static MediaItem convertToMediaItem(QueueItem item) {
+        if (item == null) {
+            return null;
+        }
+        // descriptionCompat cannot be null
+        MediaDescriptionCompat descriptionCompat = item.getDescription();
+        MediaMetadata metadata = convertToMediaMetadata(descriptionCompat, false, true);
+        return new MediaItem.Builder()
+                .setMetadata(metadata)
+                .build();
+    }
+
+    /**
+     * Convert a {@link MediaMetadataCompat} from the {@link MediaControllerCompat#getMetadata()}
+     * to a {@link MediaItem}.
+     */
+    public static MediaItem convertToMediaItem(MediaMetadataCompat metadataCompat) {
+        if (metadataCompat == null) {
+            return null;
+        }
+        // Item is from the MediaControllerCompat, so forcefully set the playable.
+        MediaMetadata metadata = new MediaMetadata.Builder(metadataCompat.getBundle())
+                .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
+                .putLong(METADATA_KEY_PLAYABLE, 1).build();
+        return new MediaItem.Builder().setMetadata(metadata).build();
+    }
+
+    /**
+     * Convert a {@link MediaDescriptionCompat} to a {@link MediaItem}.
+     */
+    public static MediaItem convertToMediaItem(MediaDescriptionCompat descriptionCompat) {
+        MediaMetadata metadata = convertToMediaMetadata(descriptionCompat, false, true);
+        if (metadata == null) {
+            return null;
+        }
+        return new MediaItem.Builder().setMetadata(metadata).build();
+    }
+
+    /**
+     * Convert a list of {@link MediaBrowserCompat.MediaItem} to a list of {@link MediaItem}.
+     */
+    public static List<MediaItem> convertMediaItemListToMediaItemList(
+            List<MediaBrowserCompat.MediaItem> items) {
         if (items == null) {
             return null;
         }
@@ -153,87 +231,15 @@
     }
 
     /**
-     * Creates a {@link MediaItem2} from the {@link MediaItem}.
-     *
-     * @param item an item.
-     * @return The newly created media item.
+     * Convert a list of {@link QueueItem} to a list of {@link MediaItem}.
      */
-    public static MediaItem2 convertToMediaItem2(MediaItem item) {
-        if (item == null) {
-            return null;
-        }
-        MediaMetadata2 metadata2 = convertToMediaMetadata2(item.getDescription(),
-                item.isBrowsable(), item.isPlayable());
-        return new MediaItem2.Builder()
-                .setMetadata(metadata2)
-                .build();
-    }
-
-    /**
-     * Convert a {@link QueueItem} to a {@link MediaItem2}.
-     */
-    public static MediaItem2 convertToMediaItem2(QueueItem item) {
-        if (item == null) {
-            return null;
-        }
-        // descriptionCompat cannot be null
-        MediaDescriptionCompat descriptionCompat = item.getDescription();
-        MediaMetadata2 metadata2 = convertToMediaMetadata2(descriptionCompat, false, true);
-        return new MediaItem2.Builder()
-                .setMetadata(metadata2)
-                .build();
-    }
-
-    /**
-     * Convert a {@link MediaMetadataCompat} from the {@link MediaControllerCompat#getMetadata()}
-     * to a {@link MediaItem2}.
-     */
-    public static MediaItem2 convertToMediaItem2(MediaMetadataCompat metadataCompat) {
-        if (metadataCompat == null) {
-            return null;
-        }
-        // Item is from the MediaControllerCompat, so forcefully set the playable.
-        MediaMetadata2 metadata2 = new MediaMetadata2.Builder(metadataCompat.getBundle())
-                .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE)
-                .putLong(METADATA_KEY_PLAYABLE, 1).build();
-        return new MediaItem2.Builder().setMetadata(metadata2).build();
-    }
-
-    /**
-     * Convert a {@link MediaDescriptionCompat} to a {@link MediaItem2}.
-     */
-    public static MediaItem2 convertToMediaItem2(MediaDescriptionCompat descriptionCompat) {
-        MediaMetadata2 metadata2 = convertToMediaMetadata2(descriptionCompat, false, true);
-        if (metadata2 == null) {
-            return null;
-        }
-        return new MediaItem2.Builder().setMetadata(metadata2).build();
-    }
-
-    /**
-     * Convert a list of {@link MediaItem} to a list of {@link MediaItem2}.
-     */
-    public static List<MediaItem2> convertMediaItemListToMediaItem2List(List<MediaItem> items) {
+    public static List<MediaItem> convertQueueItemListToMediaItemList(List<QueueItem> items) {
         if (items == null) {
             return null;
         }
-        List<MediaItem2> result = new ArrayList<>();
+        List<MediaItem> result = new ArrayList<>();
         for (int i = 0; i < items.size(); i++) {
-            result.add(convertToMediaItem2(items.get(i)));
-        }
-        return result;
-    }
-
-    /**
-     * Convert a list of {@link QueueItem} to a list of {@link MediaItem2}.
-     */
-    public static List<MediaItem2> convertQueueItemListToMediaItem2List(List<QueueItem> items) {
-        if (items == null) {
-            return null;
-        }
-        List<MediaItem2> result = new ArrayList<>();
-        for (int i = 0; i < items.size(); i++) {
-            MediaItem2 item = convertToMediaItem2(items.get(i));
+            MediaItem item = convertToMediaItem(items.get(i));
             if (item != null) {
                 result.add(item);
             }
@@ -252,16 +258,16 @@
     }
 
     /**
-     * Convert a list of {@link MediaItem2} to a list of {@link QueueItem}. The index of the item
-     * would be used as the queue ID to match the behavior of {@link MediaController2}.
+     * Convert a list of {@link MediaItem} to a list of {@link QueueItem}. The index of the item
+     * would be used as the queue ID to match the behavior of {@link MediaController}.
      */
-    public static List<QueueItem> convertToQueueItemList(List<MediaItem2> items) {
+    public static List<QueueItem> convertToQueueItemList(List<MediaItem> items) {
         if (items == null) {
             return null;
         }
         List<QueueItem> result = new ArrayList<>();
         for (int i = 0; i < items.size(); i++) {
-            MediaItem2 item = items.get(i);
+            MediaItem item = items.get(i);
             MediaDescriptionCompat description = (item.getMetadata() == null)
                     ? new MediaDescriptionCompat.Builder().setMediaId(item.getMediaId()).build()
                     : convertToMediaMetadataCompat(item.getMetadata()).getDescription();
@@ -271,22 +277,22 @@
     }
 
     /**
-     * Convert a {@link ParcelImplListSlice} to a list of {@link MediaItem2}.
+     * Convert a {@link ParcelImplListSlice} to a list of {@link MediaItem}.
      */
-    public static List<MediaItem2> convertParcelImplListSliceToMediaItem2List(
+    public static List<MediaItem> convertParcelImplListSliceToMediaItemList(
             ParcelImplListSlice listSlice) {
         if (listSlice == null) {
             return null;
         }
         List<ParcelImpl> parcelImplList = listSlice.getList();
-        List<MediaItem2> mediaItem2List = new ArrayList<>();
+        List<MediaItem> mediaItemList = new ArrayList<>();
         for (int i = 0; i < parcelImplList.size(); i++) {
             final ParcelImpl itemParcelImpl = parcelImplList.get(i);
             if (itemParcelImpl != null) {
-                mediaItem2List.add((MediaItem2) fromParcelable(itemParcelImpl));
+                mediaItemList.add((MediaItem) fromParcelable(itemParcelImpl));
             }
         }
-        return mediaItem2List;
+        return mediaItemList;
     }
 
     /**
@@ -316,80 +322,81 @@
     }
 
     /**
-     * Creates a {@link MediaMetadata2} from the {@link MediaDescriptionCompat}.
+     * Creates a {@link MediaMetadata} from the {@link MediaDescriptionCompat}.
      *
      * @param descCompat A {@link MediaDescriptionCompat} object.
-     * @param browsable {@code true} if it's from {@link MediaItem} with browable flag.
-     * @param playable {@code true} if it's from {@link MediaItem} with playable flag, or from
-     *                 {@link QueueItem}.
+     * @param browsable {@code true} if it's from {@link MediaBrowserCompat.MediaItem} with
+     *                  browsable flag.
+     * @param playable {@code true} if it's from {@link MediaBrowserCompat.MediaItem} with
+     *                  playable flag, or from {@link QueueItem}.
      * @return
      */
-    private static MediaMetadata2 convertToMediaMetadata2(MediaDescriptionCompat descCompat,
+    private static MediaMetadata convertToMediaMetadata(MediaDescriptionCompat descCompat,
             boolean browsable, boolean playable) {
         if (descCompat == null) {
             return null;
         }
 
-        MediaMetadata2.Builder metadata2Builder = new MediaMetadata2.Builder();
-        metadata2Builder.putString(METADATA_KEY_MEDIA_ID, descCompat.getMediaId());
+        MediaMetadata.Builder metadataBuilder = new MediaMetadata.Builder();
+        metadataBuilder.putString(METADATA_KEY_MEDIA_ID, descCompat.getMediaId());
 
         CharSequence title = descCompat.getTitle();
         if (title != null) {
-            metadata2Builder.putText(METADATA_KEY_DISPLAY_TITLE, title);
+            metadataBuilder.putText(METADATA_KEY_DISPLAY_TITLE, title);
         }
 
         CharSequence description = descCompat.getDescription();
         if (description != null) {
-            metadata2Builder.putText(METADATA_KEY_DISPLAY_DESCRIPTION, descCompat.getDescription());
+            metadataBuilder.putText(METADATA_KEY_DISPLAY_DESCRIPTION, descCompat.getDescription());
         }
 
         CharSequence subtitle = descCompat.getSubtitle();
         if (subtitle != null) {
-            metadata2Builder.putText(METADATA_KEY_DISPLAY_SUBTITLE, subtitle);
+            metadataBuilder.putText(METADATA_KEY_DISPLAY_SUBTITLE, subtitle);
         }
 
         Bitmap icon = descCompat.getIconBitmap();
         if (icon != null) {
-            metadata2Builder.putBitmap(METADATA_KEY_DISPLAY_ICON, icon);
+            metadataBuilder.putBitmap(METADATA_KEY_DISPLAY_ICON, icon);
         }
 
         Uri iconUri = descCompat.getIconUri();
         if (iconUri != null) {
-            metadata2Builder.putText(METADATA_KEY_DISPLAY_ICON_URI, iconUri.toString());
+            metadataBuilder.putText(METADATA_KEY_DISPLAY_ICON_URI, iconUri.toString());
         }
 
         Bundle bundle = descCompat.getExtras();
         if (bundle != null) {
-            metadata2Builder.setExtras(bundle);
+            metadataBuilder.setExtras(bundle);
         }
 
         Uri mediaUri = descCompat.getMediaUri();
         if (mediaUri != null) {
-            metadata2Builder.putText(METADATA_KEY_MEDIA_URI, mediaUri.toString());
+            metadataBuilder.putText(METADATA_KEY_MEDIA_URI, mediaUri.toString());
         }
 
         if (bundle != null && bundle.containsKey(EXTRA_BT_FOLDER_TYPE)) {
-            metadata2Builder.putLong(METADATA_KEY_BROWSABLE,
+            metadataBuilder.putLong(METADATA_KEY_BROWSABLE,
                     bundle.getLong(EXTRA_BT_FOLDER_TYPE));
         } else if (browsable) {
-            metadata2Builder.putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_MIXED);
+            metadataBuilder.putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_MIXED);
         } else {
-            metadata2Builder.putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE);
+            metadataBuilder.putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_NONE);
         }
 
-        metadata2Builder.putLong(METADATA_KEY_PLAYABLE, playable ? 1 : 0);
+        metadataBuilder.putLong(METADATA_KEY_PLAYABLE, playable ? 1 : 0);
 
-        return metadata2Builder.build();
+        return metadataBuilder.build();
     }
 
     /**
-     * Creates a {@link MediaMetadata2} from the {@link CharSequence}.
+     * Creates a {@link MediaMetadata} from the {@link CharSequence}.
      */
-    public static MediaMetadata2 convertToMediaMetadata2(CharSequence queueTitle) {
+    public static MediaMetadata convertToMediaMetadata(CharSequence queueTitle) {
         if (queueTitle == null) {
             return null;
         }
-        return new MediaMetadata2.Builder()
+        return new MediaMetadata.Builder()
                 .putString(METADATA_KEY_TITLE, queueTitle.toString())
                 .putLong(METADATA_KEY_BROWSABLE, BROWSABLE_TYPE_MIXED)
                 .putLong(METADATA_KEY_PLAYABLE, 1)
@@ -397,24 +404,23 @@
     }
 
     /**
-     * Creates a {@link MediaMetadataCompat} from the {@link MediaMetadata2}.
+     * Creates a {@link MediaMetadataCompat} from the {@link MediaMetadata}.
      *
-     * @param metadata2 A {@link MediaMetadata2} object.
+     * @param metadata A {@link MediaMetadata} object.
      * @return The newly created {@link MediaMetadataCompat} object.
      */
-    public static MediaMetadataCompat convertToMediaMetadataCompat(MediaMetadata2 metadata2) {
-        if (metadata2 == null) {
+    public static MediaMetadataCompat convertToMediaMetadataCompat(MediaMetadata metadata) {
+        if (metadata == null) {
             return null;
         }
 
         MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
-        Bundle bundle = metadata2.toBundle();
-        for (String key : bundle.keySet()) {
-            Object value = bundle.get(key);
+        for (String key : metadata.keySet()) {
+            Object value = metadata.getObject(key);
             if (value instanceof CharSequence) {
                 builder.putText(key, (CharSequence) value);
-            } else if (value instanceof Rating2) {
-                builder.putRating(key, convertToRatingCompat((Rating2) value));
+            } else if (value instanceof Rating) {
+                builder.putRating(key, convertToRatingCompat((Rating) value));
             } else if (value instanceof Bitmap) {
                 builder.putBitmap(key, (Bitmap) value);
             } else if (value instanceof Long) {
@@ -425,53 +431,53 @@
     }
 
     /**
-     * Creates a {@link Rating2} from the {@link RatingCompat}.
+     * Creates a {@link Rating} from the {@link RatingCompat}.
      *
      * @param ratingCompat A {@link RatingCompat} object.
-     * @return The newly created {@link Rating2} object.
+     * @return The newly created {@link Rating} object.
      */
-    public static Rating2 convertToRating2(RatingCompat ratingCompat) {
+    public static Rating convertToRating(RatingCompat ratingCompat) {
         if (ratingCompat == null) {
             return null;
         }
         switch (ratingCompat.getRatingStyle()) {
             case RatingCompat.RATING_3_STARS:
                 return ratingCompat.isRated()
-                        ? new StarRating2(3, ratingCompat.getStarRating()) : new StarRating2(3);
+                        ? new StarRating(3, ratingCompat.getStarRating()) : new StarRating(3);
             case RatingCompat.RATING_4_STARS:
                 return ratingCompat.isRated()
-                        ? new StarRating2(4, ratingCompat.getStarRating()) : new StarRating2(4);
+                        ? new StarRating(4, ratingCompat.getStarRating()) : new StarRating(4);
             case RatingCompat.RATING_5_STARS:
                 return ratingCompat.isRated()
-                        ? new StarRating2(5, ratingCompat.getStarRating()) : new StarRating2(5);
+                        ? new StarRating(5, ratingCompat.getStarRating()) : new StarRating(5);
             case RatingCompat.RATING_HEART:
                 return ratingCompat.isRated()
-                        ? new HeartRating2(ratingCompat.hasHeart()) : new HeartRating2();
+                        ? new HeartRating(ratingCompat.hasHeart()) : new HeartRating();
             case RatingCompat.RATING_THUMB_UP_DOWN:
                 return ratingCompat.isRated()
-                        ? new ThumbRating2(ratingCompat.isThumbUp()) : new ThumbRating2();
+                        ? new ThumbRating(ratingCompat.isThumbUp()) : new ThumbRating();
             case RatingCompat.RATING_PERCENTAGE:
                 return ratingCompat.isRated()
-                        ? new PercentageRating2(ratingCompat.getPercentRating())
-                        : new PercentageRating2();
+                        ? new PercentageRating(ratingCompat.getPercentRating())
+                        : new PercentageRating();
             default:
                 return null;
         }
     }
 
     /**
-     * Creates a {@link RatingCompat} from the {@link Rating2}.
+     * Creates a {@link RatingCompat} from the {@link Rating}.
      *
-     * @param rating2 A {@link Rating2} object.
+     * @param rating A {@link Rating} object.
      * @return The newly created {@link RatingCompat} object.
      */
     @SuppressLint("WrongConstant") // for @StarStyle
-    public static RatingCompat convertToRatingCompat(Rating2 rating2) {
-        if (rating2 == null) {
+    public static RatingCompat convertToRatingCompat(Rating rating) {
+        if (rating == null) {
             return null;
         }
-        int ratingCompatStyle = getRatingCompatStyle(rating2);
-        if (!rating2.isRated()) {
+        int ratingCompatStyle = getRatingCompatStyle(rating);
+        if (!rating.isRated()) {
             return RatingCompat.newUnratedRating(ratingCompatStyle);
         }
 
@@ -480,14 +486,14 @@
             case RatingCompat.RATING_4_STARS:
             case RatingCompat.RATING_5_STARS:
                 return RatingCompat.newStarRating(
-                        ratingCompatStyle, ((StarRating2) rating2).getStarRating());
+                        ratingCompatStyle, ((StarRating) rating).getStarRating());
             case RatingCompat.RATING_HEART:
-                return RatingCompat.newHeartRating(((HeartRating2) rating2).hasHeart());
+                return RatingCompat.newHeartRating(((HeartRating) rating).hasHeart());
             case RatingCompat.RATING_THUMB_UP_DOWN:
-                return RatingCompat.newThumbRating(((ThumbRating2) rating2).isThumbUp());
+                return RatingCompat.newThumbRating(((ThumbRating) rating).isThumbUp());
             case RatingCompat.RATING_PERCENTAGE:
                 return RatingCompat.newPercentageRating(
-                        ((PercentageRating2) rating2).getPercentRating());
+                        ((PercentageRating) rating).getPercentRating());
             default:
                 return null;
         }
@@ -510,16 +516,16 @@
     }
 
     /**
-     * Convert a list of {@link MediaItem2} to a list of {@link ParcelImplListSlice}.
+     * Convert a list of {@link MediaItem} to a list of {@link ParcelImplListSlice}.
      */
-    public static ParcelImplListSlice convertMediaItem2ListToParcelImplListSlice(
-            List<MediaItem2> mediaItem2List) {
-        if (mediaItem2List == null) {
+    public static ParcelImplListSlice convertMediaItemListToParcelImplListSlice(
+            List<MediaItem> mediaItemList) {
+        if (mediaItemList == null) {
             return null;
         }
         List<ParcelImpl> itemParcelableList = new ArrayList<>();
-        for (int i = 0; i < mediaItem2List.size(); i++) {
-            final MediaItem2 item = mediaItem2List.get(i);
+        for (int i = 0; i < mediaItemList.size(); i++) {
+            final MediaItem item = mediaItemList.get(i);
             if (item != null) {
                 final ParcelImpl itemParcelImpl = toParcelable(item);
                 itemParcelableList.add(itemParcelImpl);
@@ -529,22 +535,22 @@
     }
 
     /**
-     * Convert a {@link SessionPlayer2.PlayerState} and
-     * {@link SessionPlayer2.BuffState} into {@link PlaybackStateCompat.State}.
+     * Convert a {@link SessionPlayer.PlayerState} and
+     * {@link SessionPlayer.BuffState} into {@link PlaybackStateCompat.State}.
      */
     public static int convertToPlaybackStateCompatState(int playerState, int bufferingState) {
         switch (playerState) {
-            case SessionPlayer2.PLAYER_STATE_PLAYING:
+            case SessionPlayer.PLAYER_STATE_PLAYING:
                 switch (bufferingState) {
-                    case SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_STARVED:
+                    case SessionPlayer.BUFFERING_STATE_BUFFERING_AND_STARVED:
                         return PlaybackStateCompat.STATE_BUFFERING;
                 }
                 return PlaybackStateCompat.STATE_PLAYING;
-            case SessionPlayer2.PLAYER_STATE_PAUSED:
+            case SessionPlayer.PLAYER_STATE_PAUSED:
                 return PlaybackStateCompat.STATE_PAUSED;
-            case SessionPlayer2.PLAYER_STATE_IDLE:
+            case SessionPlayer.PLAYER_STATE_IDLE:
                 return PlaybackStateCompat.STATE_NONE;
-            case SessionPlayer2.PLAYER_STATE_ERROR:
+            case SessionPlayer.PLAYER_STATE_ERROR:
                 return PlaybackStateCompat.STATE_ERROR;
         }
         // For unknown value
@@ -552,21 +558,21 @@
     }
 
     /**
-     * Convert a {@link PlaybackStateCompat} into {@link SessionPlayer2.PlayerState}.
+     * Convert a {@link PlaybackStateCompat} into {@link SessionPlayer.PlayerState}.
      */
     public static int convertToPlayerState(PlaybackStateCompat state) {
         if (state == null) {
-            return SessionPlayer2.PLAYER_STATE_IDLE;
+            return SessionPlayer.PLAYER_STATE_IDLE;
         }
         switch (state.getState()) {
             case PlaybackStateCompat.STATE_ERROR:
-                return SessionPlayer2.PLAYER_STATE_ERROR;
+                return SessionPlayer.PLAYER_STATE_ERROR;
             case PlaybackStateCompat.STATE_NONE:
-                return SessionPlayer2.PLAYER_STATE_IDLE;
+                return SessionPlayer.PLAYER_STATE_IDLE;
             case PlaybackStateCompat.STATE_PAUSED:
             case PlaybackStateCompat.STATE_STOPPED:
             case PlaybackStateCompat.STATE_BUFFERING: // means paused for buffering.
-                return SessionPlayer2.PLAYER_STATE_PAUSED;
+                return SessionPlayer.PLAYER_STATE_PAUSED;
             case PlaybackStateCompat.STATE_FAST_FORWARDING:
             case PlaybackStateCompat.STATE_PLAYING:
             case PlaybackStateCompat.STATE_REWINDING:
@@ -574,33 +580,33 @@
             case PlaybackStateCompat.STATE_SKIPPING_TO_PREVIOUS:
             case PlaybackStateCompat.STATE_SKIPPING_TO_QUEUE_ITEM:
             case PlaybackStateCompat.STATE_CONNECTING: // Note: there's no perfect match for this.
-                return SessionPlayer2.PLAYER_STATE_PLAYING;
+                return SessionPlayer.PLAYER_STATE_PLAYING;
         }
-        return SessionPlayer2.PLAYER_STATE_ERROR;
+        return SessionPlayer.PLAYER_STATE_ERROR;
     }
 
     /**
-     * Convert a {@link PlaybackStateCompat.State} into {@link SessionPlayer2.BuffState}.
+     * Convert a {@link PlaybackStateCompat.State} into {@link SessionPlayer.BuffState}.
      */
     // Note: there's no perfect match for this.
     public static int toBufferingState(int playbackStateCompatState) {
         switch (playbackStateCompatState) {
             case PlaybackStateCompat.STATE_BUFFERING:
-                return SessionPlayer2.BUFFERING_STATE_BUFFERING_AND_STARVED;
+                return SessionPlayer.BUFFERING_STATE_BUFFERING_AND_STARVED;
             case PlaybackStateCompat.STATE_PLAYING:
-                return SessionPlayer2.BUFFERING_STATE_COMPLETE;
+                return SessionPlayer.BUFFERING_STATE_COMPLETE;
             default:
-                return SessionPlayer2.BUFFERING_STATE_UNKNOWN;
+                return SessionPlayer.BUFFERING_STATE_UNKNOWN;
         }
     }
 
     /**
      * Convert a {@link MediaControllerCompat.PlaybackInfo} into
-     * {@link MediaController2.PlaybackInfo}.
+     * {@link MediaController.PlaybackInfo}.
      */
-    public static MediaController2.PlaybackInfo toPlaybackInfo2(
+    public static MediaController.PlaybackInfo toPlaybackInfo2(
             MediaControllerCompat.PlaybackInfo info) {
-        return MediaController2.PlaybackInfo.createPlaybackInfo(info.getPlaybackType(),
+        return MediaController.PlaybackInfo.createPlaybackInfo(info.getPlaybackType(),
                 new AudioAttributesCompat.Builder()
                         .setLegacyStreamType(info.getAudioStream()).build(),
                 info.getVolumeControl(), info.getMaxVolume(), info.getCurrentVolume());
@@ -613,7 +619,7 @@
         if (bundle == null) {
             return false;
         }
-        bundle.setClassLoader(MediaUtils2.class.getClassLoader());
+        bundle.setClassLoader(MediaUtils.class.getClassLoader());
         try {
             bundle.size();
         } catch (Exception e) {
@@ -637,13 +643,13 @@
         }
     }
 
-    private static @RatingCompat.Style int getRatingCompatStyle(Rating2 rating) {
-        if (rating instanceof HeartRating2) {
+    private static @RatingCompat.Style int getRatingCompatStyle(Rating rating) {
+        if (rating instanceof HeartRating) {
             return RatingCompat.RATING_HEART;
-        } else if (rating instanceof ThumbRating2) {
+        } else if (rating instanceof ThumbRating) {
             return RatingCompat.RATING_THUMB_UP_DOWN;
-        } else if (rating instanceof StarRating2) {
-            switch (((StarRating2) rating).getMaxStars()) {
+        } else if (rating instanceof StarRating) {
+            switch (((StarRating) rating).getMaxStars()) {
                 case 3:
                     return RatingCompat.RATING_3_STARS;
                 case 4:
@@ -651,7 +657,7 @@
                 case 5:
                     return RatingCompat.RATING_5_STARS;
             }
-        } else if (rating instanceof PercentageRating2) {
+        } else if (rating instanceof PercentageRating) {
             return RatingCompat.RATING_PERCENTAGE;
         }
         return RatingCompat.RATING_NONE;
@@ -718,16 +724,72 @@
     }
 
     /**
+     * Converts {@link MediaControllerCompat#getFlags() session flags} and
+     * {@link PlaybackStateCompat} to the {@link SessionCommandGroup}.
+     * <p>
+     * This ignores {@link PlaybackStateCompat#getActions() actions} in the
+     * {@link PlaybackStateCompat} to workaround media apps' issues that they don't set playback
+     * state correctly.
+     *
+     * @param sessionFlags session flag
+     * @param state playback state
+     * @return the converted session command group
+     */
+    @NonNull
+    public static SessionCommandGroup convertToSessionCommandGroup(long sessionFlags,
+            PlaybackStateCompat state) {
+        SessionCommandGroup.Builder commandsBuilder = new SessionCommandGroup.Builder();
+        boolean includePlaylistCommands = (sessionFlags & FLAG_HANDLES_QUEUE_COMMANDS) != 0;
+        commandsBuilder.addAllPlayerCommands(COMMAND_VERSION_CURRENT, includePlaylistCommands);
+        commandsBuilder.addAllVolumeCommands(COMMAND_VERSION_CURRENT);
+        commandsBuilder.addAllSessionCommands(COMMAND_VERSION_CURRENT);
+
+        commandsBuilder.removeCommand(COMMAND_CODE_PLAYER_SET_SPEED);
+
+        if (state != null && state.getCustomActions() != null) {
+            for (CustomAction customAction : state.getCustomActions()) {
+                commandsBuilder.addCommand(
+                        new SessionCommand(customAction.getAction(), customAction.getExtras()));
+            }
+        }
+        return commandsBuilder.build();
+    }
+
+    /**
+     * Converts {@link CustomAction} in the {@link PlaybackStateCompat} to the custom layout which
+     * is the list of the {@link CommandButton}.
+     *
+     * @param state playback state
+     * @return custom layout. Always non-null.
+     */
+    @NonNull
+    public static List<CommandButton> convertToCustomLayout(PlaybackStateCompat state) {
+        List<CommandButton> layout = new ArrayList<>();
+        if (state == null) {
+            return layout;
+        }
+        for (CustomAction action : state.getCustomActions()) {
+            CommandButton button = new CommandButton.Builder()
+                    .setCommand(new SessionCommand(action.getAction(), action.getExtras()))
+                    .setDisplayName(action.getName())
+                    .setEnabled(true)
+                    .setIconResId(action.getIcon()).build();
+            layout.add(button);
+        }
+        return layout;
+    }
+
+    /**
      * Media2 version of {@link ParcelUtils#toParcelable(VersionedParcelable)}.
      * <p>
-     * This sanitizes {@link MediaItem2}'s subclass information.
+     * This sanitizes {@link MediaItem}'s subclass information.
      *
      * @param item
      * @return
      */
     public static ParcelImpl toParcelable(VersionedParcelable item) {
-        if (item instanceof MediaItem2) {
-            return new MediaItemParcelImpl((MediaItem2) item);
+        if (item instanceof MediaItem) {
+            return new MediaItemParcelImpl((MediaItem) item);
         }
         return (ParcelImpl) ParcelUtils.toParcelable(item);
     }
@@ -741,13 +803,13 @@
     }
 
     private static class MediaItemParcelImpl extends ParcelImpl {
-        private final MediaItem2 mItem;
+        private final MediaItem mItem;
 
-        MediaItemParcelImpl(MediaItem2 item) {
-            // Up-cast (possibly MediaItem2's subclass object) item to MediaItem2 for the
+        MediaItemParcelImpl(MediaItem item) {
+            // Up-cast (possibly MediaItem's subclass object) item to MediaItem for the
             // writeToParcel(). The copied media item will be only used when it's sent across the
             // process.
-            super(new MediaItem2(item));
+            super(new MediaItem(item));
 
             // Keeps the original copy for local binder to send the original item.
             // When local binder is used (i.e. binder call happens in a single process),
@@ -757,7 +819,7 @@
         }
 
         @Override
-        public MediaItem2 getVersionedParcel() {
+        public MediaItem getVersionedParcel() {
             return mItem;
         }
     }
diff --git a/media2/src/main/java/androidx/media2/PercentageRating2.java b/media2/src/main/java/androidx/media2/PercentageRating.java
similarity index 80%
rename from media2/src/main/java/androidx/media2/PercentageRating2.java
rename to media2/src/main/java/androidx/media2/PercentageRating.java
index 67ad130..aac1764 100644
--- a/media2/src/main/java/androidx/media2/PercentageRating2.java
+++ b/media2/src/main/java/androidx/media2/PercentageRating.java
@@ -24,27 +24,27 @@
  * A class for rating expressed as a percentage.
  */
 @VersionedParcelize
-public final class PercentageRating2 implements Rating2 {
+public final class PercentageRating implements Rating {
     private static final float RATING_NOT_RATED = -1.0f;
 
     @ParcelField(1)
     float mPercent;
 
     /**
-     * Creates a unrated PercentageRating2 instance.
+     * Creates a unrated PercentageRating instance.
      */
-    public PercentageRating2() {
+    public PercentageRating() {
         mPercent = RATING_NOT_RATED;
     }
 
     /**
-     * Creates a PercentageRating2 instance with the given percentage.
+     * Creates a PercentageRating instance with the given percentage.
      * If {@code percent} is less than 0f or greater than 100f, it will throw
      * IllegalArgumentException.
      *
      * @param percent the value of the rating
      */
-    public PercentageRating2(float percent) {
+    public PercentageRating(float percent) {
         if (percent < 0.0f || percent > 100.0f) {
             throw new IllegalArgumentException("percent should be in the rage of [0, 100]");
         }
@@ -63,15 +63,15 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof PercentageRating2)) {
+        if (!(obj instanceof PercentageRating)) {
             return false;
         }
-        return mPercent == ((PercentageRating2) obj).mPercent;
+        return mPercent == ((PercentageRating) obj).mPercent;
     }
 
     @Override
     public String toString() {
-        return "PercentageRating2: " + (isRated() ? "percentage=" + mPercent : "unrated");
+        return "PercentageRating: " + (isRated() ? "percentage=" + mPercent : "unrated");
     }
 
     /**
diff --git a/media2/src/main/java/androidx/media2/PlaybackParams2.java b/media2/src/main/java/androidx/media2/PlaybackParams.java
similarity index 84%
rename from media2/src/main/java/androidx/media2/PlaybackParams2.java
rename to media2/src/main/java/androidx/media2/PlaybackParams.java
index c2bb67c..e03617c 100644
--- a/media2/src/main/java/androidx/media2/PlaybackParams2.java
+++ b/media2/src/main/java/androidx/media2/PlaybackParams.java
@@ -19,7 +19,6 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
 import android.media.AudioTrack;
-import android.media.PlaybackParams;
 import android.os.Build;
 
 import androidx.annotation.IntDef;
@@ -35,18 +34,18 @@
  * Structure for common playback params.
  *
  * Used by {@link MediaPlayer} {@link MediaPlayer#getPlaybackParams()} and
- * {@link MediaPlayer#setPlaybackParams(PlaybackParams2)}
+ * {@link MediaPlayer#setPlaybackParams(PlaybackParams)}
  * to control playback behavior.
  * <p> <strong>audio fallback mode:</strong>
  * select out-of-range parameter handling.
  * <ul>
- * <li> {@link PlaybackParams2#AUDIO_FALLBACK_MODE_DEFAULT}:
+ * <li> {@link PlaybackParams#AUDIO_FALLBACK_MODE_DEFAULT}:
  *   System will determine best handling. </li>
- * <li> {@link PlaybackParams2#AUDIO_FALLBACK_MODE_MUTE}:
+ * <li> {@link PlaybackParams#AUDIO_FALLBACK_MODE_MUTE}:
  *   Play silence for params normally out of range.</li>
- * <li> {@link PlaybackParams2#AUDIO_FALLBACK_MODE_FAIL}:
+ * <li> {@link PlaybackParams#AUDIO_FALLBACK_MODE_FAIL}:
  *   Return {@link java.lang.IllegalArgumentException} from
- *   <code>AudioTrack.setPlaybackParams(PlaybackParams2)</code>.</li>
+ *   <code>AudioTrack.setPlaybackParams(PlaybackParams)</code>.</li>
  * </ul>
  * <p> <strong>pitch:</strong> increases or decreases the tonal frequency of the audio content.
  * It is expressed as a multiplicative factor, where normal pitch is 1.0f.
@@ -62,7 +61,7 @@
  * similar to {@link AudioTrack#setPlaybackRate(int)}.</li>
  * </ul>
  */
-public final class PlaybackParams2 {
+public final class PlaybackParams {
     /** @hide */
     @RestrictTo(LIBRARY_GROUP)
     @IntDef(
@@ -82,16 +81,16 @@
     private Integer mAudioFallbackMode;
     private Float mPitch;
     private Float mSpeed;
-    private PlaybackParams mPlaybackParams;
+    private android.media.PlaybackParams mPlaybackParams;
 
-    PlaybackParams2(Integer audioFallbackMode, Float pitch, Float speed) {
+    PlaybackParams(Integer audioFallbackMode, Float pitch, Float speed) {
         mAudioFallbackMode = audioFallbackMode;
         mPitch = pitch;
         mSpeed = speed;
     }
 
     @RequiresApi(Build.VERSION_CODES.M)
-    PlaybackParams2(PlaybackParams playbackParams) {
+    PlaybackParams(android.media.PlaybackParams playbackParams) {
         mPlaybackParams = playbackParams;
     }
 
@@ -141,8 +140,8 @@
     }
 
     /**
-     * Returns the underlying framework {@link PlaybackParams} object. {@code null} if it is not
-     * available.
+     * Returns the underlying framework {@link android.media.PlaybackParams} object. {@code null}
+     * if it is not available.
      * <p>
      * This method is only supported on {@link android.os.Build.VERSION_CODES#M} and later.
      * </p>
@@ -151,7 +150,7 @@
      */
     @RestrictTo(LIBRARY_GROUP)
     @RequiresApi(Build.VERSION_CODES.M)
-    public PlaybackParams getPlaybackParams() {
+    public android.media.PlaybackParams getPlaybackParams() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             return mPlaybackParams;
         } else {
@@ -160,25 +159,25 @@
     }
 
     /**
-     * The builder class that makes it easy to chain setters to create a {@link PlaybackParams2}
+     * The builder class that makes it easy to chain setters to create a {@link PlaybackParams}
      * object.
      */
     public static final class Builder {
         private Integer mAudioFallbackMode;
         private Float mPitch;
         private Float mSpeed;
-        private PlaybackParams mPlaybackParams;
+        private android.media.PlaybackParams mPlaybackParams;
 
         public Builder() {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-                mPlaybackParams = new PlaybackParams();
+                mPlaybackParams = new android.media.PlaybackParams();
             }
         }
 
         /** @hide */
         @RestrictTo(LIBRARY_GROUP)
         @RequiresApi(Build.VERSION_CODES.M)
-        public Builder(PlaybackParams playbackParams) {
+        public Builder(android.media.PlaybackParams playbackParams) {
             mPlaybackParams = playbackParams;
         }
 
@@ -229,14 +228,14 @@
         }
 
         /**
-         * Takes the values of the Builder object and creates a PlaybackParams2 object.
-         * @return PlaybackParams2 object with values from the Builder.
+         * Takes the values of the Builder object and creates a PlaybackParams object.
+         * @return PlaybackParams object with values from the Builder.
          */
-        public @NonNull PlaybackParams2 build() {
+        public @NonNull PlaybackParams build() {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-                return new PlaybackParams2(mPlaybackParams);
+                return new PlaybackParams(mPlaybackParams);
             } else {
-                return new PlaybackParams2(mAudioFallbackMode, mPitch, mSpeed);
+                return new PlaybackParams(mAudioFallbackMode, mPitch, mSpeed);
             }
         }
     }
diff --git a/media2/src/main/java/androidx/media2/Rating2.java b/media2/src/main/java/androidx/media2/Rating.java
similarity index 94%
rename from media2/src/main/java/androidx/media2/Rating2.java
rename to media2/src/main/java/androidx/media2/Rating.java
index 7a4df47..cb18c980 100644
--- a/media2/src/main/java/androidx/media2/Rating2.java
+++ b/media2/src/main/java/androidx/media2/Rating.java
@@ -21,7 +21,7 @@
 /**
  * An interface to encapsulate rating information used as content metadata.
  */
-public interface Rating2 extends VersionedParcelable {
+public interface Rating extends VersionedParcelable {
     /**
      * Returns whether there is a rating value available.
      * @return {@code true} if there is an available rating value.
diff --git a/media2/src/main/java/androidx/media2/RemoteResult2.java b/media2/src/main/java/androidx/media2/RemoteResult.java
similarity index 92%
rename from media2/src/main/java/androidx/media2/RemoteResult2.java
rename to media2/src/main/java/androidx/media2/RemoteResult.java
index 7fca064..b37df19 100644
--- a/media2/src/main/java/androidx/media2/RemoteResult2.java
+++ b/media2/src/main/java/androidx/media2/RemoteResult.java
@@ -17,10 +17,10 @@
 package androidx.media2;
 
 /**
- * Base interface for result classes in {@link MediaSession2} and {@link MediaController2} that may
+ * Base interface for result classes in {@link MediaSession} and {@link MediaController} that may
  * be sent across the processes.
  **/
-interface RemoteResult2 extends BaseResult2 {
+interface RemoteResult extends BaseResult {
     /**
      * Result code representing that the session and controller were disconnected.
      */
diff --git a/media2/src/main/java/androidx/media2/RemoteSessionPlayer2.java b/media2/src/main/java/androidx/media2/RemoteSessionPlayer.java
similarity index 92%
rename from media2/src/main/java/androidx/media2/RemoteSessionPlayer2.java
rename to media2/src/main/java/androidx/media2/RemoteSessionPlayer.java
index 6b454b5..0efddc7 100644
--- a/media2/src/main/java/androidx/media2/RemoteSessionPlayer2.java
+++ b/media2/src/main/java/androidx/media2/RemoteSessionPlayer.java
@@ -30,13 +30,13 @@
  * Base interface for all remote media players that want media session and playback happens on the
  * remote device through MediaRouter.
  * <p>
- * If you use this to the {@link MediaSession2}, session would dispatch incoming volume change event
+ * If you use this to the {@link MediaSession}, session would dispatch incoming volume change event
  * to the player instead of changing device stream volume.
  *
  * @hide
  */
 @RestrictTo(LIBRARY_GROUP)
-public abstract class RemoteSessionPlayer2 extends SessionPlayer2 {
+public abstract class RemoteSessionPlayer extends SessionPlayer {
     /**
      * @hide
      */
@@ -121,7 +121,11 @@
      */
     public abstract @VolumeControlType int getVolumeControlType();
 
-    public static class Callback extends SessionPlayer2.PlayerCallback {
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY_GROUP)
+    public static class Callback extends SessionPlayer.PlayerCallback {
         /**
          * Called to indicate that the volume has changed.
          *
@@ -129,7 +133,7 @@
          * @param volume the new volume
          * @see #setVolume(int)
          */
-        public void onVolumeChanged(@NonNull RemoteSessionPlayer2 player2, int volume) {
+        public void onVolumeChanged(@NonNull RemoteSessionPlayer player2, int volume) {
         }
     }
 }
diff --git a/media2/src/main/java/androidx/media2/SequencedFutureManager.java b/media2/src/main/java/androidx/media2/SequencedFutureManager.java
index d9026da..4ae5541 100644
--- a/media2/src/main/java/androidx/media2/SequencedFutureManager.java
+++ b/media2/src/main/java/androidx/media2/SequencedFutureManager.java
@@ -98,7 +98,7 @@
             } else {
                 if (DEBUG) {
                     // Note: May not be an error if the caller doesn't return ListenableFuture
-                    //       e.g. MediaSession2#broadcastCustomCommand
+                    //       e.g. MediaSession#broadcastCustomCommand
                     Log.d(TAG, "Unexpected sequence number, seq=" + seq,
                             new IllegalArgumentException());
                 }
diff --git a/media2/src/main/java/androidx/media2/SessionCommand2.java b/media2/src/main/java/androidx/media2/SessionCommand.java
similarity index 69%
rename from media2/src/main/java/androidx/media2/SessionCommand2.java
rename to media2/src/main/java/androidx/media2/SessionCommand.java
index d5f66e8..5db236d 100644
--- a/media2/src/main/java/androidx/media2/SessionCommand2.java
+++ b/media2/src/main/java/androidx/media2/SessionCommand.java
@@ -29,9 +29,9 @@
 import androidx.annotation.RestrictTo;
 import androidx.collection.ArrayMap;
 import androidx.core.util.ObjectsCompat;
-import androidx.media2.MediaLibraryService2.LibraryParams;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media2.MediaLibraryService.LibraryParams;
+import androidx.media2.MediaSession.ControllerInfo;
+import androidx.media2.MediaSession.SessionCallback;
 import androidx.versionedparcelable.ParcelField;
 import androidx.versionedparcelable.VersionedParcelable;
 import androidx.versionedparcelable.VersionedParcelize;
@@ -41,22 +41,22 @@
 import java.util.List;
 
 /**
- * Define a command that a {@link MediaController2} can send to a {@link MediaSession2}.
+ * Define a command that a {@link MediaController} can send to a {@link MediaSession}.
  * <p>
  * If {@link #getCommandCode()} isn't {@link #COMMAND_CODE_CUSTOM}), it's predefined command.
  * If {@link #getCommandCode()} is {@link #COMMAND_CODE_CUSTOM}), it's custom command and
  * {@link #getCustomCommand()} shouldn't be {@code null}.
  */
 @VersionedParcelize
-public final class SessionCommand2 implements VersionedParcelable {
+public final class SessionCommand implements VersionedParcelable {
     /**
      * The first version of session commands. This version is for commands introduced in
      * AndroidX 1.0.0.
      * <p>
      * This would be used to specify which commands should be added by
-     * {@link SessionCommandGroup2.Builder#addAllPredefinedCommands(int)}
+     * {@link SessionCommandGroup.Builder#addAllPredefinedCommands(int)}
      *
-     * @see SessionCommandGroup2.Builder#addAllPredefinedCommands(int)
+     * @see SessionCommandGroup.Builder#addAllPredefinedCommands(int)
      */
     public static final int COMMAND_VERSION_1 = 1;
 
@@ -111,9 +111,6 @@
             COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH,
             COMMAND_CODE_SESSION_PREPARE_FROM_URI,
             COMMAND_CODE_SESSION_SET_RATING,
-            COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO,
-            COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO,
-            COMMAND_CODE_SESSION_SELECT_ROUTE,
             COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT,
             COMMAND_CODE_LIBRARY_SUBSCRIBE,
             COMMAND_CODE_LIBRARY_UNSUBSCRIBE,
@@ -127,73 +124,73 @@
 
     /**
      * Command code for the custom command which can be defined by string action in the
-     * {@link SessionCommand2}.
+     * {@link SessionCommand}.
      */
     public static final int COMMAND_CODE_CUSTOM = 0;
 
     ////////////////////////////////////////////////////////////////////////////////////////////////
-    // Player commands (i.e. commands to {@link SessionPlayer2})
+    // Player commands (i.e. commands to {@link SessionPlayer})
     ////////////////////////////////////////////////////////////////////////////////////////////////
     static final ArrayMap<Integer, Range> VERSION_PLAYER_COMMANDS_MAP = new ArrayMap<>();
     static final ArrayMap<Integer, Range> VERSION_PLAYER_PLAYLIST_COMMANDS_MAP = new ArrayMap<>();
 
     /**
-     * Command code for {@link MediaController2#play()}.
+     * Command code for {@link MediaController#play()}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
-     * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
-     * SessionCommand2)}.
+     * through the {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo,
+     * SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_PLAY = 10000;
 
     /**
-     * Command code for {@link MediaController2#pause()}.
+     * Command code for {@link MediaController#pause()}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
-     * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
-     * SessionCommand2)}.
+     * through the {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo,
+     * SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_PAUSE = 10001;
 
     /**
-     * Command code for {@link MediaController2#prepare()}.
+     * Command code for {@link MediaController#prepare()}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
-     * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
-     * SessionCommand2)}.
+     * through the {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo,
+     * SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_PREPARE = 10002;
 
     /**
-     * Command code for {@link MediaController2#seekTo(long)}.
+     * Command code for {@link MediaController#seekTo(long)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
-     * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
-     * SessionCommand2)}.
+     * through the {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo,
+     * SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_SEEK_TO = 10003;
 
     /**
-     * Command code for {@link MediaController2#setPlaybackSpeed(float)}}.
+     * Command code for {@link MediaController#setPlaybackSpeed(float)}}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
-     * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
-     * SessionCommand2)}.
+     * through the {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo,
+     * SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_SET_SPEED = 10004;
 
     /**
-     * Command code for {@link MediaController2#getPlaylist()}. This will expose metadata
+     * Command code for {@link MediaController#getPlaylist()}. This will expose metadata
      * information to the controller.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
@@ -201,44 +198,44 @@
     public static final int COMMAND_CODE_PLAYER_GET_PLAYLIST = 10005;
 
     /**
-     * Command code for {@link MediaController2#setPlaylist(List, MediaMetadata2)}.
+     * Command code for {@link MediaController#setPlaylist(List, MediaMetadata)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_SET_PLAYLIST = 10006;
 
     /**
-     * Command code for {@link MediaController2#skipToPlaylistItem(int)}.
+     * Command code for {@link MediaController#skipToPlaylistItem(int)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_SKIP_TO_PLAYLIST_ITEM = 10007;
 
     /**
-     * Command code for {@link MediaController2#skipToPreviousPlaylistItem()}.
+     * Command code for {@link MediaController#skipToPreviousPlaylistItem()}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the {@link SessionCallback#onCommandRequest(
-     * MediaSession2, ControllerInfo, SessionCommand2)}.
+     * MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM = 10008;
 
     /**
-     * Command code for {@link MediaController2#skipToNextPlaylistItem()}.
+     * Command code for {@link MediaController#skipToNextPlaylistItem()}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the {@link SessionCallback#onCommandRequest(
-     * MediaSession2, ControllerInfo, SessionCommand2)}.
+     * MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
@@ -246,29 +243,29 @@
     public static final int COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM = 10009;
 
     /**
-     * Command code for {@link MediaController2#setShuffleMode(int)}.
+     * Command code for {@link MediaController#setShuffleMode(int)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_SET_SHUFFLE_MODE = 10010;
 
     /**
-     * Command code for {@link MediaController2#setRepeatMode(int)}.
+     * Command code for {@link MediaController#setRepeatMode(int)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_SET_REPEAT_MODE = 10011;
 
     /**
-     * Command code for {@link MediaController2#getPlaylistMetadata()}. This will expose metadata
+     * Command code for {@link MediaController#getPlaylistMetadata()}. This will expose metadata
      * information to the controller.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
@@ -276,40 +273,40 @@
     public static final int COMMAND_CODE_PLAYER_GET_PLAYLIST_METADATA = 10012;
 
     /**
-     * Command code for {@link MediaController2#addPlaylistItem(int, String)}.
+     * Command code for {@link MediaController#addPlaylistItem(int, String)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_ADD_PLAYLIST_ITEM = 10013;
 
     /**
-     * Command code for {@link MediaController2#addPlaylistItem(int, String)}.
+     * Command code for {@link MediaController#addPlaylistItem(int, String)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_REMOVE_PLAYLIST_ITEM = 10014;
 
     /**
-     * Command code for {@link MediaController2#replacePlaylistItem(int, String)}.
+     * Command code for {@link MediaController#replacePlaylistItem(int, String)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_REPLACE_PLAYLIST_ITEM = 10015;
 
     /**
-     * Command code for {@link MediaController2#getCurrentMediaItem()}. This will expose metadata
+     * Command code for {@link MediaController#getCurrentMediaItem()}. This will expose metadata
      * information to the controller.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
@@ -317,22 +314,22 @@
     public static final int COMMAND_CODE_PLAYER_GET_CURRENT_MEDIA_ITEM = 10016;
 
     /**
-     * Command code for {@link MediaController2#updatePlaylistMetadata(MediaMetadata2)}.
+     * Command code for {@link MediaController#updatePlaylistMetadata(MediaMetadata)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_PLAYER_UPDATE_LIST_METADATA = 10017;
 
     /**
-     * Command code for {@link MediaController2#setMediaItem(String)}.
+     * Command code for {@link MediaController#setMediaItem(String)}.
      * <p>
      * Command would be sent directly to the player if the session doesn't reject the request
      * through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
@@ -355,11 +352,11 @@
     static final ArrayMap<Integer, Range> VERSION_VOLUME_COMMANDS_MAP = new ArrayMap<>();
 
     /**
-     * Command code for {@link MediaController2#setVolumeTo(int, int)}.
+     * Command code for {@link MediaController#setVolumeTo(int, int)}.
      * <p>
      * <p>
      * If the session doesn't reject the request through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)},
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)},
      * command would adjust the device volume. It would send to the player directly only if it's
      * remote player. See RouteMediaPlayer for a remote player.
      * <p>
@@ -368,10 +365,10 @@
     public static final int COMMAND_CODE_VOLUME_SET_VOLUME = 30000;
 
     /**
-     * Command code for {@link MediaController2#adjustVolume(int, int)}.
+     * Command code for {@link MediaController#adjustVolume(int, int)}.
      * <p>
      * If the session doesn't reject the request through the
-     * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)},
+     * {@link SessionCallback#onCommandRequest(MediaSession, ControllerInfo, SessionCommand)},
      * command would adjust the device volume. It would send to the player directly only if it's
      * remote player. See RouteMediaPlayer for a remote player.
      * <p>
@@ -386,40 +383,40 @@
     }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////
-    // Session commands (i.e. commands to {@link MediaSession2#SessionCallback})
+    // Session commands (i.e. commands to {@link MediaSession#SessionCallback})
     ////////////////////////////////////////////////////////////////////////////////////////////////
     static final ArrayMap<Integer, Range> VERSION_SESSION_COMMANDS_MAP = new ArrayMap<>();
 
     /**
-     * Command code for {@link MediaController2#fastForward()}.
+     * Command code for {@link MediaController#fastForward()}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_SESSION_FAST_FORWARD = 40000;
 
     /**
-     * Command code for {@link MediaController2#rewind()}.
+     * Command code for {@link MediaController#rewind()}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_SESSION_REWIND = 40001;
 
     /**
-     * Command code for {@link MediaController2#skipForward()}.
+     * Command code for {@link MediaController#skipForward()}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_SESSION_SKIP_FORWARD = 40002;
 
     /**
-     * Command code for {@link MediaController2#skipBackward()}.
+     * Command code for {@link MediaController#skipBackward()}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_SESSION_SKIP_BACKWARD = 40003;
 
     /**
-     * Command code for {@link MediaController2#playFromMediaId(String, Bundle)}.
+     * Command code for {@link MediaController#playFromMediaId(String, Bundle)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      * @hide
@@ -428,7 +425,7 @@
     public static final int COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID = 40004;
 
     /**
-     * Command code for {@link MediaController2#playFromSearch(String, Bundle)}.
+     * Command code for {@link MediaController#playFromSearch(String, Bundle)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      * @hide
@@ -437,7 +434,7 @@
     public static final int COMMAND_CODE_SESSION_PLAY_FROM_SEARCH = 40005;
 
     /**
-     * Command code for {@link MediaController2#playFromUri(Uri, Bundle)}.
+     * Command code for {@link MediaController#playFromUri(Uri, Bundle)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      * @hide
@@ -446,7 +443,7 @@
     public static final int COMMAND_CODE_SESSION_PLAY_FROM_URI = 40006;
 
     /**
-     * Command code for {@link MediaController2#prepareFromMediaId(String, Bundle)}.
+     * Command code for {@link MediaController#prepareFromMediaId(String, Bundle)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      * @hide
@@ -455,7 +452,7 @@
     public static final int COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID = 40007;
 
     /**
-     * Command code for {@link MediaController2#prepareFromSearch(String, Bundle)}.
+     * Command code for {@link MediaController#prepareFromSearch(String, Bundle)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      * @hide
@@ -464,7 +461,7 @@
     public static final int COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH = 40008;
 
     /**
-     * Command code for {@link MediaController2#prepareFromUri(Uri, Bundle)}.
+     * Command code for {@link MediaController#prepareFromUri(Uri, Bundle)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      * @hide
@@ -473,43 +470,15 @@
     public static final int COMMAND_CODE_SESSION_PREPARE_FROM_URI = 40009;
 
     /**
-     * Command code for {@link MediaController2#setRating(String, Rating2)}.
+     * Command code for {@link MediaController#setRating(String, Rating)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_SESSION_SET_RATING = 40010;
 
-    /**
-     * Command code for {@link MediaController2#subscribeRoutesInfo()}
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public static final int COMMAND_CODE_SESSION_SUBSCRIBE_ROUTES_INFO = 40011;
-
-    /**
-     * Command code for {@link MediaController2#unsubscribeRoutesInfo()}
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public static final int COMMAND_CODE_SESSION_UNSUBSCRIBE_ROUTES_INFO = 40012;
-
-    /**
-     * Command code for {@link MediaController2#selectRoute(Bundle)}}
-     * <p>
-     * Code version is {@link #COMMAND_VERSION_1}.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public static final int COMMAND_CODE_SESSION_SELECT_ROUTE = 40013;
-
     static {
         VERSION_SESSION_COMMANDS_MAP.put(COMMAND_VERSION_1,
-                new Range(COMMAND_CODE_SESSION_FAST_FORWARD,
-                        COMMAND_CODE_SESSION_SELECT_ROUTE));
+                new Range(COMMAND_CODE_SESSION_FAST_FORWARD, COMMAND_CODE_SESSION_SET_RATING));
     }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////
@@ -518,49 +487,49 @@
     static final ArrayMap<Integer, Range> VERSION_LIBRARY_COMMANDS_MAP = new ArrayMap<>();
 
     /**
-     * Command code for {@link MediaBrowser2#getLibraryRoot(LibraryParams)}.
+     * Command code for {@link MediaBrowser#getLibraryRoot(LibraryParams)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT = 50000;
 
     /**
-     * Command code for {@link MediaBrowser2#subscribe(String, LibraryParams)}.
+     * Command code for {@link MediaBrowser#subscribe(String, LibraryParams)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_LIBRARY_SUBSCRIBE = 50001;
 
     /**
-     * Command code for {@link MediaBrowser2#unsubscribe(String)}.
+     * Command code for {@link MediaBrowser#unsubscribe(String)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_LIBRARY_UNSUBSCRIBE = 50002;
 
     /**
-     * Command code for {@link MediaBrowser2#getChildren(String, int, int, LibraryParams)}.
+     * Command code for {@link MediaBrowser#getChildren(String, int, int, LibraryParams)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_LIBRARY_GET_CHILDREN = 50003;
 
     /**
-     * Command code for {@link MediaBrowser2#getItem(String)}.
+     * Command code for {@link MediaBrowser#getItem(String)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_LIBRARY_GET_ITEM = 50004;
 
     /**
-     * Command code for {@link MediaBrowser2#search(String, LibraryParams)}.
+     * Command code for {@link MediaBrowser#search(String, LibraryParams)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
     public static final int COMMAND_CODE_LIBRARY_SEARCH = 50005;
 
     /**
-     * Command code for {@link MediaBrowser2#getSearchResult(String, int, int, LibraryParams)}.
+     * Command code for {@link MediaBrowser#getSearchResult(String, int, int, LibraryParams)}.
      * <p>
      * Code version is {@link #COMMAND_VERSION_1}.
      */
@@ -572,11 +541,6 @@
                         COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT));
     }
 
-    private static final String KEY_COMMAND_CODE = "android.media.session2.command.command_code";
-    private static final String KEY_COMMAND_CUSTOM_COMMAND =
-            "android.media.session2.command.custom_command";
-    private static final String KEY_COMMAND_EXTRAS = "android.media.session2.command.extras";
-
     @ParcelField(1)
     @CommandCode int mCommandCode;
     // Nonnull if it's custom command
@@ -588,7 +552,7 @@
     /**
      * Used for VersionedParcelable.
      */
-    SessionCommand2() {
+    SessionCommand() {
     }
 
     /**
@@ -596,7 +560,7 @@
      *
      * @param commandCode A command code for predefined command.
      */
-    public SessionCommand2(@CommandCode int commandCode) {
+    public SessionCommand(@CommandCode int commandCode) {
         if (commandCode == COMMAND_CODE_CUSTOM) {
             throw new IllegalArgumentException("commandCode shouldn't be COMMAND_CODE_CUSTOM");
         }
@@ -611,7 +575,7 @@
      * @param action The action of this custom command.
      * @param extras An extra bundle for this custom command.
      */
-    public SessionCommand2(@NonNull String action, @Nullable Bundle extras) {
+    public SessionCommand(@NonNull String action, @Nullable Bundle extras) {
         if (action == null) {
             throw new IllegalArgumentException("action shouldn't be null");
         }
@@ -644,46 +608,12 @@
         return mExtras;
     }
 
-    /**
-     * @return a new {@link Bundle} instance from the command
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public Bundle toBundle() {
-        Bundle bundle = new Bundle();
-        bundle.putInt(KEY_COMMAND_CODE, mCommandCode);
-        bundle.putString(KEY_COMMAND_CUSTOM_COMMAND, mCustomCommand);
-        bundle.putBundle(KEY_COMMAND_EXTRAS, mExtras);
-        return bundle;
-    }
-
-    /**
-     * @return a new {@link SessionCommand2} instance from the Bundle
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public static SessionCommand2 fromBundle(@NonNull Bundle command) {
-        if (command == null) {
-            throw new IllegalArgumentException("command shouldn't be null");
-        }
-        int code = command.getInt(KEY_COMMAND_CODE);
-        if (code != COMMAND_CODE_CUSTOM) {
-            return new SessionCommand2(code);
-        } else {
-            String customCommand = command.getString(KEY_COMMAND_CUSTOM_COMMAND);
-            if (customCommand == null) {
-                return null;
-            }
-            return new SessionCommand2(customCommand, command.getBundle(KEY_COMMAND_EXTRAS));
-        }
-    }
-
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof SessionCommand2)) {
+        if (!(obj instanceof SessionCommand)) {
             return false;
         }
-        SessionCommand2 other = (SessionCommand2) obj;
+        SessionCommand other = (SessionCommand) obj;
         return mCommandCode == other.mCommandCode
                 && TextUtils.equals(mCustomCommand, other.mCustomCommand);
     }
diff --git a/media2/src/main/java/androidx/media2/SessionCommandGroup2.java b/media2/src/main/java/androidx/media2/SessionCommandGroup.java
similarity index 63%
rename from media2/src/main/java/androidx/media2/SessionCommandGroup2.java
rename to media2/src/main/java/androidx/media2/SessionCommandGroup.java
index 2e67ae1..3288a16 100644
--- a/media2/src/main/java/androidx/media2/SessionCommandGroup2.java
+++ b/media2/src/main/java/androidx/media2/SessionCommandGroup.java
@@ -17,51 +17,45 @@
 package androidx.media2;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static androidx.media2.SessionCommand2.COMMAND_CODE_CUSTOM;
-import static androidx.media2.SessionCommand2.COMMAND_VERSION_1;
-
-import android.os.Bundle;
-import android.os.Parcelable;
+import static androidx.media2.SessionCommand.COMMAND_CODE_CUSTOM;
+import static androidx.media2.SessionCommand.COMMAND_VERSION_1;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.collection.ArrayMap;
-import androidx.media2.SessionCommand2.CommandCode;
-import androidx.media2.SessionCommand2.CommandVersion;
-import androidx.media2.SessionCommand2.Range;
+import androidx.media2.SessionCommand.CommandCode;
+import androidx.media2.SessionCommand.CommandVersion;
+import androidx.media2.SessionCommand.Range;
 import androidx.versionedparcelable.ParcelField;
 import androidx.versionedparcelable.VersionedParcelable;
 import androidx.versionedparcelable.VersionedParcelize;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 /**
- * A set of {@link SessionCommand2} which represents a command group.
+ * A set of {@link SessionCommand} which represents a command group.
  */
 @VersionedParcelize
-public final class SessionCommandGroup2 implements VersionedParcelable {
-    private static final String TAG = "SessionCommandGroup2";
-    private static final String KEY_COMMANDS = "android.media.session2.commandgroup.commands";
+public final class SessionCommandGroup implements VersionedParcelable {
+    private static final String TAG = "SessionCommandGroup";
 
     @ParcelField(1)
-    Set<SessionCommand2> mCommands = new HashSet<>();
+    Set<SessionCommand> mCommands = new HashSet<>();
 
     /**
      * Default Constructor.
      */
-    public SessionCommandGroup2() { }
+    public SessionCommandGroup() { }
 
     /**
-     * Creates a new SessionCommandGroup2 with commands copied from another object.
+     * Creates a new SessionCommandGroup with commands copied from another object.
      *
      * @param commands The collection of commands to copy.
      */
-    public SessionCommandGroup2(@Nullable Collection<SessionCommand2> commands) {
+    public SessionCommandGroup(@Nullable Collection<SessionCommand> commands) {
         if (commands != null) {
             mCommands.addAll(commands);
         }
@@ -74,7 +68,7 @@
      * @hide TODO remove this method
      */
     @RestrictTo(LIBRARY_GROUP)
-    public void addCommand(@NonNull SessionCommand2 command) {
+    public void addCommand(@NonNull SessionCommand command) {
         if (command == null) {
             throw new IllegalArgumentException("command shouldn't be null");
         }
@@ -87,17 +81,17 @@
      * Adds a predefined command with given {@code commandCode} to this command group.
      *
      * @param commandCode A command code to add.
-     *                    Shouldn't be {@link SessionCommand2#COMMAND_CODE_CUSTOM}.
+     *                    Shouldn't be {@link SessionCommand#COMMAND_CODE_CUSTOM}.
      * @hide TODO remove this method
      */
     @RestrictTo(LIBRARY_GROUP)
     public void addCommand(@CommandCode int commandCode) {
         if (commandCode == COMMAND_CODE_CUSTOM) {
             throw new IllegalArgumentException(
-                    "Use addCommand(SessionCommand2) for COMMAND_CODE_CUSTOM.");
+                    "Use addCommand(SessionCommand) for COMMAND_CODE_CUSTOM.");
         }
         if (!hasCommand(commandCode)) {
-            mCommands.add(new SessionCommand2(commandCode));
+            mCommands.add(new SessionCommand(commandCode));
         }
     }
 
@@ -106,7 +100,7 @@
      *
      * @param command A command to find. Shouldn't be {@code null}.
      */
-    public boolean hasCommand(@NonNull SessionCommand2 command) {
+    public boolean hasCommand(@NonNull SessionCommand command) {
         if (command == null) {
             throw new IllegalArgumentException("command shouldn't be null");
         }
@@ -117,13 +111,13 @@
      * Checks whether this command group has a command that matches given {@code commandCode}.
      *
      * @param commandCode A command code to find.
-     *                    Shouldn't be {@link SessionCommand2#COMMAND_CODE_CUSTOM}.
+     *                    Shouldn't be {@link SessionCommand#COMMAND_CODE_CUSTOM}.
      */
     public boolean hasCommand(@CommandCode int commandCode) {
         if (commandCode == COMMAND_CODE_CUSTOM) {
             throw new IllegalArgumentException("Use hasCommand(Command) for custom command");
         }
-        for (SessionCommand2 command : mCommands) {
+        for (SessionCommand command : mCommands) {
             if (command.getCommandCode() == commandCode) {
                 return true;
             }
@@ -134,69 +128,26 @@
     /**
      * Gets all commands of this command group.
      */
-    public @NonNull Set<SessionCommand2> getCommands() {
+    public @NonNull Set<SessionCommand> getCommands() {
         return new HashSet<>(mCommands);
     }
 
     /**
-     * @return A new {@link Bundle} instance from the SessionCommandGroup2.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public @NonNull Bundle toBundle() {
-        ArrayList<Bundle> list = new ArrayList<>();
-        for (SessionCommand2 command : mCommands) {
-            list.add(command.toBundle());
-        }
-        Bundle bundle = new Bundle();
-        bundle.putParcelableArrayList(KEY_COMMANDS, list);
-        return bundle;
-    }
-
-    /**
-     * @return A new {@link SessionCommandGroup2} instance from the bundle.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public static @Nullable SessionCommandGroup2 fromBundle(Bundle commands) {
-        if (commands == null) {
-            return null;
-        }
-        List<Parcelable> list = commands.getParcelableArrayList(KEY_COMMANDS);
-        if (list == null) {
-            return null;
-        }
-        SessionCommandGroup2 commandGroup = new SessionCommandGroup2();
-        for (int i = 0; i < list.size(); i++) {
-            Parcelable parcelable = list.get(i);
-            if (!(parcelable instanceof Bundle)) {
-                continue;
-            }
-            Bundle commandBundle = (Bundle) parcelable;
-            SessionCommand2 command = SessionCommand2.fromBundle(commandBundle);
-            if (command != null) {
-                commandGroup.addCommand(command);
-            }
-        }
-        return commandGroup;
-    }
-
-    /**
-     * Builds a {@link SessionCommandGroup2} object.
+     * Builds a {@link SessionCommandGroup} object.
      */
     public static final class Builder {
-        private Set<SessionCommand2> mCommands;
+        private Set<SessionCommand> mCommands;
 
         public Builder() {
             mCommands = new HashSet<>();
         }
 
         /**
-         * Creates a new builder for {@link SessionCommandGroup2} with commands copied from another
-         * {@link SessionCommandGroup2} object.
+         * Creates a new builder for {@link SessionCommandGroup} with commands copied from another
+         * {@link SessionCommandGroup} object.
          * @param commandGroup
          */
-        public Builder(@NonNull SessionCommandGroup2 commandGroup) {
+        public Builder(@NonNull SessionCommandGroup commandGroup) {
             mCommands = commandGroup.getCommands();
         }
 
@@ -205,7 +156,7 @@
          *
          * @param command A command to add. Shouldn't be {@code null}.
          */
-        public @NonNull Builder addCommand(@NonNull SessionCommand2 command) {
+        public @NonNull Builder addCommand(@NonNull SessionCommand command) {
             if (command == null) {
                 throw new IllegalArgumentException("command shouldn't be null");
             }
@@ -217,14 +168,14 @@
          * Adds a predefined command with given {@code commandCode} to this command group.
          *
          * @param commandCode A command code to add.
-         *                    Shouldn't be {@link SessionCommand2#COMMAND_CODE_CUSTOM}.
+         *                    Shouldn't be {@link SessionCommand#COMMAND_CODE_CUSTOM}.
          */
         public @NonNull Builder addCommand(@CommandCode int commandCode) {
             if (commandCode == COMMAND_CODE_CUSTOM) {
                 throw new IllegalArgumentException(
-                        "Use addCommand(SessionCommand2) for COMMAND_CODE_CUSTOM.");
+                        "Use addCommand(SessionCommand) for COMMAND_CODE_CUSTOM.");
             }
-            mCommands.add(new SessionCommand2(commandCode));
+            mCommands.add(new SessionCommand(commandCode));
             return this;
         }
 
@@ -234,12 +185,12 @@
          * with implementation.
          * <p>
          * When you update support library version, it's recommended to take a look
-         * {@link SessionCommand2} to double check whether this only adds commands that you want.
+         * {@link SessionCommand} to double check whether this only adds commands that you want.
          * You may increase the version here.
          *
          * @param version command version
-         * @see SessionCommand2#COMMAND_VERSION_1
-         * @see MediaSession2.SessionCallback#onConnect(MediaSession2, MediaSession2.ControllerInfo)
+         * @see SessionCommand#COMMAND_VERSION_1
+         * @see MediaSession.SessionCallback#onConnect(MediaSession, MediaSession.ControllerInfo)
          */
         public @NonNull Builder addAllPredefinedCommands(@CommandVersion int version) {
             if (version != COMMAND_VERSION_1) {
@@ -257,7 +208,7 @@
          *
          * @param command A command to find. Shouldn't be {@code null}.
          */
-        public @NonNull Builder removeCommand(@NonNull SessionCommand2 command) {
+        public @NonNull Builder removeCommand(@NonNull SessionCommand command) {
             if (command == null) {
                 throw new IllegalArgumentException("command shouldn't be null");
             }
@@ -269,18 +220,18 @@
          * Removes a command from this group which matches given {@code commandCode}.
          *
          * @param commandCode A command code to find.
-         *                    Shouldn't be {@link SessionCommand2#COMMAND_CODE_CUSTOM}.
+         *                    Shouldn't be {@link SessionCommand#COMMAND_CODE_CUSTOM}.
          */
         public @NonNull Builder removeCommand(@CommandCode int commandCode) {
             if (commandCode == COMMAND_CODE_CUSTOM) {
                 throw new IllegalArgumentException("commandCode shouldn't be COMMAND_CODE_CUSTOM");
             }
-            mCommands.remove(new SessionCommand2(commandCode));
+            mCommands.remove(new SessionCommand(commandCode));
             return this;
         }
 
         @NonNull Builder addAllPlayerCommands(@CommandVersion int version) {
-            addCommands(version, SessionCommand2.VERSION_PLAYER_COMMANDS_MAP);
+            addCommands(version, SessionCommand.VERSION_PLAYER_COMMANDS_MAP);
             return this;
         }
 
@@ -290,8 +241,8 @@
                 return addAllPlayerCommands(version);
             }
             for (int i = COMMAND_VERSION_1; i <= version; i++) {
-                Range include = SessionCommand2.VERSION_PLAYER_COMMANDS_MAP.get(i);
-                Range exclude = SessionCommand2.VERSION_PLAYER_PLAYLIST_COMMANDS_MAP.get(i);
+                Range include = SessionCommand.VERSION_PLAYER_COMMANDS_MAP.get(i);
+                Range exclude = SessionCommand.VERSION_PLAYER_PLAYLIST_COMMANDS_MAP.get(i);
                 for (int code = include.lower; code <= include.upper; code++) {
                     if (code < exclude.lower && code > exclude.upper) {
                         addCommand(code);
@@ -302,17 +253,17 @@
         }
 
         @NonNull Builder addAllVolumeCommands(@CommandVersion int version) {
-            addCommands(version, SessionCommand2.VERSION_VOLUME_COMMANDS_MAP);
+            addCommands(version, SessionCommand.VERSION_VOLUME_COMMANDS_MAP);
             return this;
         }
 
         @NonNull Builder addAllSessionCommands(@CommandVersion int version) {
-            addCommands(version, SessionCommand2.VERSION_SESSION_COMMANDS_MAP);
+            addCommands(version, SessionCommand.VERSION_SESSION_COMMANDS_MAP);
             return this;
         }
 
         @NonNull Builder addAllLibraryCommands(@CommandVersion int version) {
-            addCommands(version, SessionCommand2.VERSION_LIBRARY_COMMANDS_MAP);
+            addCommands(version, SessionCommand.VERSION_LIBRARY_COMMANDS_MAP);
             return this;
         }
 
@@ -326,12 +277,12 @@
         }
 
         /**
-         * Builds {@link SessionCommandGroup2}.
+         * Builds {@link SessionCommandGroup}.
          *
-         * @return a new {@link SessionCommandGroup2}.
+         * @return a new {@link SessionCommandGroup}.
          */
-        public @NonNull SessionCommandGroup2 build() {
-            return new SessionCommandGroup2(mCommands);
+        public @NonNull SessionCommandGroup build() {
+            return new SessionCommandGroup(mCommands);
         }
     }
 }
diff --git a/media2/src/main/java/androidx/media2/SessionPlayer2.java b/media2/src/main/java/androidx/media2/SessionPlayer.java
similarity index 85%
rename from media2/src/main/java/androidx/media2/SessionPlayer2.java
rename to media2/src/main/java/androidx/media2/SessionPlayer.java
index fbef7c4..76b2dd5 100644
--- a/media2/src/main/java/androidx/media2/SessionPlayer2.java
+++ b/media2/src/main/java/androidx/media2/SessionPlayer.java
@@ -55,15 +55,15 @@
  *
  * <h3 id="BestPractices">Best practices</h3>
  *
- * Here are best practices when implementing/using SessionPlayer2:
+ * Here are best practices when implementing/using SessionPlayer:
  *
  * <ul>
  * <li>When updating UI, you should respond to {@link PlayerCallback} invocations instead of
  * {@link PlayerResult} objects since the player can be controlled by others.
- * <li>When a SessionPlayer2 object is no longer being used, call {@link #close()} as soon as
+ * <li>When a SessionPlayer object is no longer being used, call {@link #close()} as soon as
  * possible to release the resources used by the internal player engine associated with the
- * SessionPlayer2. For example, if a player uses hardware decoder, other player instances may
- * fallback to software decoders or fail to play. You cannot use SessionPlayer2 instance after
+ * SessionPlayer. For example, if a player uses hardware decoder, other player instances may
+ * fallback to software decoders or fail to play. You cannot use SessionPlayer instance after
  * you call {@link #close()}. There is no way to reuse the instance.
  * <li>The current playback position can be retrieved with a call to {@link #getCurrentPosition()},
  * which is helpful for applications such as a music player that need to keep track of the playback
@@ -77,13 +77,13 @@
  * </ul>
  *
  * <h3 id="PlayerStates">Player states</h3>
- * The playback control of audio/video files is managed as a state machine. The SessionPlayer2
+ * The playback control of audio/video files is managed as a state machine. The SessionPlayer
  * defines four states:
  * <ol>
  *     <li>{@link #PLAYER_STATE_IDLE}: Initial state after the instantiation.
  *         <p>
- *         While in this state, you should call {@link #setMediaItem(MediaItem2)} or
- *         {@link #setPlaylist(List, MediaMetadata2)}. Check returned {@link ListenableFuture} for
+ *         While in this state, you should call {@link #setMediaItem(MediaItem)} or
+ *         {@link #setPlaylist(List, MediaMetadata)}. Check returned {@link ListenableFuture} for
  *         potential error.
  *         <p>
  *         Calling {@link #prepare()} transfers this object to {@link #PLAYER_STATE_PAUSED}.
@@ -95,7 +95,7 @@
  *     <li>{@link #PLAYER_STATE_PLAYING}: State when the player plays the media item.
  *         <p>
  *         In this state, {@link PlayerCallback#onBufferingStateChanged(
- *         SessionPlayer2, MediaItem2, int)} will be called regularly to tell the buffering status.
+ *         SessionPlayer, MediaItem, int)} will be called regularly to tell the buffering status.
  *         <p>
  *         Playback state would remain {@link #PLAYER_STATE_PLAYING} when the currently playing
  *         media item is changed.
@@ -103,7 +103,7 @@
  *         When the playback reaches the end of stream, the behavior depends on repeat mode, set by
  *         {@link #setRepeatMode(int)}. If the repeat mode was set to {@link #REPEAT_MODE_NONE},
  *         the player will transfer to the {@link #PLAYER_STATE_PAUSED}. Otherwise, the
- *         SessionPlayer2 object remains in the {@link #PLAYER_STATE_PLAYING} and playback will be
+ *         SessionPlayer object remains in the {@link #PLAYER_STATE_PLAYING} and playback will be
  *         ongoing.
  *
  *     <li>{@link #PLAYER_STATE_ERROR}: State when the playback failed and player cannot be
@@ -121,7 +121,7 @@
  * The only method you safely call from the {@link #PLAYER_STATE_ERROR} is {@link #close()}.
  * Any other methods might throw an exception or return meaningless data.
  * <p>
- * Subclasses of the SessionPlayer2 may have extra methods that are safe to be called in the error
+ * Subclasses of the SessionPlayer may have extra methods that are safe to be called in the error
  * state and/or provide a method to recover from the error state. Take a look at documentations of
  * specific class that you're interested in.
  * <p>
@@ -144,8 +144,8 @@
 // player.
 // Preferably it can be interface, but API guideline requires to use abstract class.
 @TargetApi(Build.VERSION_CODES.P)
-public abstract class SessionPlayer2 implements AutoCloseable {
-    private static final String TAG = "SessionPlayer2";
+public abstract class SessionPlayer implements AutoCloseable {
+    private static final String TAG = "SessionPlayer";
 
     /**
      * @hide
@@ -301,7 +301,7 @@
      * Seeks to the specified position. Moves the playback head to the specified position.
      *
      * @param position the new playback position in ms. The value should be in the range of start
-     * and end positions defined in {@link MediaItem2}.
+     * and end positions defined in {@link MediaItem}.
      */
     public abstract @NonNull ListenableFuture<PlayerResult> seekTo(long position);
 
@@ -330,7 +330,7 @@
      * Gets the current player state.
      *
      * @return the current player state
-     * @see PlayerCallback#onPlayerStateChanged(SessionPlayer2, int)
+     * @see PlayerCallback#onPlayerStateChanged(SessionPlayer, int)
      * @see #PLAYER_STATE_IDLE
      * @see #PLAYER_STATE_PAUSED
      * @see #PLAYER_STATE_PLAYING
@@ -378,27 +378,27 @@
     public abstract float getPlaybackSpeed();
 
     /**
-     * Sets a list of {@link MediaItem2} with metadata. Ensure uniqueness of each {@link MediaItem2}
+     * Sets a list of {@link MediaItem} with metadata. Ensure uniqueness of each {@link MediaItem}
      * in the playlist so the session can uniquely identity individual items. All
-     * {@link MediaItem2}s shouldn't be {@code null} as well.
+     * {@link MediaItem}s shouldn't be {@code null} as well.
      * <p>
-     * It's recommended to fill {@link MediaMetadata2} in each {@link MediaItem2} especially for the
-     * duration information with the key {@link MediaMetadata2#METADATA_KEY_DURATION}. Without the
+     * It's recommended to fill {@link MediaMetadata} in each {@link MediaItem} especially for the
+     * duration information with the key {@link MediaMetadata#METADATA_KEY_DURATION}. Without the
      * duration information in the metadata, session will do extra work to get the duration and send
      * it to the controller.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)} when it's
+     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)} when it's
      * completed.
      *
-     * @param list A list of {@link MediaItem2} objects to set as a play list.
+     * @param list A list of {@link MediaItem} objects to set as a play list.
      * @throws IllegalArgumentException if the given list is {@code null} or empty, or has
      *         duplicated media items.
      * @return a {@link ListenableFuture} which represents the pending completion of the command.
-     * @see PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)
+     * @see PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> setPlaylist(
-            @NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata);
+            @NonNull List<MediaItem> list, @Nullable MediaMetadata metadata);
 
     /**
      * Gets the {@link AudioAttributesCompat} that media player has.
@@ -406,15 +406,15 @@
     public abstract @Nullable AudioAttributesCompat getAudioAttributes();
 
     /**
-     * Sets a {@link MediaItem2} for playback.
+     * Sets a {@link MediaItem} for playback.
      * <p>
-     * It's recommended to fill {@link MediaMetadata2} in each {@link MediaItem2} especially for the
-     * duration information with the key {@link MediaMetadata2#METADATA_KEY_DURATION}. Without the
+     * It's recommended to fill {@link MediaMetadata} in each {@link MediaItem} especially for the
+     * duration information with the key {@link MediaMetadata#METADATA_KEY_DURATION}. Without the
      * duration information in the metadata, session will do extra work to get the duration and send
      * it to the controller.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)} when it's
+     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)} when it's
      * completed.
      *
      * @param item the descriptor of media item you want to play
@@ -422,7 +422,7 @@
      * @throws IllegalArgumentException if the given item is {@code null}.
      */
     public abstract @NonNull ListenableFuture<PlayerResult> setMediaItem(
-            @NonNull MediaItem2 item);
+            @NonNull MediaItem item);
 
     /**
      * Adds the media item to the playlist at position index. Index equals or greater than
@@ -434,15 +434,15 @@
      * the current index of the playlist will be increased correspondingly.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)} when it's
+     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)} when it's
      * completed.
      *
      * @param index the index you want to add
      * @param item the media item you want to add
-     * @see PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)
+     * @see PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> addPlaylistItem(int index,
-            @NonNull MediaItem2 item);
+            @NonNull MediaItem item);
 
     /**
      * Removes the media item from the playlist
@@ -450,14 +450,14 @@
      * The implementation may not change the currently playing media item even when it's removed.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)} when it's
+     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)} when it's
      * completed.
      *
      * @param item media item to remove
-     * @see PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)
+     * @see PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> removePlaylistItem(
-            @NonNull MediaItem2 item);
+            @NonNull MediaItem item);
 
     // TODO: Consider changing to replacePlaylistItem(MI2, MI2)
     /**
@@ -465,24 +465,24 @@
      * an item.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)} when it's
+     * {@link PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)} when it's
      * completed.
      *
      * @param index the index of the item to replace
      * @param item the new item
-     * @see PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)
+     * @see PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> replacePlaylistItem(int index,
-            @NonNull MediaItem2 item);
+            @NonNull MediaItem item);
 
     /**
      * Skips to the previous item in the playlist.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onCurrentMediaItemChanged(SessionPlayer2, MediaItem2)} when it's
+     * {@link PlayerCallback#onCurrentMediaItemChanged(SessionPlayer, MediaItem)} when it's
      * completed.
      *
-     * @see PlayerCallback#onCurrentMediaItemChanged(SessionPlayer2, MediaItem2)
+     * @see PlayerCallback#onCurrentMediaItemChanged(SessionPlayer, MediaItem)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> skipToPreviousPlaylistItem();
 
@@ -490,10 +490,10 @@
      * Skips to the next item in the playlist.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onCurrentMediaItemChanged(SessionPlayer2, MediaItem2)} when it's
+     * {@link PlayerCallback#onCurrentMediaItemChanged(SessionPlayer, MediaItem)} when it's
      * completed.
      *
-     * @see PlayerCallback#onCurrentMediaItemChanged(SessionPlayer2, MediaItem2)
+     * @see PlayerCallback#onCurrentMediaItemChanged(SessionPlayer, MediaItem)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> skipToNextPlaylistItem();
 
@@ -501,40 +501,40 @@
      * Skips to the the media item.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onCurrentMediaItemChanged(SessionPlayer2, MediaItem2)} when it's
+     * {@link PlayerCallback#onCurrentMediaItemChanged(SessionPlayer, MediaItem)} when it's
      * completed.
      *
      * @param item media item to start playing from
-     * @see PlayerCallback#onCurrentMediaItemChanged(SessionPlayer2, MediaItem2)
+     * @see PlayerCallback#onCurrentMediaItemChanged(SessionPlayer, MediaItem)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> skipToPlaylistItem(
-            @NonNull MediaItem2 item);
+            @NonNull MediaItem item);
 
     /**
      * Updates the playlist metadata while keeping the playlist as-is.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onPlaylistMetadataChanged(SessionPlayer2, MediaMetadata2)} when it's
+     * {@link PlayerCallback#onPlaylistMetadataChanged(SessionPlayer, MediaMetadata)} when it's
      * completed.
      *
      * @param metadata metadata of the playlist
-     * @see PlayerCallback#onPlaylistMetadataChanged(SessionPlayer2, MediaMetadata2)
+     * @see PlayerCallback#onPlaylistMetadataChanged(SessionPlayer, MediaMetadata)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> updatePlaylistMetadata(
-            @Nullable MediaMetadata2 metadata);
+            @Nullable MediaMetadata metadata);
 
     /**
      * Sets the repeat mode.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onRepeatModeChanged(SessionPlayer2, int)} when it's completed.
+     * {@link PlayerCallback#onRepeatModeChanged(SessionPlayer, int)} when it's completed.
      *
      * @param repeatMode repeat mode
      * @see #REPEAT_MODE_NONE
      * @see #REPEAT_MODE_ONE
      * @see #REPEAT_MODE_ALL
      * @see #REPEAT_MODE_GROUP
-     * @see PlayerCallback#onRepeatModeChanged(SessionPlayer2, int)
+     * @see PlayerCallback#onRepeatModeChanged(SessionPlayer, int)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> setRepeatMode(
             @RepeatMode int repeatMode);
@@ -543,13 +543,13 @@
      * Sets the shuffle mode.
      * <p>
      * The implementation must notify registered callbacks with
-     * {@link PlayerCallback#onShuffleModeChanged(SessionPlayer2, int)} when it's completed.
+     * {@link PlayerCallback#onShuffleModeChanged(SessionPlayer, int)} when it's completed.
      *
      * @param shuffleMode The shuffle mode
      * @see #SHUFFLE_MODE_NONE
      * @see #SHUFFLE_MODE_ALL
      * @see #SHUFFLE_MODE_GROUP
-     * @see PlayerCallback#onShuffleModeChanged(SessionPlayer2, int)
+     * @see PlayerCallback#onShuffleModeChanged(SessionPlayer, int)
      */
     public abstract @NonNull ListenableFuture<PlayerResult> setShuffleMode(
             @ShuffleMode int shuffleMode);
@@ -558,18 +558,18 @@
      * Gets the playlist.
      *
      * @return playlist, or null if none is set.
-     * @see PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)
+     * @see PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)
      */
-    public abstract @Nullable List<MediaItem2> getPlaylist();
+    public abstract @Nullable List<MediaItem> getPlaylist();
 
     /**
      * Gets the playlist metadata.
      *
      * @return metadata metadata of the playlist, or null if none is set
-     * @see PlayerCallback#onPlaylistChanged(SessionPlayer2, List, MediaMetadata2)
-     * @see PlayerCallback#onPlaylistMetadataChanged(SessionPlayer2, MediaMetadata2)
+     * @see PlayerCallback#onPlaylistChanged(SessionPlayer, List, MediaMetadata)
+     * @see PlayerCallback#onPlaylistMetadataChanged(SessionPlayer, MediaMetadata)
      */
-    public abstract @Nullable MediaMetadata2 getPlaylistMetadata();
+    public abstract @Nullable MediaMetadata getPlaylistMetadata();
 
     /**
      * Gets the repeat mode.
@@ -579,7 +579,7 @@
      * @see #REPEAT_MODE_ONE
      * @see #REPEAT_MODE_ALL
      * @see #REPEAT_MODE_GROUP
-     * @see PlayerCallback#onRepeatModeChanged(SessionPlayer2, int)
+     * @see PlayerCallback#onRepeatModeChanged(SessionPlayer, int)
      */
     public abstract @RepeatMode int getRepeatMode();
 
@@ -590,7 +590,7 @@
      * @see #SHUFFLE_MODE_NONE
      * @see #SHUFFLE_MODE_ALL
      * @see #SHUFFLE_MODE_GROUP
-     * @see PlayerCallback#onShuffleModeChanged(SessionPlayer2, int)
+     * @see PlayerCallback#onShuffleModeChanged(SessionPlayer, int)
      */
     public abstract @ShuffleMode int getShuffleMode();
 
@@ -600,7 +600,7 @@
      * @return the current media item. Can be {@code null} only when media item nor playlist hasn't
      *         set.
      */
-    public abstract @Nullable MediaItem2 getCurrentMediaItem();
+    public abstract @Nullable MediaItem getCurrentMediaItem();
 
     // Listeners / Callback related
     // Intentionally final not to allow developers to change the behavior
@@ -668,7 +668,7 @@
      * A callback class to receive notifications for events on the session player. See
      * {@link #registerPlayerCallback(Executor, PlayerCallback)} to register this callback.
      */
-    public static abstract class PlayerCallback {
+    public abstract static class PlayerCallback {
         /**
          * Called when the state of the player has changed.
          *
@@ -676,7 +676,7 @@
          * @param playerState the new state of the player.
          * @see #getPlayerState() ()
          */
-        public void onPlayerStateChanged(@NonNull SessionPlayer2 player,
+        public void onPlayerStateChanged(@NonNull SessionPlayer player,
                 @PlayerState int playerState) {
         }
 
@@ -688,8 +688,8 @@
          * @param buffState the new buffering state.
          * @see #getBufferingState()
          */
-        public void onBufferingStateChanged(@NonNull SessionPlayer2 player,
-                @Nullable MediaItem2 item, @BuffState int buffState) {
+        public void onBufferingStateChanged(@NonNull SessionPlayer player,
+                @Nullable MediaItem item, @BuffState int buffState) {
         }
 
         /**
@@ -699,7 +699,7 @@
          * @param playbackSpeed the new playback speed.
          * @see #getPlaybackSpeed()
          */
-        public void onPlaybackSpeedChanged(@NonNull SessionPlayer2 player,
+        public void onPlaybackSpeedChanged(@NonNull SessionPlayer player,
                 float playbackSpeed) {
         }
 
@@ -710,7 +710,7 @@
          * @param position the previous seeking request.
          * @see #getCurrentPosition()
          */
-        public void onSeekCompleted(@NonNull SessionPlayer2 player, long position) {
+        public void onSeekCompleted(@NonNull SessionPlayer player, long position) {
         }
 
         /**
@@ -722,8 +722,8 @@
          * @see #getPlaylist()
          * @see #getPlaylistMetadata()
          */
-        public void onPlaylistChanged(@NonNull SessionPlayer2 player,
-                @Nullable List<MediaItem2> list, @Nullable MediaMetadata2 metadata) {
+        public void onPlaylistChanged(@NonNull SessionPlayer player,
+                @Nullable List<MediaItem> list, @Nullable MediaMetadata metadata) {
         }
 
         /**
@@ -733,8 +733,8 @@
          * @param metadata new metadata
          * @see #getPlaylistMetadata()
          */
-        public void onPlaylistMetadataChanged(@NonNull SessionPlayer2 player,
-                @Nullable MediaMetadata2 metadata) {
+        public void onPlaylistMetadataChanged(@NonNull SessionPlayer player,
+                @Nullable MediaMetadata metadata) {
         }
 
         /**
@@ -747,7 +747,7 @@
          * @see #SHUFFLE_MODE_GROUP
          * @see #getShuffleMode()
          */
-        public void onShuffleModeChanged(@NonNull SessionPlayer2 player,
+        public void onShuffleModeChanged(@NonNull SessionPlayer player,
                 @ShuffleMode int shuffleMode) {
         }
 
@@ -762,7 +762,7 @@
          * @see #REPEAT_MODE_GROUP
          * @see #getRepeatMode()
          */
-        public void onRepeatModeChanged(@NonNull SessionPlayer2 player,
+        public void onRepeatModeChanged(@NonNull SessionPlayer player,
                 @RepeatMode int repeatMode) {
         }
 
@@ -773,8 +773,8 @@
          * @param item the new current media item.
          * @see #getCurrentMediaItem()
          */
-        public void onCurrentMediaItemChanged(@NonNull SessionPlayer2 player,
-                @NonNull MediaItem2 item) {
+        public void onCurrentMediaItemChanged(@NonNull SessionPlayer player,
+                @NonNull MediaItem item) {
         }
 
         /**
@@ -786,7 +786,7 @@
          * @param player the player whose playback is completed.
          * @see #REPEAT_MODE_NONE
          */
-        public void onPlaybackCompleted(@NonNull SessionPlayer2 player) {
+        public void onPlaybackCompleted(@NonNull SessionPlayer player) {
         }
 
         /**
@@ -796,7 +796,7 @@
          * @param attributes the new current audio attributes
          * @see #getAudioAttributes()
          */
-        public void onAudioAttributesChanged(@NonNull SessionPlayer2 player,
+        public void onAudioAttributesChanged(@NonNull SessionPlayer player,
                 @Nullable AudioAttributesCompat attributes) {
         }
     }
@@ -814,7 +814,7 @@
      * <li>Custom Info code: Positive integers equal to or greater than 1000. (i.e. code > +1000)
      * </ul>
      */
-    public static class PlayerResult implements BaseResult2 {
+    public static class PlayerResult implements BaseResult {
         /**
          * @hide
          */
@@ -832,7 +832,7 @@
 
         private final int mResultCode;
         private final long mCompletionTime;
-        private final MediaItem2 mItem;
+        private final MediaItem mItem;
 
         /**
          * Constructor that uses the current system clock as the completion time.
@@ -841,12 +841,12 @@
          * @param item media item when the command is completed
          */
         // Note: resultCode is intentionally not annotated for subclass to return extra error codes.
-        public PlayerResult(int resultCode, @Nullable MediaItem2 item) {
+        public PlayerResult(int resultCode, @Nullable MediaItem item) {
             this(resultCode, item, SystemClock.elapsedRealtime());
         }
 
         // Note: resultCode is intentionally not annotated for subclass to return extra error codes.
-        private PlayerResult(int resultCode, @Nullable MediaItem2 item, long completionTime) {
+        private PlayerResult(int resultCode, @Nullable MediaItem item, long completionTime) {
             mResultCode = resultCode;
             mItem = item;
             mCompletionTime = completionTime;
@@ -861,7 +861,7 @@
         /**
          * Gets the result code.
          * <p>
-         * Subclass of the {@link SessionPlayer2} may have defined customized extra code other than
+         * Subclass of the {@link SessionPlayer} may have defined customized extra code other than
          * codes defined here. Check the documentation of the class that you're interested in.
          *
          * @return result code.
@@ -889,14 +889,15 @@
         }
 
         /**
-         * Gets the {@link MediaItem2} for which the command was executed. In other words, this is
-         * the current media item when the command was completed.
+         * Gets the {@link MediaItem} for which the command was executed. In other words, this is
+         * the item sent as an argument of the command if any, otherwise the current media item when
+         * the command was completed.
          *
          * @return media item when the command is completed. Can be {@code null} for an error, or
          *         the current media item was {@code null}.
          */
         @Override
-        public @Nullable MediaItem2 getMediaItem() {
+        public @Nullable MediaItem getMediaItem() {
             return mItem;
         }
     }
diff --git a/media2/src/main/java/androidx/media2/SessionToken2.java b/media2/src/main/java/androidx/media2/SessionToken.java
similarity index 76%
rename from media2/src/main/java/androidx/media2/SessionToken2.java
rename to media2/src/main/java/androidx/media2/SessionToken.java
index 0abb727..f3098c6 100644
--- a/media2/src/main/java/androidx/media2/SessionToken2.java
+++ b/media2/src/main/java/androidx/media2/SessionToken.java
@@ -50,11 +50,11 @@
 import java.util.concurrent.Executor;
 
 /**
- * Represents an ongoing {@link MediaSession2} or a {@link MediaSessionService2}.
+ * Represents an ongoing {@link MediaSession} or a {@link MediaSessionService}.
  * If it's representing a session service, it may not be ongoing.
  * <p>
  * This may be passed to apps by the session owner to allow them to create a
- * {@link MediaController2} to communicate with the session.
+ * {@link MediaController} to communicate with the session.
  * <p>
  * It can be also obtained by {@link MediaSessionManager}.
  */
@@ -66,8 +66,8 @@
 //     For details about the reason, see following. (Android O+)
 //         android.media.session.MediaSessionManager.Callback#onAddressedPlayerChanged
 @VersionedParcelize
-public final class SessionToken2 implements VersionedParcelable {
-    private static final String TAG = "SessionToken2";
+public final class SessionToken implements VersionedParcelable {
+    private static final String TAG = "SessionToken";
 
     private static final long WAIT_TIME_MS_FOR_SESSION_READY = 300;
     private static final int MSG_SEND_TOKEN2_FOR_LEGACY_SESSION = 1000;
@@ -82,17 +82,17 @@
     }
 
     /**
-     * Type for {@link MediaSession2}.
+     * Type for {@link MediaSession}.
      */
     public static final int TYPE_SESSION = 0;
 
     /**
-     * Type for {@link MediaSessionService2}.
+     * Type for {@link MediaSessionService}.
      */
     public static final int TYPE_SESSION_SERVICE = 1;
 
     /**
-     * Type for {@link MediaLibraryService2}.
+     * Type for {@link MediaLibraryService}.
      */
     public static final int TYPE_LIBRARY_SERVICE = 2;
 
@@ -107,25 +107,25 @@
     static final int TYPE_BROWSER_SERVICE_LEGACY = 101;
 
     @ParcelField(1)
-    SessionToken2Impl mImpl;
+    SessionTokenImpl mImpl;
 
     /**
-     * Constructor for the token. You can create token of {@link MediaSessionService2},
-     * {@link MediaLibraryService2} nor {@link MediaBrowserServiceCompat} for
-     * {@link MediaController2} or {@link MediaBrowser2}.
+     * Constructor for the token. You can create token of {@link MediaSessionService},
+     * {@link MediaLibraryService} nor {@link MediaBrowserServiceCompat} for
+     * {@link MediaController} or {@link MediaBrowser}.
      *
      * @param context The context.
      * @param serviceComponent The component name of the media browser service.
      */
-    public SessionToken2(@NonNull Context context, @NonNull ComponentName serviceComponent) {
+    public SessionToken(@NonNull Context context, @NonNull ComponentName serviceComponent) {
         final PackageManager manager = context.getPackageManager();
         final int uid = getUid(manager, serviceComponent.getPackageName());
 
         final int type;
-        if (isInterfaceDeclared(manager, MediaLibraryService2.SERVICE_INTERFACE,
+        if (isInterfaceDeclared(manager, MediaLibraryService.SERVICE_INTERFACE,
                 serviceComponent)) {
             type = TYPE_LIBRARY_SERVICE;
-        } else if (isInterfaceDeclared(manager, MediaSessionService2.SERVICE_INTERFACE,
+        } else if (isInterfaceDeclared(manager, MediaSessionService.SERVICE_INTERFACE,
                     serviceComponent)) {
             type = TYPE_SESSION_SERVICE;
         } else if (isInterfaceDeclared(manager,
@@ -133,13 +133,13 @@
             type = TYPE_BROWSER_SERVICE_LEGACY;
         } else {
             throw new IllegalArgumentException(serviceComponent + " doesn't implement none of"
-                    + " MediaSessionService2, MediaLibraryService2, MediaBrowserService nor"
+                    + " MediaSessionService, MediaLibraryService, MediaBrowserService nor"
                     + " MediaBrowserServiceCompat. Use service's full name.");
         }
         if (type != TYPE_BROWSER_SERVICE_LEGACY) {
-            mImpl = new SessionToken2ImplBase(serviceComponent, uid, type);
+            mImpl = new SessionTokenImplBase(serviceComponent, uid, type);
         } else {
-            mImpl = new SessionToken2ImplLegacy(serviceComponent, uid);
+            mImpl = new SessionTokenImplLegacy(serviceComponent, uid);
         }
     }
 
@@ -147,7 +147,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
-    SessionToken2(SessionToken2Impl impl) {
+    SessionToken(SessionTokenImpl impl) {
         mImpl = impl;
     }
 
@@ -156,7 +156,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY)
-    SessionToken2() {
+    SessionToken() {
         // do nothing
     }
 
@@ -167,10 +167,10 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof SessionToken2)) {
+        if (!(obj instanceof SessionToken)) {
             return false;
         }
-        SessionToken2 other = (SessionToken2) obj;
+        SessionToken other = (SessionToken) obj;
         return mImpl.equals(other.mImpl);
     }
 
@@ -236,20 +236,20 @@
     }
 
     /**
-     * Creates SessionToken2 object from MediaSessionCompat.Token.
-     * When the SessionToken2 is ready, OnSessionToken2CreateListner will be called.
+     * Creates SessionToken object from MediaSessionCompat.Token.
+     * When the SessionToken is ready, OnSessionTokenCreateListner will be called.
      *
-     * TODO: Consider to use this in the constructor of MediaController2.
+     * TODO: Consider to use this in the constructor of MediaController.
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
-    public static void createSessionToken2(@NonNull final Context context,
-            @NonNull final MediaSessionCompat.Token token, @NonNull final Executor executor,
-            @NonNull final OnSessionToken2CreatedListener listener) {
+    public static void createSessionToken(@NonNull final Context context,
+            @NonNull final MediaSessionCompat.Token tokenCompat, @NonNull final Executor executor,
+            @NonNull final OnSessionTokenCreatedListener listener) {
         if (context == null) {
             throw new IllegalArgumentException("context shouldn't be null");
         }
-        if (token == null) {
+        if (tokenCompat == null) {
             throw new IllegalArgumentException("token shouldn't be null");
         }
         if (executor == null) {
@@ -260,15 +260,16 @@
         }
 
         try {
-            VersionedParcelable token2 = token.getSessionToken2();
-            if (token2 instanceof SessionToken2) {
-                notifySessionToken2Created(executor, listener, token, (SessionToken2) token2);
+            VersionedParcelable token2 = tokenCompat.getSession2Token();
+            if (token2 instanceof SessionToken) {
+                notifySessionTokenCreated(executor, listener, tokenCompat, (SessionToken) token2);
                 return;
             }
-            final MediaControllerCompat controller = new MediaControllerCompat(context, token);
+            final MediaControllerCompat controller =
+                    new MediaControllerCompat(context, tokenCompat);
             final int uid = getUid(context.getPackageManager(), controller.getPackageName());
-            final SessionToken2 token2ForLegacySession = new SessionToken2(
-                    new SessionToken2ImplLegacy(token, controller.getPackageName(), uid));
+            final SessionToken token2ForLegacySession = new SessionToken(
+                    new SessionTokenImplLegacy(tokenCompat, controller.getPackageName(), uid));
 
             final HandlerThread thread = new HandlerThread(TAG);
             thread.start();
@@ -279,8 +280,8 @@
                         if (msg.what == MSG_SEND_TOKEN2_FOR_LEGACY_SESSION) {
                             // token for framework session.
                             controller.unregisterCallback((MediaControllerCompat.Callback) msg.obj);
-                            token.setSessionToken2(token2ForLegacySession);
-                            notifySessionToken2Created(executor, listener, token,
+                            tokenCompat.setSession2Token(token2ForLegacySession);
+                            notifySessionTokenCreated(executor, listener, tokenCompat,
                                     token2ForLegacySession);
                             if (Build.VERSION.SDK_INT >= 18) {
                                 thread.quitSafely();
@@ -297,11 +298,11 @@
                     synchronized (listener) {
                         handler.removeMessages(MSG_SEND_TOKEN2_FOR_LEGACY_SESSION);
                         controller.unregisterCallback(this);
-                        if (!(token.getSessionToken2() instanceof SessionToken2)) {
-                            token.setSessionToken2(token2ForLegacySession);
+                        if (!(tokenCompat.getSession2Token() instanceof SessionToken)) {
+                            tokenCompat.setSession2Token(token2ForLegacySession);
                         }
-                        notifySessionToken2Created(executor, listener, token,
-                                (SessionToken2) token.getSessionToken2());
+                        notifySessionTokenCreated(executor, listener, tokenCompat,
+                                (SessionToken) tokenCompat.getSession2Token());
                         if (Build.VERSION.SDK_INT >= 18) {
                             thread.quitSafely();
                         } else {
@@ -321,13 +322,13 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    static void notifySessionToken2Created(final Executor executor,
-            final OnSessionToken2CreatedListener listener, final MediaSessionCompat.Token token,
-            final SessionToken2 token2) {
+    static void notifySessionTokenCreated(final Executor executor,
+            final OnSessionTokenCreatedListener listener, final MediaSessionCompat.Token token,
+            final SessionToken token2) {
         executor.execute(new Runnable() {
             @Override
             public void run() {
-                listener.onSessionToken2Created(token, token2);
+                listener.onSessionTokenCreated(token, token2);
             }
         });
     }
@@ -335,7 +336,7 @@
     private static boolean isInterfaceDeclared(PackageManager manager, String serviceInterface,
             ComponentName serviceComponent) {
         Intent serviceIntent = new Intent(serviceInterface);
-        // Use queryIntentServices to find services with MediaLibraryService2.SERVICE_INTERFACE.
+        // Use queryIntentServices to find services with MediaLibraryService.SERVICE_INTERFACE.
         // We cannot use resolveService with intent specified class name, because resolveService
         // ignores actions if Intent.setClassName() is specified.
         serviceIntent.setPackage(serviceComponent.getPackageName());
@@ -367,23 +368,23 @@
 
     /**
      * @hide
-     * Interface definition of a listener to be invoked when a {@link SessionToken2 token2} object
+     * Interface definition of a listener to be invoked when a {@link SessionToken token2} object
      * is created from a {@link MediaSessionCompat.Token compat token}.
      *
-     * @see #createSessionToken2
+     * @see #createSessionToken
      */
     @RestrictTo(LIBRARY_GROUP)
-    public interface OnSessionToken2CreatedListener {
+    public interface OnSessionTokenCreatedListener {
         /**
-         * Called when SessionToken2 object is created.
+         * Called when SessionToken object is created.
          *
          * @param token the compat token used for creating {@code token2}
-         * @param token2 the created SessionToken2 object
+         * @param token2 the created SessionToken object
          */
-        void onSessionToken2Created(MediaSessionCompat.Token token, SessionToken2 token2);
+        void onSessionTokenCreated(MediaSessionCompat.Token token, SessionToken token2);
     }
 
-    interface SessionToken2Impl extends VersionedParcelable {
+    interface SessionTokenImpl extends VersionedParcelable {
         boolean isLegacySession();
         int getUid();
         @NonNull String getPackageName();
diff --git a/media2/src/main/java/androidx/media2/SessionToken2ImplBase.java b/media2/src/main/java/androidx/media2/SessionTokenImplBase.java
similarity index 80%
rename from media2/src/main/java/androidx/media2/SessionToken2ImplBase.java
rename to media2/src/main/java/androidx/media2/SessionTokenImplBase.java
index 97439e5..34e8528 100644
--- a/media2/src/main/java/androidx/media2/SessionToken2ImplBase.java
+++ b/media2/src/main/java/androidx/media2/SessionTokenImplBase.java
@@ -27,13 +27,13 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.util.ObjectsCompat;
-import androidx.media2.SessionToken2.SessionToken2Impl;
-import androidx.media2.SessionToken2.TokenType;
+import androidx.media2.SessionToken.SessionTokenImpl;
+import androidx.media2.SessionToken.TokenType;
 import androidx.versionedparcelable.ParcelField;
 import androidx.versionedparcelable.VersionedParcelize;
 
 @VersionedParcelize
-final class SessionToken2ImplBase implements SessionToken2Impl {
+final class SessionTokenImplBase implements SessionTokenImpl {
     @ParcelField(1)
     int mUid;
     @ParcelField(2)
@@ -43,17 +43,17 @@
     @ParcelField(4)
     String mServiceName;
     @ParcelField(5)
-    IBinder mISession2;
+    IBinder mISession;
     @ParcelField(6)
     ComponentName mComponentName;
 
     /**
      * Constructor for the token. You can only create token for session service or library service
-     * to use by {@link MediaController2} or {@link MediaBrowser2}.
+     * to use by {@link MediaController} or {@link MediaBrowser}.
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
-    SessionToken2ImplBase(@NonNull ComponentName serviceComponent, int uid, int type) {
+    SessionTokenImplBase(@NonNull ComponentName serviceComponent, int uid, int type) {
         if (serviceComponent == null) {
             throw new IllegalArgumentException("serviceComponent shouldn't be null");
         }
@@ -62,20 +62,20 @@
         mServiceName = serviceComponent.getClassName();
         mUid = uid;
         mType = type;
-        mISession2 = null;
+        mISession = null;
     }
 
     /**
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
-    SessionToken2ImplBase(int uid, int type, String packageName, IMediaSession2 iSession2) {
+    SessionTokenImplBase(int uid, int type, String packageName, IMediaSession iSession) {
         mUid = uid;
         mType = type;
         mPackageName = packageName;
         mServiceName = null;
         mComponentName = null;
-        mISession2 = iSession2.asBinder();
+        mISession = iSession.asBinder();
     }
 
     /**
@@ -83,7 +83,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY)
-    SessionToken2ImplBase() {
+    SessionTokenImplBase() {
         // Do nothing.
     }
 
@@ -94,21 +94,21 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof SessionToken2ImplBase)) {
+        if (!(obj instanceof SessionTokenImplBase)) {
             return false;
         }
-        SessionToken2ImplBase other = (SessionToken2ImplBase) obj;
+        SessionTokenImplBase other = (SessionTokenImplBase) obj;
         return mUid == other.mUid
                 && TextUtils.equals(mPackageName, other.mPackageName)
                 && TextUtils.equals(mServiceName, other.mServiceName)
                 && mType == other.mType
-                && ObjectsCompat.equals(mISession2, other.mISession2);
+                && ObjectsCompat.equals(mISession, other.mISession);
     }
 
     @Override
     public String toString() {
         return "SessionToken {pkg=" + mPackageName + " type=" + mType
-                + " service=" + mServiceName + " IMediaSession2=" + mISession2 + "}";
+                + " service=" + mServiceName + " IMediaSession=" + mISession + "}";
     }
 
     @Override
@@ -148,6 +148,6 @@
 
     @Override
     public Object getBinder() {
-        return mISession2;
+        return mISession;
     }
 }
diff --git a/media2/src/main/java/androidx/media2/SessionToken2ImplLegacy.java b/media2/src/main/java/androidx/media2/SessionTokenImplLegacy.java
similarity index 79%
rename from media2/src/main/java/androidx/media2/SessionToken2ImplLegacy.java
rename to media2/src/main/java/androidx/media2/SessionTokenImplLegacy.java
index 7e7868b..bce372b 100644
--- a/media2/src/main/java/androidx/media2/SessionToken2ImplLegacy.java
+++ b/media2/src/main/java/androidx/media2/SessionTokenImplLegacy.java
@@ -17,10 +17,10 @@
 package androidx.media2;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
-import static androidx.media2.SessionToken2.TYPE_BROWSER_SERVICE_LEGACY;
-import static androidx.media2.SessionToken2.TYPE_LIBRARY_SERVICE;
-import static androidx.media2.SessionToken2.TYPE_SESSION;
-import static androidx.media2.SessionToken2.TYPE_SESSION_LEGACY;
+import static androidx.media2.SessionToken.TYPE_BROWSER_SERVICE_LEGACY;
+import static androidx.media2.SessionToken.TYPE_LIBRARY_SERVICE;
+import static androidx.media2.SessionToken.TYPE_SESSION;
+import static androidx.media2.SessionToken.TYPE_SESSION_LEGACY;
 
 import android.content.ComponentName;
 import android.os.Bundle;
@@ -31,7 +31,7 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.util.ObjectsCompat;
-import androidx.media2.SessionToken2.SessionToken2Impl;
+import androidx.media2.SessionToken.SessionTokenImpl;
 import androidx.versionedparcelable.CustomVersionedParcelable;
 import androidx.versionedparcelable.NonParcelField;
 import androidx.versionedparcelable.ParcelField;
@@ -39,7 +39,7 @@
 import androidx.versionedparcelable.VersionedParcelize;
 
 @VersionedParcelize(isCustom = true)
-final class SessionToken2ImplLegacy extends CustomVersionedParcelable implements SessionToken2Impl {
+final class SessionTokenImplLegacy extends CustomVersionedParcelable implements SessionTokenImpl {
     // Don't mark mLegacyToken @ParcelField, because we need to use toBundle()/fromBundle() instead
     // of the writeToParcel()/Parcelable.Creator for sending extra binder.
     @NonParcelField
@@ -56,7 +56,7 @@
     @ParcelField(5)
     String mPackageName;
 
-    SessionToken2ImplLegacy(MediaSessionCompat.Token token, String packageName, int uid) {
+    SessionTokenImplLegacy(MediaSessionCompat.Token token, String packageName, int uid) {
         if (token == null) {
             throw new IllegalArgumentException("token shouldn't be null.");
         }
@@ -71,7 +71,7 @@
         mType = TYPE_SESSION_LEGACY;
     }
 
-    SessionToken2ImplLegacy(ComponentName serviceComponent, int uid) {
+    SessionTokenImplLegacy(ComponentName serviceComponent, int uid) {
         if (serviceComponent == null) {
             throw new IllegalArgumentException("serviceComponent shouldn't be null.");
         }
@@ -88,7 +88,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY)
-    SessionToken2ImplLegacy() {
+    SessionTokenImplLegacy() {
         // Do nothing.
     }
 
@@ -99,10 +99,10 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof SessionToken2ImplLegacy)) {
+        if (!(obj instanceof SessionTokenImplLegacy)) {
             return false;
         }
-        SessionToken2ImplLegacy other = (SessionToken2ImplLegacy) obj;
+        SessionTokenImplLegacy other = (SessionTokenImplLegacy) obj;
         if (mType != other.mType) {
             return false;
         }
@@ -122,7 +122,7 @@
 
     @Override
     public String toString() {
-        return "SessionToken2 {legacyToken=" + mLegacyToken + "}";
+        return "SessionToken {legacyToken=" + mLegacyToken + "}";
     }
 
     @Override
@@ -146,7 +146,7 @@
     }
 
     @Override
-    public @SessionToken2.TokenType int getType() {
+    public @SessionToken.TokenType int getType() {
         switch (mType) {
             case TYPE_SESSION_LEGACY:
                 return TYPE_SESSION;
@@ -164,20 +164,20 @@
     @Override
     public void onPreParceling(boolean isStream) {
         if (mLegacyToken != null) {
-            // Note: token should be null or SessionToken2 whose impl equals to this object.
-            VersionedParcelable token = mLegacyToken.getSessionToken2();
+            // Note: token should be null or SessionToken whose impl equals to this object.
+            VersionedParcelable token = mLegacyToken.getSession2Token();
 
-            // Temporarily sets the SessionToken2 to null to prevent infinite loop when parceling.
-            // Otherwise, this will be called again when mLegacyToken parcelize SessionToken2 in it
+            // Temporarily sets the SessionToken to null to prevent infinite loop when parceling.
+            // Otherwise, this will be called again when mLegacyToken parcelize SessionToken in it
             // and it never ends.
-            mLegacyToken.setSessionToken2(null);
+            mLegacyToken.setSession2Token(null);
 
             // Although mLegacyToken is Parcelable, we should use toBundle() instead here because
             // extra binder inside of the mLegacyToken are shared only through the toBundle().
             mLegacyTokenBundle = mLegacyToken.toBundle();
 
-            // Resets the SessionToken2.
-            mLegacyToken.setSessionToken2(token);
+            // Resets the SessionToken.
+            mLegacyToken.setSession2Token(token);
         } else {
             mLegacyTokenBundle = null;
         }
diff --git a/media2/src/main/java/androidx/media2/StarRating2.java b/media2/src/main/java/androidx/media2/StarRating.java
similarity index 86%
rename from media2/src/main/java/androidx/media2/StarRating2.java
rename to media2/src/main/java/androidx/media2/StarRating.java
index 28c6c8a..a883f93 100644
--- a/media2/src/main/java/androidx/media2/StarRating2.java
+++ b/media2/src/main/java/androidx/media2/StarRating.java
@@ -25,7 +25,7 @@
  * A class for rating expressed as the number of stars.
  */
 @VersionedParcelize
-public final class StarRating2 implements Rating2 {
+public final class StarRating implements Rating {
     private static final float RATING_NOT_RATED = -1.0f;
 
     @ParcelField(1)
@@ -37,16 +37,16 @@
     /*
      * Used for VersionedParcelable
      */
-    StarRating2() {
+    StarRating() {
     }
 
     /**
-     * Creates a unrated StarRating2 instance with {@code maxStars}.
+     * Creates a unrated StarRating instance with {@code maxStars}.
      * If {@code maxStars} is not a positive integer, it will throw IllegalArgumentException.
      *
      * @param maxStars a range of this star rating from 0.0f to {@code maxStars}
      */
-    public StarRating2(@IntRange(from = 1) int maxStars) {
+    public StarRating(@IntRange(from = 1) int maxStars) {
         if (maxStars <= 0) {
             throw new IllegalArgumentException("maxStars should be a positive integer");
         }
@@ -55,7 +55,7 @@
     }
 
     /**
-     * Creates a StarRating2 instance with {@code maxStars} and the given integer or fractional
+     * Creates a StarRating instance with {@code maxStars} and the given integer or fractional
      * number of stars. Non integer values can for instance be used to represent an average rating
      * value, which might not be an integer number of stars.
      * If {@code maxStars} is not a positive integer or {@code starRating} has invalid value,
@@ -64,7 +64,7 @@
      * @param maxStars the maximum number of stars which this rating can have.
      * @param starRating a number ranging from 0.0f to {@code maxStars}
      */
-    public StarRating2(@IntRange(from = 1) int maxStars, float starRating) {
+    public StarRating(@IntRange(from = 1) int maxStars, float starRating) {
         if (maxStars <= 0) {
             throw new IllegalArgumentException("maxStars should be a positive integer");
         } else if (starRating < 0.0f || starRating > maxStars) {
@@ -86,16 +86,16 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof StarRating2)) {
+        if (!(obj instanceof StarRating)) {
             return false;
         }
-        StarRating2 other = (StarRating2) obj;
+        StarRating other = (StarRating) obj;
         return mMaxStars == other.mMaxStars && mStarRating == other.mStarRating;
     }
 
     @Override
     public String toString() {
-        return "StarRating2: maxStars=" + mMaxStars
+        return "StarRating: maxStars=" + mMaxStars
                 + (isRated() ? ", starRating=" + mStarRating : ", unrated");
     }
 
diff --git a/media2/src/main/java/androidx/media2/SubtitleData2.java b/media2/src/main/java/androidx/media2/SubtitleData.java
similarity index 89%
rename from media2/src/main/java/androidx/media2/SubtitleData2.java
rename to media2/src/main/java/androidx/media2/SubtitleData.java
index e3f0df2..f137478 100644
--- a/media2/src/main/java/androidx/media2/SubtitleData2.java
+++ b/media2/src/main/java/androidx/media2/SubtitleData.java
@@ -19,7 +19,6 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
 import android.annotation.TargetApi;
-import android.media.SubtitleData;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
@@ -54,22 +53,22 @@
  * for (TrackInfo info : trackInfo) {
  *     if (info.getTrackType() == TrackInfo.MEDIA_TRACK_TYPE_SUBTITLE) {
  *         final String mime = info.getFormat().getString(MediaFormat.KEY_MIME);
- *         if (SubtitleData2.MIMETYPE_TEXT_CEA_608.equals(mime) {
+ *         if (SubtitleData.MIMETYPE_TEXT_CEA_608.equals(mime) {
  *             // subtitle encoding is CEA 608
- *         } else if (SubtitleData2.MIMETYPE_TEXT_CEA_708.equals(mime) {
+ *         } else if (SubtitleData.MIMETYPE_TEXT_CEA_708.equals(mime) {
  *             // subtitle encoding is CEA 708
- *         } else if (SubtitleData2.MIMETYPE_TEXT_VTT.equals(mime) {
+ *         } else if (SubtitleData.MIMETYPE_TEXT_VTT.equals(mime) {
  *             // subtitle encoding is WebVTT
  *         }
  *     }
  * }
  * </pre>
  * <p>
- * @see MediaPlayer#registerPlayerCallback(Executor, SessionPlayer2.PlayerCallback)
- * @see MediaPlayer.PlayerCallback#onSubtitleData(MediaPlayer, MediaItem2, SubtitleData2)
+ * @see MediaPlayer#registerPlayerCallback(Executor, SessionPlayer.PlayerCallback)
+ * @see MediaPlayer.PlayerCallback#onSubtitleData(MediaPlayer, MediaItem, SubtitleData)
  */
-public final class SubtitleData2 {
-    private static final String TAG = "SubtitleData2";
+public final class SubtitleData {
+    private static final String TAG = "SubtitleData";
 
     /**
      * MIME type for CEA-608 closed caption data.
@@ -94,7 +93,7 @@
     /** @hide */
     @TargetApi(28)
     @RestrictTo(LIBRARY_GROUP)
-    public SubtitleData2(SubtitleData subtitleData) {
+    public SubtitleData(android.media.SubtitleData subtitleData) {
         mTrackIndex = subtitleData.getTrackIndex();
         mStartTimeUs = subtitleData.getStartTimeUs();
         mDurationUs = subtitleData.getDurationUs();
@@ -103,7 +102,7 @@
 
     /** @hide */
     @RestrictTo(LIBRARY_GROUP)
-    public SubtitleData2(int trackIndex, long startTimeUs, long durationUs, byte[] data) {
+    public SubtitleData(int trackIndex, long startTimeUs, long durationUs, byte[] data) {
         mTrackIndex = trackIndex;
         mStartTimeUs = startTimeUs;
         mDurationUs = durationUs;
diff --git a/media2/src/main/java/androidx/media2/ThumbRating2.java b/media2/src/main/java/androidx/media2/ThumbRating.java
similarity index 82%
rename from media2/src/main/java/androidx/media2/ThumbRating2.java
rename to media2/src/main/java/androidx/media2/ThumbRating.java
index f9b624e..fc6e0b5 100644
--- a/media2/src/main/java/androidx/media2/ThumbRating2.java
+++ b/media2/src/main/java/androidx/media2/ThumbRating.java
@@ -24,7 +24,7 @@
  * A class for rating with a single degree of rating, "thumb up" vs "thumb down".
  */
 @VersionedParcelize
-public final class ThumbRating2 implements Rating2 {
+public final class ThumbRating implements Rating {
     @ParcelField(1)
     boolean mIsRated;
 
@@ -32,18 +32,18 @@
     boolean mThumbUp;
 
     /**
-     * Creates a unrated ThumbRating2 instance.
+     * Creates a unrated ThumbRating instance.
      */
-    public ThumbRating2() {
+    public ThumbRating() {
         mIsRated = false;
     }
 
     /**
-     * Creates a ThumbRating2 instance.
+     * Creates a ThumbRating instance.
      *
      * @param thumbIsUp true for a "thumb up" rating, false for "thumb down".
      */
-    public ThumbRating2(boolean thumbIsUp) {
+    public ThumbRating(boolean thumbIsUp) {
         mThumbUp = thumbIsUp;
         mIsRated = true;
     }
@@ -60,16 +60,16 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof ThumbRating2)) {
+        if (!(obj instanceof ThumbRating)) {
             return false;
         }
-        ThumbRating2 other = (ThumbRating2) obj;
+        ThumbRating other = (ThumbRating) obj;
         return mThumbUp == other.mThumbUp && mIsRated == other.mIsRated;
     }
 
     @Override
     public String toString() {
-        return "ThumbRating2: " + (mIsRated ? "isThumbUp=" + mThumbUp : "unrated");
+        return "ThumbRating: " + (mIsRated ? "isThumbUp=" + mThumbUp : "unrated");
     }
 
     /**
diff --git a/media2/src/main/java/androidx/media2/TimedMetaData2.java b/media2/src/main/java/androidx/media2/TimedMetaData.java
similarity index 91%
rename from media2/src/main/java/androidx/media2/TimedMetaData2.java
rename to media2/src/main/java/androidx/media2/TimedMetaData.java
index 5421511..16af411 100644
--- a/media2/src/main/java/androidx/media2/TimedMetaData2.java
+++ b/media2/src/main/java/androidx/media2/TimedMetaData.java
@@ -19,7 +19,6 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
 import android.annotation.TargetApi;
-import android.media.TimedMetaData;
 import android.os.Build;
 
 import androidx.annotation.RestrictTo;
@@ -34,7 +33,7 @@
  *
  * @see MediaPlayer.PlayerCallback#onTimedMetaDataAvailable
  */
-public class TimedMetaData2 {
+public class TimedMetaData {
     private static final String TAG = "TimedMetaData";
 
     private long mTimestampUs;
@@ -45,7 +44,7 @@
      */
     @TargetApi(Build.VERSION_CODES.M)
     @RestrictTo(LIBRARY_GROUP)
-    public TimedMetaData2(TimedMetaData timedMetaData) {
+    public TimedMetaData(android.media.TimedMetaData timedMetaData) {
         mTimestampUs = timedMetaData.getTimestamp();
         mMetaData = timedMetaData.getMetaData();
     }
@@ -54,7 +53,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
-    public TimedMetaData2(long timestampUs, byte[] metaData) {
+    public TimedMetaData(long timestampUs, byte[] metaData) {
         mTimestampUs = timestampUs;
         mMetaData = metaData;
     }
diff --git a/media2/src/main/java/androidx/media2/UriMediaItem2.java b/media2/src/main/java/androidx/media2/UriMediaItem.java
similarity index 94%
rename from media2/src/main/java/androidx/media2/UriMediaItem2.java
rename to media2/src/main/java/androidx/media2/UriMediaItem.java
index 3c364e1..5d70552 100644
--- a/media2/src/main/java/androidx/media2/UriMediaItem2.java
+++ b/media2/src/main/java/androidx/media2/UriMediaItem.java
@@ -37,15 +37,15 @@
 /**
  * Structure for media item descriptor for {@link Uri}.
  * <p>
- * Users should use {@link Builder} to create {@link UriMediaItem2}.
+ * Users should use {@link Builder} to create {@link UriMediaItem}.
  * <p>
  * You cannot directly send this object across the process through {@link ParcelUtils}. See
- * {@link MediaItem2} for detail.
+ * {@link MediaItem} for detail.
  *
- * @see MediaItem2
+ * @see MediaItem
  */
 @VersionedParcelize(isCustom = true)
-public class UriMediaItem2 extends MediaItem2 {
+public class UriMediaItem extends MediaItem {
     @NonParcelField
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     Uri mUri;
@@ -62,11 +62,11 @@
     /**
      * Used for VersionedParcelable
      */
-    UriMediaItem2() {
+    UriMediaItem() {
         // no-op
     }
 
-    UriMediaItem2(Builder builder) {
+    UriMediaItem(Builder builder) {
         super(builder);
         mUri = builder.mUri;
         mUriHeader = builder.mUriHeader;
@@ -113,7 +113,7 @@
     }
 
     /**
-     * This Builder class simplifies the creation of a {@link UriMediaItem2} object.
+     * This Builder class simplifies the creation of a {@link UriMediaItem} object.
      */
     public static final class Builder extends BuilderBase<Builder> {
 
@@ -181,11 +181,11 @@
         }
 
         /**
-         * @return A new UriMediaItem2 with values supplied by the Builder.
+         * @return A new UriMediaItem with values supplied by the Builder.
          */
         @Override
-        public @NonNull UriMediaItem2 build() {
-            return new UriMediaItem2(this);
+        public @NonNull UriMediaItem build() {
+            return new UriMediaItem(this);
         }
     }
 }
diff --git a/media2/src/main/java/androidx/media2/VideoSize.java b/media2/src/main/java/androidx/media2/VideoSize.java
new file mode 100644
index 0000000..ed2f2e3
--- /dev/null
+++ b/media2/src/main/java/androidx/media2/VideoSize.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+
+import androidx.annotation.RestrictTo;
+
+/**
+ * Immutable class for describing video size.
+ */
+public final class VideoSize {
+    /**
+     * Creates a new immutable VideoSize instance.
+     *
+     * @param width The width of the video
+     * @param height The height of the video
+     * @hide
+     */
+    @RestrictTo(LIBRARY_GROUP)
+    public VideoSize(int width, int height) {
+        mWidth = width;
+        mHeight = height;
+    }
+
+    /**
+     * Returns the width of the video.
+     */
+    public int getWidth() {
+        return mWidth;
+    }
+
+    /**
+     * Returns the height of the video.
+     */
+    public int getHeight() {
+        return mHeight;
+    }
+
+    /**
+     * Checks if this video size is equal to another video size.
+     * <p>
+     * Two video sizes are equal if and only if both their widths and heights are
+     * equal.
+     * </p>
+     * <p>
+     * A video size object is never equal to any other type of object.
+     * </p>
+     *
+     * @return {@code true} if the objects were equal, {@code false} otherwise
+     */
+    @Override
+    public boolean equals(final Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof VideoSize) {
+            VideoSize other = (VideoSize) obj;
+            return mWidth == other.mWidth && mHeight == other.mHeight;
+        }
+        return false;
+    }
+
+    /**
+     * Return the video size represented as a string with the format {@code "WxH"}
+     *
+     * @return string representation of the video size
+     */
+    @Override
+    public String toString() {
+        return mWidth + "x" + mHeight;
+    }
+
+    @Override
+    public int hashCode() {
+        // assuming most sizes are <2^16, doing a rotate will give us perfect hashing
+        return mHeight ^ ((mWidth << (Integer.SIZE / 2)) | (mWidth >>> (Integer.SIZE / 2)));
+    }
+
+    private final int mWidth;
+    private final int mHeight;
+}
diff --git a/media2/src/main/java/androidx/media2/exoplayer/DataSourceCallback2DataSource.java b/media2/src/main/java/androidx/media2/exoplayer/DataSourceCallbackDataSource.java
similarity index 82%
rename from media2/src/main/java/androidx/media2/exoplayer/DataSourceCallback2DataSource.java
rename to media2/src/main/java/androidx/media2/exoplayer/DataSourceCallbackDataSource.java
index d831c88..30bea65 100644
--- a/media2/src/main/java/androidx/media2/exoplayer/DataSourceCallback2DataSource.java
+++ b/media2/src/main/java/androidx/media2/exoplayer/DataSourceCallbackDataSource.java
@@ -26,7 +26,7 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.util.Preconditions;
-import androidx.media2.DataSourceCallback2;
+import androidx.media2.DataSourceCallback;
 import androidx.media2.exoplayer.external.C;
 import androidx.media2.exoplayer.external.upstream.BaseDataSource;
 import androidx.media2.exoplayer.external.upstream.DataSource;
@@ -36,31 +36,31 @@
 import java.io.IOException;
 
 /**
- * An ExoPayer {@link DataSource} for reading from a {@link DataSourceCallback2}.
+ * An ExoPayer {@link DataSource} for reading from a {@link DataSourceCallback}.
  *
  * @hide
  */
 @TargetApi(Build.VERSION_CODES.KITKAT)
 @RestrictTo(LIBRARY_GROUP)
 @SuppressLint("RestrictedApi") // TODO(b/68398926): Remove once RestrictedApi checks are fixed.
-public final class DataSourceCallback2DataSource extends BaseDataSource {
+public final class DataSourceCallbackDataSource extends BaseDataSource {
 
     /**
-     * Returns a factory for {@link DataSourceCallback2DataSource}s.
+     * Returns a factory for {@link DataSourceCallbackDataSource}s.
      *
      * @return A factory for data sources that read from the data source callback.
      */
     static DataSource.Factory getFactory(
-            final DataSourceCallback2 dataSourceCallback2) {
+            final DataSourceCallback dataSourceCallback) {
         return new DataSource.Factory() {
             @Override
             public DataSource createDataSource() {
-                return new DataSourceCallback2DataSource(dataSourceCallback2);
+                return new DataSourceCallbackDataSource(dataSourceCallback);
             }
         };
     }
 
-    private final DataSourceCallback2 mDataSourceCallback2;
+    private final DataSourceCallback mDataSourceCallback;
 
     @Nullable
     private Uri mUri;
@@ -68,9 +68,9 @@
     private long mBytesRemaining;
     private boolean mOpened;
 
-    public DataSourceCallback2DataSource(DataSourceCallback2 dataSourceCallback2) {
+    public DataSourceCallbackDataSource(DataSourceCallback dataSourceCallback) {
         super(/* isNetwork= */ false);
-        mDataSourceCallback2 = Preconditions.checkNotNull(dataSourceCallback2);
+        mDataSourceCallback = Preconditions.checkNotNull(dataSourceCallback);
     }
 
     @Override
@@ -78,7 +78,7 @@
         mUri = dataSpec.uri;
         mOffset = dataSpec.position;
         transferInitializing(dataSpec);
-        long dataSourceCallback2Size = mDataSourceCallback2.getSize();
+        long dataSourceCallback2Size = mDataSourceCallback.getSize();
         if (dataSpec.length != C.LENGTH_UNSET) {
             mBytesRemaining = dataSpec.length;
         } else if (dataSourceCallback2Size != -1) {
@@ -100,7 +100,7 @@
         }
         int bytesToRead = mBytesRemaining == C.LENGTH_UNSET
                 ? readLength : (int) Math.min(mBytesRemaining, readLength);
-        int bytesRead = mDataSourceCallback2.readAt(mOffset, buffer, offset, bytesToRead);
+        int bytesRead = mDataSourceCallback.readAt(mOffset, buffer, offset, bytesToRead);
         if (bytesRead < 0) {
             if (mBytesRemaining != C.LENGTH_UNSET) {
                 throw new EOFException();
diff --git a/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerMediaPlayer2Impl.java b/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerMediaPlayer2Impl.java
index 4238950..f69b5d8 100644
--- a/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerMediaPlayer2Impl.java
+++ b/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerMediaPlayer2Impl.java
@@ -38,11 +38,11 @@
 import androidx.core.util.ObjectsCompat;
 import androidx.core.util.Preconditions;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.MediaItem2;
+import androidx.media2.MediaItem;
 import androidx.media2.MediaPlayer2;
-import androidx.media2.MediaTimestamp2;
-import androidx.media2.PlaybackParams2;
-import androidx.media2.SubtitleData2;
+import androidx.media2.MediaTimestamp;
+import androidx.media2.PlaybackParams;
+import androidx.media2.SubtitleData;
 import androidx.media2.exoplayer.external.Player;
 
 import java.io.IOException;
@@ -226,7 +226,7 @@
     }
 
     @Override
-    public Object setMediaItem(@NonNull final MediaItem2 item) {
+    public Object setMediaItem(@NonNull final MediaItem item) {
         return addTask(new Task(CALL_COMPLETED_SET_DATA_SOURCE, false) {
             @Override
             void process() {
@@ -236,10 +236,10 @@
     }
 
     @Override
-    public MediaItem2 getCurrentMediaItem() {
-        return runPlayerCallableBlocking(new Callable<MediaItem2>() {
+    public MediaItem getCurrentMediaItem() {
+        return runPlayerCallableBlocking(new Callable<MediaItem>() {
             @Override
-            public MediaItem2 call() throws Exception {
+            public MediaItem call() throws Exception {
                 return mPlayer.getCurrentMediaItem();
             }
         });
@@ -346,7 +346,7 @@
     }
 
     @Override
-    public Object setNextMediaItem(@NonNull final MediaItem2 item) {
+    public Object setNextMediaItem(@NonNull final MediaItem item) {
         return addTask(new Task(CALL_COMPLETED_SET_NEXT_DATA_SOURCE, false) {
             @Override
             void process() {
@@ -356,7 +356,7 @@
     }
 
     @Override
-    public Object setNextMediaItems(@NonNull final List<MediaItem2> items) {
+    public Object setNextMediaItems(@NonNull final List<MediaItem> items) {
         return addTask(new Task(CALL_COMPLETED_SET_NEXT_DATA_SOURCES, false) {
             @Override
             void process() {
@@ -416,7 +416,7 @@
     }
 
     @Override
-    public Object setPlaybackParams(@NonNull final PlaybackParams2 params) {
+    public Object setPlaybackParams(@NonNull final PlaybackParams params) {
         return addTask(new Task(CALL_COMPLETED_SET_PLAYBACK_PARAMS, false) {
             @Override
             void process() {
@@ -427,10 +427,10 @@
 
     @Override
     @NonNull
-    public PlaybackParams2 getPlaybackParams() {
-        return runPlayerCallableBlocking(new Callable<PlaybackParams2>() {
+    public PlaybackParams getPlaybackParams() {
+        return runPlayerCallableBlocking(new Callable<PlaybackParams>() {
             @Override
-            public PlaybackParams2 call() throws Exception {
+            public PlaybackParams call() throws Exception {
                 return mPlayer.getPlaybackParams();
             }
         });
@@ -540,10 +540,10 @@
     }
 
     @Override
-    public MediaTimestamp2 getTimestamp() {
-        return runPlayerCallableBlocking(new Callable<MediaTimestamp2>() {
+    public MediaTimestamp getTimestamp() {
+        return runPlayerCallableBlocking(new Callable<MediaTimestamp>() {
             @Override
-            public MediaTimestamp2 call() {
+            public MediaTimestamp call() {
                 return mPlayer.getTimestamp();
             }
         });
@@ -651,12 +651,12 @@
     // ExoPlayerWrapper.Listener implementation.
 
     @Override
-    public void onPrepared(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_PREPARED);
+    public void onPrepared(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_PREPARED);
         synchronized (mTaskLock) {
             if (mCurrentTask != null
                     && mCurrentTask.mMediaCallType == CALL_COMPLETED_PREPARE
-                    && ObjectsCompat.equals(mCurrentTask.mDSD, mediaItem2)
+                    && ObjectsCompat.equals(mCurrentTask.mDSD, mediaItem)
                     && mCurrentTask.mNeedToWaitForEventToComplete) {
                 mCurrentTask.sendCompleteNotification(CALL_STATUS_NO_ERROR);
                 mCurrentTask = null;
@@ -666,8 +666,8 @@
     }
 
     @Override
-    public void onMetadataChanged(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_METADATA_UPDATE);
+    public void onMetadataChanged(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_METADATA_UPDATE);
     }
 
     @Override
@@ -684,28 +684,28 @@
     }
 
     @Override
-    public void onBufferingStarted(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_BUFFERING_START);
+    public void onBufferingStarted(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_BUFFERING_START);
     }
 
     @Override
-    public void onBufferingEnded(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_BUFFERING_END);
+    public void onBufferingEnded(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_BUFFERING_END);
     }
 
     @Override
-    public void onVideoRenderingStart(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_VIDEO_RENDERING_START);
+    public void onVideoRenderingStart(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_VIDEO_RENDERING_START);
     }
 
     @Override
-    public void onVideoSizeChanged(final MediaItem2 mediaItem2, final int width, final int height) {
+    public void onVideoSizeChanged(final MediaItem mediaItem, final int width, final int height) {
         notifyMediaPlayer2Event(new ExoPlayerMediaPlayer2Impl.Mp2EventNotifier() {
             @Override
             public void notify(MediaPlayer2.EventCallback callback) {
                 callback.onVideoSizeChanged(
                         ExoPlayerMediaPlayer2Impl.this,
-                        mediaItem2,
+                        mediaItem,
                         width,
                         height);
             }
@@ -713,50 +713,50 @@
     }
 
     @Override
-    public void onSubtitleData2(final MediaItem2 mediaItem2, final SubtitleData2 subtitleData2) {
+    public void onSubtitleData(final MediaItem mediaItem, final SubtitleData subtitleData) {
         notifyMediaPlayer2Event(new Mp2EventNotifier() {
             @Override
             public void notify(EventCallback cb) {
                 cb.onSubtitleData(
-                        ExoPlayerMediaPlayer2Impl.this, mediaItem2, subtitleData2);
+                        ExoPlayerMediaPlayer2Impl.this, mediaItem, subtitleData);
             }
         });
     }
 
     @Override
-    public void onMediaItem2StartedAsNext(final MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_DATA_SOURCE_START);
+    public void onMediaItemStartedAsNext(final MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_DATA_SOURCE_START);
     }
 
     @Override
-    public void onMediaItem2Ended(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_DATA_SOURCE_END);
+    public void onMediaItemEnded(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_DATA_SOURCE_END);
     }
 
     @Override
-    public void onLoop(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_DATA_SOURCE_REPEAT);
+    public void onLoop(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_DATA_SOURCE_REPEAT);
     }
 
     @Override
     public void onMediaTimeDiscontinuity(
-            final MediaItem2 mediaItem2, final MediaTimestamp2 mediaTimestamp2) {
+            final MediaItem mediaItem, final MediaTimestamp mediaTimestamp) {
         notifyMediaPlayer2Event(new Mp2EventNotifier() {
             @Override
             public void notify(EventCallback cb) {
                 cb.onMediaTimeDiscontinuity(
-                        ExoPlayerMediaPlayer2Impl.this, mediaItem2, mediaTimestamp2);
+                        ExoPlayerMediaPlayer2Impl.this, mediaItem, mediaTimestamp);
             }
         });
     }
 
     @Override
-    public void onPlaybackEnded(MediaItem2 mediaItem2) {
-        notifyOnInfo(mediaItem2, MEDIA_INFO_DATA_SOURCE_LIST_END);
+    public void onPlaybackEnded(MediaItem mediaItem) {
+        notifyOnInfo(mediaItem, MEDIA_INFO_DATA_SOURCE_LIST_END);
     }
 
     @Override
-    public void onError(final MediaItem2 mediaItem2, final int what) {
+    public void onError(final MediaItem mediaItem, final int what) {
         synchronized (mTaskLock) {
             if (mCurrentTask != null
                     && mCurrentTask.mNeedToWaitForEventToComplete) {
@@ -768,22 +768,22 @@
         notifyMediaPlayer2Event(new Mp2EventNotifier() {
             @Override
             public void notify(EventCallback cb) {
-                cb.onError(ExoPlayerMediaPlayer2Impl.this, mediaItem2, what, /* extra= */ 0);
+                cb.onError(ExoPlayerMediaPlayer2Impl.this, mediaItem, what, /* extra= */ 0);
             }
         });
     }
 
     // Internal functionality.
 
-    private void notifyOnInfo(MediaItem2 mediaItem2, int what) {
-        notifyOnInfo(mediaItem2, what, /* extra= */ 0);
+    private void notifyOnInfo(MediaItem mediaItem, int what) {
+        notifyOnInfo(mediaItem, what, /* extra= */ 0);
     }
 
-    private void notifyOnInfo(final MediaItem2 mediaItem2, final int what, final int extra) {
+    private void notifyOnInfo(final MediaItem mediaItem, final int what, final int extra) {
         notifyMediaPlayer2Event(new ExoPlayerMediaPlayer2Impl.Mp2EventNotifier() {
             @Override
             public void notify(MediaPlayer2.EventCallback callback) {
-                callback.onInfo(ExoPlayerMediaPlayer2Impl.this, mediaItem2, what, extra);
+                callback.onInfo(ExoPlayerMediaPlayer2Impl.this, mediaItem, what, extra);
             }
         });
     }
@@ -849,7 +849,7 @@
         final int mMediaCallType;
         final boolean mNeedToWaitForEventToComplete;
 
-        MediaItem2 mDSD;
+        MediaItem mDSD;
         @GuardedBy("this")
         boolean mDone;
 
diff --git a/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerUtils.java b/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerUtils.java
index dd915fa..c400881 100644
--- a/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerUtils.java
+++ b/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerUtils.java
@@ -27,8 +27,8 @@
 import static androidx.media2.MediaPlayer2.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT;
 import static androidx.media2.MediaPlayer2.TrackInfo.MEDIA_TRACK_TYPE_UNKNOWN;
 import static androidx.media2.MediaPlayer2.TrackInfo.MEDIA_TRACK_TYPE_VIDEO;
-import static androidx.media2.SubtitleData2.MIMETYPE_TEXT_CEA_608;
-import static androidx.media2.SubtitleData2.MIMETYPE_TEXT_CEA_708;
+import static androidx.media2.SubtitleData.MIMETYPE_TEXT_CEA_608;
+import static androidx.media2.SubtitleData.MIMETYPE_TEXT_CEA_708;
 
 import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
@@ -38,12 +38,12 @@
 
 import androidx.annotation.RestrictTo;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.CallbackMediaItem2;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaItem2;
+import androidx.media2.CallbackMediaItem;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaItem;
 import androidx.media2.MediaPlayer2;
-import androidx.media2.PlaybackParams2;
-import androidx.media2.UriMediaItem2;
+import androidx.media2.PlaybackParams;
+import androidx.media2.UriMediaItem;
 import androidx.media2.exoplayer.external.C;
 import androidx.media2.exoplayer.external.ExoPlaybackException;
 import androidx.media2.exoplayer.external.Format;
@@ -80,35 +80,35 @@
             .setAdtsExtractorFlags(AdtsExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING);
 
     /**
-     * Returns an ExoPlayer media source for the given media item. The given {@link MediaItem2} is
+     * Returns an ExoPlayer media source for the given media item. The given {@link MediaItem} is
      * set as the tag of the source.
      */
     public static MediaSource createUnclippedMediaSource(
-            DataSource.Factory dataSourceFactory, MediaItem2 mediaItem2) {
-        if (mediaItem2 instanceof UriMediaItem2) {
-            Uri uri = ((UriMediaItem2) mediaItem2).getUri();
+            DataSource.Factory dataSourceFactory, MediaItem mediaItem) {
+        if (mediaItem instanceof UriMediaItem) {
+            Uri uri = ((UriMediaItem) mediaItem).getUri();
             if (Util.inferContentType(uri) == C.TYPE_HLS) {
                 return new HlsMediaSource.Factory(dataSourceFactory)
-                        .setTag(mediaItem2)
+                        .setTag(mediaItem)
                         .createMediaSource(uri);
             } else {
                 return new ExtractorMediaSource.Factory(dataSourceFactory)
                         .setExtractorsFactory(sExtractorsFactory)
-                        .setTag(mediaItem2)
+                        .setTag(mediaItem)
                         .createMediaSource(uri);
             }
-        } else if (mediaItem2 instanceof FileMediaItem2) {
+        } else if (mediaItem instanceof FileMediaItem) {
             return new ExtractorMediaSource.Factory(dataSourceFactory)
                     .setExtractorsFactory(sExtractorsFactory)
-                    .setTag(mediaItem2)
+                    .setTag(mediaItem)
                     .createMediaSource(Uri.EMPTY);
-        } else if (mediaItem2 instanceof CallbackMediaItem2) {
-            CallbackMediaItem2 callbackMediaItem2 = (CallbackMediaItem2) mediaItem2;
-            dataSourceFactory = DataSourceCallback2DataSource.getFactory(
-                    callbackMediaItem2.getDataSourceCallback2());
+        } else if (mediaItem instanceof CallbackMediaItem) {
+            CallbackMediaItem callbackMediaItem = (CallbackMediaItem) mediaItem;
+            dataSourceFactory = DataSourceCallbackDataSource.getFactory(
+                    callbackMediaItem.getDataSourceCallback());
             return new ExtractorMediaSource.Factory(dataSourceFactory)
                     .setExtractorsFactory(sExtractorsFactory)
-                    .setTag(mediaItem2)
+                    .setTag(mediaItem)
                     .createMediaSource(Uri.EMPTY);
         } else {
             throw new IllegalStateException();
@@ -134,7 +134,7 @@
     }
 
     /** Returns ExoPlayer playback parameters for the given playback params. */
-    public static PlaybackParameters getPlaybackParameters(PlaybackParams2 playbackParams2) {
+    public static PlaybackParameters getPlaybackParameters(PlaybackParams playbackParams2) {
         Float speed = playbackParams2.getSpeed();
         Float pitch = playbackParams2.getPitch();
         return new PlaybackParameters(speed != null ? speed : 1f, pitch != null ? pitch : 1f);
diff --git a/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerWrapper.java b/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerWrapper.java
index 9e7f850..4d76df3 100644
--- a/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerWrapper.java
+++ b/media2/src/main/java/androidx/media2/exoplayer/ExoPlayerWrapper.java
@@ -33,13 +33,13 @@
 import androidx.annotation.RestrictTo;
 import androidx.core.util.Preconditions;
 import androidx.media.AudioAttributesCompat;
-import androidx.media2.CallbackMediaItem2;
-import androidx.media2.FileMediaItem2;
-import androidx.media2.MediaItem2;
+import androidx.media2.CallbackMediaItem;
+import androidx.media2.FileMediaItem;
+import androidx.media2.MediaItem;
 import androidx.media2.MediaPlayer2;
-import androidx.media2.MediaTimestamp2;
-import androidx.media2.PlaybackParams2;
-import androidx.media2.SubtitleData2;
+import androidx.media2.MediaTimestamp;
+import androidx.media2.PlaybackParams;
+import androidx.media2.SubtitleData;
 import androidx.media2.exoplayer.external.C;
 import androidx.media2.exoplayer.external.DefaultLoadControl;
 import androidx.media2.exoplayer.external.ExoPlaybackException;
@@ -92,46 +92,46 @@
     public interface Listener {
 
         /** Called when the player is prepared. */
-        void onPrepared(MediaItem2 mediaItem2);
+        void onPrepared(MediaItem mediaItem);
 
         /** Called when metadata (e.g., the set of available tracks) changes. */
-        void onMetadataChanged(MediaItem2 mediaItem2);
+        void onMetadataChanged(MediaItem mediaItem);
 
         /** Called when a seek request has completed. */
         void onSeekCompleted(long positionMs);
 
         /** Called when the player rebuffers. */
-        void onBufferingStarted(MediaItem2 mediaItem2);
+        void onBufferingStarted(MediaItem mediaItem);
 
         /** Called when the player becomes ready again after rebuffering. */
-        void onBufferingEnded(MediaItem2 mediaItem2);
+        void onBufferingEnded(MediaItem mediaItem);
 
         /** Called when video rendering of the specified media item has started. */
-        void onVideoRenderingStart(MediaItem2 mediaItem2);
+        void onVideoRenderingStart(MediaItem mediaItem);
 
         /** Called when the video size of the specified media item has changed. */
-        void onVideoSizeChanged(MediaItem2 mediaItem2, int width, int height);
+        void onVideoSizeChanged(MediaItem mediaItem, int width, int height);
 
         /** Called when subtitle data is handled. */
-        void onSubtitleData2(MediaItem2 mediaItem2, SubtitleData2 subtitleData2);
+        void onSubtitleData(MediaItem mediaItem, SubtitleData subtitleData);
 
         /** Called when playback transitions to the next media item. */
-        void onMediaItem2StartedAsNext(MediaItem2 mediaItem2);
+        void onMediaItemStartedAsNext(MediaItem mediaItem);
 
         /** Called when playback of a media item ends. */
-        void onMediaItem2Ended(MediaItem2 mediaItem2);
+        void onMediaItemEnded(MediaItem mediaItem);
 
         /** Called when playback of the specified item loops back to its start. */
-        void onLoop(MediaItem2 mediaItem2);
+        void onLoop(MediaItem mediaItem);
 
         /** Called when a change in the progression of media time is detected. */
-        void onMediaTimeDiscontinuity(MediaItem2 mediaItem2, MediaTimestamp2 mediaTimestamp2);
+        void onMediaTimeDiscontinuity(MediaItem mediaItem, MediaTimestamp mediaTimestamp);
 
         /** Called when playback of the item list has ended. */
-        void onPlaybackEnded(MediaItem2 mediaItem2);
+        void onPlaybackEnded(MediaItem mediaItem);
 
         /** Called when the player encounters an error. */
-        void onError(MediaItem2 mediaItem2, int what);
+        void onError(MediaItem mediaItem, int what);
 
     }
 
@@ -156,7 +156,7 @@
     private boolean mPendingSeek;
     private int mVideoWidth;
     private int mVideoHeight;
-    private PlaybackParams2 mPlaybackParams2;
+    private PlaybackParams mPlaybackParams;
 
     /**
      * Creates a new ExoPlayer wrapper.
@@ -175,11 +175,11 @@
         return mLooper;
     }
 
-    public void setMediaItem(MediaItem2 mediaItem2) {
-        mMediaItemQueue.setMediaItem2(Preconditions.checkNotNull(mediaItem2));
+    public void setMediaItem(MediaItem mediaItem) {
+        mMediaItemQueue.setMediaItem(Preconditions.checkNotNull(mediaItem));
     }
 
-    public MediaItem2 getCurrentMediaItem() {
+    public MediaItem getCurrentMediaItem() {
         return mMediaItemQueue.getCurrentMediaItem();
     }
 
@@ -203,22 +203,22 @@
 
     public void seekTo(long position, @MediaPlayer2.SeekMode int mode) {
         mPlayer.setSeekParameters(ExoPlayerUtils.getSeekParameters(mode));
-        MediaItem2 mediaItem2 = mMediaItemQueue.getCurrentMediaItem();
-        if (mediaItem2 != null) {
+        MediaItem mediaItem = mMediaItemQueue.getCurrentMediaItem();
+        if (mediaItem != null) {
             Preconditions.checkArgument(
-                    mediaItem2.getStartPosition() <= position
-                            && mediaItem2.getEndPosition() >= position,
+                    mediaItem.getStartPosition() <= position
+                            && mediaItem.getEndPosition() >= position,
                     "Requested seek position is out of range : " + position);
-            position -= mediaItem2.getStartPosition();
+            position -= mediaItem.getStartPosition();
         }
         mPlayer.seekTo(position);
     }
 
     public long getCurrentPosition() {
         long position = mPlayer.getCurrentPosition();
-        MediaItem2 mediaItem2 = mMediaItemQueue.getCurrentMediaItem();
-        if (mediaItem2 != null) {
-            position += mediaItem2.getStartPosition();
+        MediaItem mediaItem = mMediaItemQueue.getCurrentMediaItem();
+        if (mediaItem != null) {
+            position += mediaItem.getStartPosition();
         }
         return position;
     }
@@ -230,9 +230,9 @@
 
     public long getBufferedPosition() {
         long position = mPlayer.getBufferedPosition();
-        MediaItem2 mediaItem2 = mMediaItemQueue.getCurrentMediaItem();
-        if (mediaItem2 != null) {
-            position += mediaItem2.getStartPosition();
+        MediaItem mediaItem = mMediaItemQueue.getCurrentMediaItem();
+        if (mediaItem != null) {
+            position += mediaItem.getStartPosition();
         }
         return position;
     }
@@ -270,14 +270,14 @@
         mMediaItemQueue.skipToNext();
     }
 
-    public void setNextMediaItem(MediaItem2 mediaItem2) {
+    public void setNextMediaItem(MediaItem mediaItem) {
         Preconditions.checkState(!mMediaItemQueue.isEmpty());
-        mMediaItemQueue.setNextMediaItem2s(Collections.singletonList(mediaItem2));
+        mMediaItemQueue.setNextMediaItems(Collections.singletonList(mediaItem));
     }
 
-    public void setNextMediaItems(List<MediaItem2> mediaItem2s) {
+    public void setNextMediaItems(List<MediaItem> mediaItems) {
         Preconditions.checkState(!mMediaItemQueue.isEmpty());
-        mMediaItemQueue.setNextMediaItem2s(Preconditions.checkNotNull(mediaItem2s));
+        mMediaItemQueue.setNextMediaItems(Preconditions.checkNotNull(mediaItems));
     }
 
     public void setAudioAttributes(AudioAttributesCompat audioAttributes) {
@@ -316,15 +316,15 @@
         mPlayer.setAuxEffectInfo(new AuxEffectInfo(mAuxEffectId, auxEffectSendLevel));
     }
 
-    public void setPlaybackParams(PlaybackParams2 playbackParams2) {
+    public void setPlaybackParams(PlaybackParams playbackParams2) {
         // TODO(b/80232248): Decide how to handle fallback modes, which ExoPlayer doesn't support.
-        mPlaybackParams2 = playbackParams2;
-        mPlayer.setPlaybackParameters(ExoPlayerUtils.getPlaybackParameters(mPlaybackParams2));
+        mPlaybackParams = playbackParams2;
+        mPlayer.setPlaybackParameters(ExoPlayerUtils.getPlaybackParameters(mPlaybackParams));
         mListener.onMediaTimeDiscontinuity(getCurrentMediaItem(), getTimestamp());
     }
 
-    public PlaybackParams2 getPlaybackParams() {
-        return mPlaybackParams2;
+    public PlaybackParams getPlaybackParams() {
+        return mPlaybackParams;
     }
 
     public int getVideoWidth() {
@@ -392,11 +392,11 @@
         return bundle;
     }
 
-    public MediaTimestamp2 getTimestamp() {
+    public MediaTimestamp getTimestamp() {
         boolean isPlaying =
                 mPlayer.getPlaybackState() == Player.STATE_READY && mPlayer.getPlayWhenReady();
-        float speed = isPlaying ? mPlaybackParams2.getSpeed() : 0f;
-        return new MediaTimestamp2(C.msToUs(getCurrentPosition()), System.nanoTime(), speed);
+        float speed = isPlaying ? mPlaybackParams.getSpeed() : 0f;
+        return new MediaTimestamp(C.msToUs(getCurrentPosition()), System.nanoTime(), speed);
     }
 
     public void reset() {
@@ -431,10 +431,10 @@
         mAudioSessionId = C.AUDIO_SESSION_ID_UNSET;
         mAuxEffectId = AuxEffectInfo.NO_AUX_EFFECT_ID;
         mAuxEffectSendLevel = 0f;
-        mPlaybackParams2 = new PlaybackParams2.Builder()
+        mPlaybackParams = new PlaybackParams.Builder()
                 .setSpeed(1f)
                 .setPitch(1f)
-                .setAudioFallbackMode(PlaybackParams2.AUDIO_FALLBACK_MODE_DEFAULT)
+                .setAudioFallbackMode(PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT)
                 .build();
     }
 
@@ -532,10 +532,10 @@
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    void handleSubtitleData2(byte[] data, long timeUs) {
+    void handleSubtitleData(byte[] data, long timeUs) {
         int trackIndex = mTrackSelector.getSelectedTrack(MEDIA_TRACK_TYPE_SUBTITLE);
-        mListener.onSubtitleData2(getCurrentMediaItem(),
-                new SubtitleData2(trackIndex, timeUs, /* durationUs= */ 0L, data));
+        mListener.onSubtitleData(getCurrentMediaItem(),
+                new SubtitleData(trackIndex, timeUs, /* durationUs= */ 0L, data));
     }
 
     private void maybeUpdateTimerForPlaying() {
@@ -554,7 +554,7 @@
     }
 
     private void maybeNotifyReadyEvents() {
-        MediaItem2 mediaItem2 = mMediaItemQueue.getCurrentMediaItem();
+        MediaItem mediaItem = mMediaItemQueue.getCurrentMediaItem();
         boolean prepareComplete = !mPrepared;
         boolean seekComplete = mPendingSeek;
         if (prepareComplete) {
@@ -564,7 +564,7 @@
             // TODO(b/80232248): Trigger onInfo with MEDIA_INFO_PREPARED for any item in the data
             // source queue for which the duration is now known, even if this is not the initial
             // preparation.
-            mListener.onPrepared(mediaItem2);
+            mListener.onPrepared(mediaItem);
         } else if (seekComplete) {
             // TODO(b/80232248): Suppress notification if this is an initial seek for a non-zero
             // start position.
@@ -644,7 +644,7 @@
 
         @Override
         public void onCcData(byte[] data, long timeUs) {
-            handleSubtitleData2(data, timeUs);
+            handleSubtitleData(data, timeUs);
         }
 
         @Override
@@ -656,14 +656,14 @@
 
     private static final class MediaItemInfo {
 
-        final MediaItem2 mMediaItem;
+        final MediaItem mMediaItem;
         @Nullable
         final DurationProvidingMediaSource mDurationProvidingMediaSource;
         @Nullable
         final FileDescriptor mFileDescriptor;
 
         MediaItemInfo(
-                MediaItem2 mediaItem,
+                MediaItem mediaItem,
                 @Nullable DurationProvidingMediaSource durationProvidingMediaSource,
                 @Nullable FileDescriptor fileDescriptor) {
             mMediaItem = mediaItem;
@@ -742,13 +742,13 @@
             return mConcatenatingMediaSource.getSize() == 0;
         }
 
-        public void setMediaItem2(MediaItem2 mediaItem2) {
+        public void setMediaItem(MediaItem mediaItem) {
             clear();
             mConcatenatingMediaSource.clear();
-            setNextMediaItem2s(Collections.singletonList(mediaItem2));
+            setNextMediaItems(Collections.singletonList(mediaItem));
         }
 
-        public void setNextMediaItem2s(List<MediaItem2> mediaItem2s) {
+        public void setNextMediaItems(List<MediaItem> mediaItems) {
             int size = mConcatenatingMediaSource.getSize();
             if (size > 1) {
                 mConcatenatingMediaSource.removeMediaSourceRange(
@@ -758,19 +758,19 @@
                 }
             }
 
-            List<MediaSource> mediaSources = new ArrayList<>(mediaItem2s.size());
-            for (MediaItem2 mediaItem2 : mediaItem2s) {
-                if (mediaItem2 == null) {
-                    mListener.onError(/* mediaItem2= */ null, MEDIA_ERROR_UNKNOWN);
+            List<MediaSource> mediaSources = new ArrayList<>(mediaItems.size());
+            for (MediaItem mediaItem : mediaItems) {
+                if (mediaItem == null) {
+                    mListener.onError(/* mediaItem= */ null, MEDIA_ERROR_UNKNOWN);
                     return;
                 }
                 try {
                     appendMediaItem(
-                            mediaItem2,
+                            mediaItem,
                             mMediaItemInfos,
                             mediaSources);
                 } catch (IOException e) {
-                    mListener.onError(mediaItem2, MEDIA_ERROR_UNKNOWN);
+                    mListener.onError(mediaItem, MEDIA_ERROR_UNKNOWN);
                 }
             }
             mConcatenatingMediaSource.addMediaSources(mediaSources);
@@ -781,7 +781,7 @@
         }
 
         @Nullable
-        public MediaItem2 getCurrentMediaItem() {
+        public MediaItem getCurrentMediaItem() {
             return mMediaItemInfos.isEmpty() ? null : mMediaItemInfos.peekFirst().mMediaItem;
         }
 
@@ -822,13 +822,13 @@
         }
 
         public void onPlayerEnded() {
-            MediaItem2 mediaItem = getCurrentMediaItem();
-            mListener.onMediaItem2Ended(mediaItem);
+            MediaItem mediaItem = getCurrentMediaItem();
+            mListener.onMediaItemEnded(mediaItem);
             mListener.onPlaybackEnded(mediaItem);
         }
 
         public void onPositionDiscontinuity(boolean isPeriodTransition) {
-            MediaItem2 currentMediaItem = getCurrentMediaItem();
+            MediaItem currentMediaItem = getCurrentMediaItem();
             if (isPeriodTransition && mPlayer.getRepeatMode() != Player.REPEAT_MODE_OFF) {
                 mListener.onLoop(currentMediaItem);
             }
@@ -836,13 +836,13 @@
             if (windowIndex > 0) {
                 // We're no longer playing the first item in the queue.
                 if (isPeriodTransition) {
-                    mListener.onMediaItem2Ended(getCurrentMediaItem());
+                    mListener.onMediaItemEnded(getCurrentMediaItem());
                 }
                 for (int i = 0; i < windowIndex; i++) {
                     releaseMediaItem(mMediaItemInfos.removeFirst());
                 }
                 if (isPeriodTransition) {
-                    mListener.onMediaItem2StartedAsNext(getCurrentMediaItem());
+                    mListener.onMediaItemStartedAsNext(getCurrentMediaItem());
                 }
                 mConcatenatingMediaSource.removeMediaSourceRange(0, windowIndex);
                 mCurrentMediaItemPlayingTimeUs = 0;
@@ -858,34 +858,34 @@
          * collections provided.
          */
         private void appendMediaItem(
-                MediaItem2 mediaItem2,
+                MediaItem mediaItem,
                 Collection<MediaItemInfo> mediaItemInfos,
                 Collection<MediaSource> mediaSources) throws IOException {
             DataSource.Factory dataSourceFactory = mDataSourceFactory;
             // Create a data source for reading from the file descriptor, if needed.
             FileDescriptor fileDescriptor = null;
-            if (mediaItem2 instanceof FileMediaItem2) {
-                FileMediaItem2 fileMediaItem2 = (FileMediaItem2) mediaItem2;
-                // TODO(b/68398926): Remove dup'ing the file descriptor once FileMediaItem2 does it.
+            if (mediaItem instanceof FileMediaItem) {
+                FileMediaItem fileMediaItem = (FileMediaItem) mediaItem;
+                // TODO(b/68398926): Remove dup'ing the file descriptor once FileMediaItem does it.
                 Object lock = mFileDescriptorRegistry.registerMediaItemAndGetLock(
-                        fileMediaItem2.getFileDescriptor());
-                fileDescriptor = FileDescriptorUtil.dup(fileMediaItem2.getFileDescriptor());
-                long offset = fileMediaItem2.getFileDescriptorOffset();
-                long length = fileMediaItem2.getFileDescriptorLength();
+                        fileMediaItem.getFileDescriptor());
+                fileDescriptor = FileDescriptorUtil.dup(fileMediaItem.getFileDescriptor());
+                long offset = fileMediaItem.getFileDescriptorOffset();
+                long length = fileMediaItem.getFileDescriptorLength();
                 dataSourceFactory =
                         FileDescriptorDataSource.getFactory(fileDescriptor, offset, length, lock);
             }
 
             // Create a source for the item.
             MediaSource mediaSource =
-                    ExoPlayerUtils.createUnclippedMediaSource(dataSourceFactory, mediaItem2);
+                    ExoPlayerUtils.createUnclippedMediaSource(dataSourceFactory, mediaItem);
 
             // Apply clipping if needed. Because ExoPlayer doesn't expose the unclipped duration, we
             // wrap the child source in an intermediate source that lets us access its duration.
             DurationProvidingMediaSource durationProvidingMediaSource = null;
-            long startPosition = mediaItem2.getStartPosition();
-            long endPosition = mediaItem2.getEndPosition();
-            if (startPosition != 0L || endPosition != MediaItem2.POSITION_UNKNOWN) {
+            long startPosition = mediaItem.getStartPosition();
+            long endPosition = mediaItem.getEndPosition();
+            if (startPosition != 0L || endPosition != MediaItem.POSITION_UNKNOWN) {
                 durationProvidingMediaSource = new DurationProvidingMediaSource(mediaSource);
                 // Disable the initial discontinuity to give seamless transitions to clips.
                 mediaSource = new ClippingMediaSource(
@@ -899,21 +899,21 @@
 
             mediaSources.add(mediaSource);
             mediaItemInfos.add(
-                    new MediaItemInfo(mediaItem2, durationProvidingMediaSource, fileDescriptor));
+                    new MediaItemInfo(mediaItem, durationProvidingMediaSource, fileDescriptor));
         }
 
         private void releaseMediaItem(MediaItemInfo mediaItemInfo) {
-            MediaItem2 mediaItem = mediaItemInfo.mMediaItem;
+            MediaItem mediaItem = mediaItemInfo.mMediaItem;
             try {
-                if (mediaItem instanceof FileMediaItem2) {
+                if (mediaItem instanceof FileMediaItem) {
                     FileDescriptorUtil.close(mediaItemInfo.mFileDescriptor);
-                    // TODO(b/68398926): Remove separate file descriptors once FileMediaItem2 dup's.
+                    // TODO(b/68398926): Remove separate file descriptors once FileMediaItem dup's.
                     FileDescriptor fileDescriptor =
-                            ((FileMediaItem2) mediaItem).getFileDescriptor();
+                            ((FileMediaItem) mediaItem).getFileDescriptor();
                     mFileDescriptorRegistry.unregisterMediaItem(fileDescriptor);
-                } else if (mediaItem instanceof CallbackMediaItem2) {
-                    ((CallbackMediaItem2) mediaItemInfo.mMediaItem)
-                            .getDataSourceCallback2().close();
+                } else if (mediaItem instanceof CallbackMediaItem) {
+                    ((CallbackMediaItem) mediaItemInfo.mMediaItem)
+                            .getDataSourceCallback().close();
                 }
             } catch (IOException e) {
                 Log.w(TAG, "Error releasing media item " + mediaItem, e);
diff --git a/media2/src/main/java/androidx/media2/subtitle/SubtitleTrack.java b/media2/src/main/java/androidx/media2/subtitle/SubtitleTrack.java
index 8aa305c..2d5e52d 100644
--- a/media2/src/main/java/androidx/media2/subtitle/SubtitleTrack.java
+++ b/media2/src/main/java/androidx/media2/subtitle/SubtitleTrack.java
@@ -28,7 +28,7 @@
 
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
-import androidx.media2.SubtitleData2;
+import androidx.media2.SubtitleData;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -83,7 +83,7 @@
     /**
      * Called when there is input data for the subtitle track.
      */
-    public void onData(SubtitleData2 data) {
+    public void onData(SubtitleData data) {
         long runID = data.getStartTimeUs() + 1;
         onData(data.getData(), true /* eos */, runID);
         setRunDiscardTimeMs(
diff --git a/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java b/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
index ab2a3467..9dfff70 100644
--- a/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
+++ b/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
@@ -282,31 +282,6 @@
         return sGlobal.getRoutes();
     }
 
-    /**
-     * Gets the {@link MediaRouter.RouteInfo routes} from a uniqueRouteDescriptorBundle.
-     *
-     * @param uniqueRouteDescriptorBundle a bundle created by
-     *            {@link RouteInfo#getUniqueRouteDescriptorBundle()}
-     * @return A route for the given {@code uniqueRouteDescriptorBundle} if exist, otherwise null.
-     * @see androidx.media2.MediaSession2#notifyRoutesInfoChanged
-     * @see androidx.media2.MediaController2.ControllerCallback#onRoutesInfoChanged
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public @Nullable RouteInfo getRoute(Bundle uniqueRouteDescriptorBundle) {
-        if (uniqueRouteDescriptorBundle == null) {
-            return null;
-        }
-        uniqueRouteDescriptorBundle.setClassLoader(mContext.getClassLoader());
-        String uniqueId = null;
-        try {
-            uniqueId = uniqueRouteDescriptorBundle.getString(MediaRouteDescriptor.KEY_ID);
-        } catch (Exception e) {
-            return null;
-        }
-        return sGlobal.getRoute(uniqueId);
-    }
-
     @Nullable RouteInfo getRoute(String uniqueId) {
         checkCallingThread();
         return sGlobal.getRoute(uniqueId);
@@ -1329,23 +1304,6 @@
         }
 
         /**
-         * Gets the bundle of {@link MediaRouteDescriptor} with a global unique route id
-         * associated with this route.
-         *
-         * @return the bundle of {@link MediaRouteDescriptor} with a global unique route id
-         * associated with this route.
-         * @see androidx.media2.MediaSession2#notifyRoutesInfoChanged
-         * @see androidx.media2.MediaController2.ControllerCallback#onRoutesInfoChanged
-         * @hide
-         */
-        @RestrictTo(LIBRARY_GROUP)
-        public @NonNull Bundle getUniqueRouteDescriptorBundle() {
-            Bundle bundle = mDescriptor.asBundle();
-            bundle.putString(MediaRouteDescriptor.KEY_ID, mUniqueId);
-            return bundle;
-        }
-
-        /**
          * @hide
          */
         @RestrictTo(LIBRARY_GROUP)
diff --git a/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml b/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml
index d4a4fd6..b04b5aa 100644
--- a/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml
+++ b/mediarouter/src/main/res/layout/mr_cast_group_volume_item.xml
@@ -43,6 +43,8 @@
             android:layout_toEndOf="@id/mr_cast_mute_button"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:minHeight="48dp"
+            android:maxHeight="48dp"
             android:layout_marginRight="16dp"
             android:layout_marginEnd="16dp"
             android:layout_centerVertical="true"
diff --git a/mediarouter/src/main/res/layout/mr_cast_route_item.xml b/mediarouter/src/main/res/layout/mr_cast_route_item.xml
index 7f999ab..8077ce9 100644
--- a/mediarouter/src/main/res/layout/mr_cast_route_item.xml
+++ b/mediarouter/src/main/res/layout/mr_cast_route_item.xml
@@ -67,6 +67,8 @@
             android:layout_toEndOf="@id/mr_cast_mute_button"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:minHeight="48dp"
+            android:maxHeight="48dp"
             android:layout_centerVertical="true"
             android:layout_marginRight="16dp"
             android:layout_marginEnd="16dp"
diff --git a/preference/api/1.0.0.txt b/preference/api/1.0.0.txt
index f0c5003..206daae 100644
--- a/preference/api/1.0.0.txt
+++ b/preference/api/1.0.0.txt
@@ -1,160 +1,161 @@
+// Signature format: 2.0
 package androidx.preference {
 
   public class CheckBoxPreference extends androidx.preference.TwoStatePreference {
-    ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
-    ctor public CheckBoxPreference(android.content.Context);
+    ctor public CheckBoxPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public CheckBoxPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public CheckBoxPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public CheckBoxPreference(android.content.Context!);
   }
 
   public abstract class DialogPreference extends androidx.preference.Preference {
-    ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public DialogPreference(android.content.Context, android.util.AttributeSet);
-    ctor public DialogPreference(android.content.Context);
-    method public android.graphics.drawable.Drawable getDialogIcon();
+    ctor public DialogPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public DialogPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public DialogPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public DialogPreference(android.content.Context!);
+    method public android.graphics.drawable.Drawable! getDialogIcon();
     method public int getDialogLayoutResource();
-    method public java.lang.CharSequence getDialogMessage();
-    method public java.lang.CharSequence getDialogTitle();
-    method public java.lang.CharSequence getNegativeButtonText();
-    method public java.lang.CharSequence getPositiveButtonText();
-    method public void setDialogIcon(android.graphics.drawable.Drawable);
+    method public CharSequence! getDialogMessage();
+    method public CharSequence! getDialogTitle();
+    method public CharSequence! getNegativeButtonText();
+    method public CharSequence! getPositiveButtonText();
+    method public void setDialogIcon(android.graphics.drawable.Drawable!);
     method public void setDialogIcon(int);
     method public void setDialogLayoutResource(int);
-    method public void setDialogMessage(java.lang.CharSequence);
+    method public void setDialogMessage(CharSequence!);
     method public void setDialogMessage(int);
-    method public void setDialogTitle(java.lang.CharSequence);
+    method public void setDialogTitle(CharSequence!);
     method public void setDialogTitle(int);
-    method public void setNegativeButtonText(java.lang.CharSequence);
+    method public void setNegativeButtonText(CharSequence!);
     method public void setNegativeButtonText(int);
-    method public void setPositiveButtonText(java.lang.CharSequence);
+    method public void setPositiveButtonText(CharSequence!);
     method public void setPositiveButtonText(int);
   }
 
-  public static abstract interface DialogPreference.TargetFragment {
-    method public abstract androidx.preference.Preference findPreference(java.lang.CharSequence);
+  public static interface DialogPreference.TargetFragment {
+    method public androidx.preference.Preference! findPreference(CharSequence!);
   }
 
   public class DropDownPreference extends androidx.preference.ListPreference {
-    ctor public DropDownPreference(android.content.Context);
-    ctor public DropDownPreference(android.content.Context, android.util.AttributeSet);
-    ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int, int);
-    method protected android.widget.ArrayAdapter createAdapter();
+    ctor public DropDownPreference(android.content.Context!);
+    ctor public DropDownPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public DropDownPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public DropDownPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    method protected android.widget.ArrayAdapter! createAdapter();
   }
 
   public class EditTextPreference extends androidx.preference.DialogPreference {
-    ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public EditTextPreference(android.content.Context, android.util.AttributeSet);
-    ctor public EditTextPreference(android.content.Context);
-    method public java.lang.String getText();
-    method public void setText(java.lang.String);
+    ctor public EditTextPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public EditTextPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public EditTextPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public EditTextPreference(android.content.Context!);
+    method public String! getText();
+    method public void setText(String!);
   }
 
   public class EditTextPreferenceDialogFragment extends androidx.preference.PreferenceDialogFragment {
     ctor public EditTextPreferenceDialogFragment();
-    method public static androidx.preference.EditTextPreferenceDialogFragment newInstance(java.lang.String);
+    method public static androidx.preference.EditTextPreferenceDialogFragment! newInstance(String!);
     method public void onDialogClosed(boolean);
   }
 
   public class EditTextPreferenceDialogFragmentCompat extends androidx.preference.PreferenceDialogFragmentCompat {
     ctor public EditTextPreferenceDialogFragmentCompat();
-    method public static androidx.preference.EditTextPreferenceDialogFragmentCompat newInstance(java.lang.String);
+    method public static androidx.preference.EditTextPreferenceDialogFragmentCompat! newInstance(String!);
     method public void onDialogClosed(boolean);
   }
 
   public class ListPreference extends androidx.preference.DialogPreference {
-    ctor public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public ListPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public ListPreference(android.content.Context, android.util.AttributeSet);
-    ctor public ListPreference(android.content.Context);
-    method public int findIndexOfValue(java.lang.String);
-    method public java.lang.CharSequence[] getEntries();
-    method public java.lang.CharSequence getEntry();
-    method public java.lang.CharSequence[] getEntryValues();
-    method public java.lang.String getValue();
-    method public void setEntries(java.lang.CharSequence[]);
-    method public void setEntries(int);
-    method public void setEntryValues(java.lang.CharSequence[]);
-    method public void setEntryValues(int);
-    method public void setValue(java.lang.String);
+    ctor public ListPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public ListPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public ListPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public ListPreference(android.content.Context!);
+    method public int findIndexOfValue(String!);
+    method public CharSequence[]! getEntries();
+    method public CharSequence! getEntry();
+    method public CharSequence[]! getEntryValues();
+    method public String! getValue();
+    method public void setEntries(CharSequence[]!);
+    method public void setEntries(@ArrayRes int);
+    method public void setEntryValues(CharSequence[]!);
+    method public void setEntryValues(@ArrayRes int);
+    method public void setValue(String!);
     method public void setValueIndex(int);
   }
 
   public class ListPreferenceDialogFragment extends androidx.preference.PreferenceDialogFragment {
     ctor public ListPreferenceDialogFragment();
-    method public static androidx.preference.ListPreferenceDialogFragment newInstance(java.lang.String);
+    method public static androidx.preference.ListPreferenceDialogFragment! newInstance(String!);
     method public void onDialogClosed(boolean);
   }
 
   public class ListPreferenceDialogFragmentCompat extends androidx.preference.PreferenceDialogFragmentCompat {
     ctor public ListPreferenceDialogFragmentCompat();
-    method public static androidx.preference.ListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+    method public static androidx.preference.ListPreferenceDialogFragmentCompat! newInstance(String!);
     method public void onDialogClosed(boolean);
   }
 
   public class MultiSelectListPreference extends androidx.preference.DialogPreference {
-    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
-    ctor public MultiSelectListPreference(android.content.Context);
-    method public int findIndexOfValue(java.lang.String);
-    method public java.lang.CharSequence[] getEntries();
-    method public java.lang.CharSequence[] getEntryValues();
-    method protected boolean[] getSelectedItems();
-    method public java.util.Set<java.lang.String> getValues();
-    method public void setEntries(java.lang.CharSequence[]);
-    method public void setEntries(int);
-    method public void setEntryValues(java.lang.CharSequence[]);
-    method public void setEntryValues(int);
-    method public void setValues(java.util.Set<java.lang.String>);
+    ctor public MultiSelectListPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public MultiSelectListPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public MultiSelectListPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public MultiSelectListPreference(android.content.Context!);
+    method public int findIndexOfValue(String!);
+    method public CharSequence[]! getEntries();
+    method public CharSequence[]! getEntryValues();
+    method protected boolean[]! getSelectedItems();
+    method public java.util.Set<java.lang.String>! getValues();
+    method public void setEntries(CharSequence[]!);
+    method public void setEntries(@ArrayRes int);
+    method public void setEntryValues(CharSequence[]!);
+    method public void setEntryValues(@ArrayRes int);
+    method public void setValues(java.util.Set<java.lang.String>!);
   }
 
   public class MultiSelectListPreferenceDialogFragment extends androidx.preference.PreferenceDialogFragment {
     ctor public MultiSelectListPreferenceDialogFragment();
-    method public static androidx.preference.MultiSelectListPreferenceDialogFragment newInstance(java.lang.String);
+    method public static androidx.preference.MultiSelectListPreferenceDialogFragment! newInstance(String!);
     method public void onDialogClosed(boolean);
   }
 
   public class MultiSelectListPreferenceDialogFragmentCompat extends androidx.preference.PreferenceDialogFragmentCompat {
     ctor public MultiSelectListPreferenceDialogFragmentCompat();
-    method public static androidx.preference.MultiSelectListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+    method public static androidx.preference.MultiSelectListPreferenceDialogFragmentCompat! newInstance(String!);
     method public void onDialogClosed(boolean);
   }
 
-  public class Preference implements java.lang.Comparable {
-    ctor public Preference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public Preference(android.content.Context, android.util.AttributeSet, int);
-    ctor public Preference(android.content.Context, android.util.AttributeSet);
-    ctor public Preference(android.content.Context);
-    method public boolean callChangeListener(java.lang.Object);
+  public class Preference implements java.lang.Comparable<androidx.preference.Preference> {
+    ctor public Preference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public Preference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public Preference(android.content.Context!, android.util.AttributeSet!);
+    ctor public Preference(android.content.Context!);
+    method public boolean callChangeListener(Object!);
     method public int compareTo(androidx.preference.Preference);
-    method protected androidx.preference.Preference findPreferenceInHierarchy(java.lang.String);
-    method public android.content.Context getContext();
-    method public java.lang.String getDependency();
-    method public android.os.Bundle getExtras();
-    method public java.lang.String getFragment();
-    method public android.graphics.drawable.Drawable getIcon();
-    method public android.content.Intent getIntent();
-    method public java.lang.String getKey();
+    method protected androidx.preference.Preference! findPreferenceInHierarchy(String!);
+    method public android.content.Context! getContext();
+    method public String! getDependency();
+    method public android.os.Bundle! getExtras();
+    method public String! getFragment();
+    method public android.graphics.drawable.Drawable! getIcon();
+    method public android.content.Intent! getIntent();
+    method public String! getKey();
     method public final int getLayoutResource();
-    method public androidx.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
-    method public androidx.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
+    method public androidx.preference.Preference.OnPreferenceChangeListener! getOnPreferenceChangeListener();
+    method public androidx.preference.Preference.OnPreferenceClickListener! getOnPreferenceClickListener();
     method public int getOrder();
-    method public androidx.preference.PreferenceGroup getParent();
+    method public androidx.preference.PreferenceGroup? getParent();
     method protected boolean getPersistedBoolean(boolean);
     method protected float getPersistedFloat(float);
     method protected int getPersistedInt(int);
     method protected long getPersistedLong(long);
-    method protected java.lang.String getPersistedString(java.lang.String);
-    method public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>);
-    method public androidx.preference.PreferenceDataStore getPreferenceDataStore();
-    method public androidx.preference.PreferenceManager getPreferenceManager();
-    method public android.content.SharedPreferences getSharedPreferences();
+    method protected String! getPersistedString(String!);
+    method public java.util.Set<java.lang.String>! getPersistedStringSet(java.util.Set<java.lang.String>!);
+    method public androidx.preference.PreferenceDataStore? getPreferenceDataStore();
+    method public androidx.preference.PreferenceManager! getPreferenceManager();
+    method public android.content.SharedPreferences! getSharedPreferences();
     method public boolean getShouldDisableView();
-    method public java.lang.CharSequence getSummary();
-    method public java.lang.CharSequence getTitle();
+    method public CharSequence! getSummary();
+    method public CharSequence! getTitle();
     method public final int getWidgetLayoutResource();
     method public boolean hasKey();
     method public boolean isEnabled();
@@ -168,49 +169,49 @@
     method public void notifyDependencyChange(boolean);
     method protected void notifyHierarchyChanged();
     method public void onAttached();
-    method protected void onAttachedToHierarchy(androidx.preference.PreferenceManager);
-    method public void onBindViewHolder(androidx.preference.PreferenceViewHolder);
+    method protected void onAttachedToHierarchy(androidx.preference.PreferenceManager!);
+    method public void onBindViewHolder(androidx.preference.PreferenceViewHolder!);
     method protected void onClick();
-    method public void onDependencyChanged(androidx.preference.Preference, boolean);
+    method public void onDependencyChanged(androidx.preference.Preference!, boolean);
     method public void onDetached();
-    method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int);
-    method public void onInitializeAccessibilityNodeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method public void onParentChanged(androidx.preference.Preference, boolean);
+    method protected Object! onGetDefaultValue(android.content.res.TypedArray!, int);
+    method @CallSuper public void onInitializeAccessibilityNodeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+    method public void onParentChanged(androidx.preference.Preference!, boolean);
     method protected void onPrepareForRemoval();
-    method protected void onRestoreInstanceState(android.os.Parcelable);
-    method protected android.os.Parcelable onSaveInstanceState();
-    method protected deprecated void onSetInitialValue(boolean, java.lang.Object);
-    method protected void onSetInitialValue(java.lang.Object);
-    method public android.os.Bundle peekExtras();
+    method protected void onRestoreInstanceState(android.os.Parcelable!);
+    method protected android.os.Parcelable! onSaveInstanceState();
+    method @Deprecated protected void onSetInitialValue(boolean, Object!);
+    method protected void onSetInitialValue(Object?);
+    method public android.os.Bundle! peekExtras();
     method protected boolean persistBoolean(boolean);
     method protected boolean persistFloat(float);
     method protected boolean persistInt(int);
     method protected boolean persistLong(long);
-    method protected boolean persistString(java.lang.String);
-    method public boolean persistStringSet(java.util.Set<java.lang.String>);
-    method public void restoreHierarchyState(android.os.Bundle);
-    method public void saveHierarchyState(android.os.Bundle);
-    method public void setDefaultValue(java.lang.Object);
-    method public void setDependency(java.lang.String);
+    method protected boolean persistString(String!);
+    method public boolean persistStringSet(java.util.Set<java.lang.String>!);
+    method public void restoreHierarchyState(android.os.Bundle!);
+    method public void saveHierarchyState(android.os.Bundle!);
+    method public void setDefaultValue(Object!);
+    method public void setDependency(String!);
     method public void setEnabled(boolean);
-    method public void setFragment(java.lang.String);
-    method public void setIcon(android.graphics.drawable.Drawable);
+    method public void setFragment(String!);
+    method public void setIcon(android.graphics.drawable.Drawable!);
     method public void setIcon(int);
     method public void setIconSpaceReserved(boolean);
-    method public void setIntent(android.content.Intent);
-    method public void setKey(java.lang.String);
+    method public void setIntent(android.content.Intent!);
+    method public void setKey(String!);
     method public void setLayoutResource(int);
-    method public void setOnPreferenceChangeListener(androidx.preference.Preference.OnPreferenceChangeListener);
-    method public void setOnPreferenceClickListener(androidx.preference.Preference.OnPreferenceClickListener);
+    method public void setOnPreferenceChangeListener(androidx.preference.Preference.OnPreferenceChangeListener!);
+    method public void setOnPreferenceClickListener(androidx.preference.Preference.OnPreferenceClickListener!);
     method public void setOrder(int);
     method public void setPersistent(boolean);
-    method public void setPreferenceDataStore(androidx.preference.PreferenceDataStore);
+    method public void setPreferenceDataStore(androidx.preference.PreferenceDataStore!);
     method public void setSelectable(boolean);
     method public void setShouldDisableView(boolean);
     method public void setSingleLineTitle(boolean);
-    method public void setSummary(java.lang.CharSequence);
+    method public void setSummary(CharSequence!);
     method public void setSummary(int);
-    method public void setTitle(java.lang.CharSequence);
+    method public void setTitle(CharSequence!);
     method public void setTitle(int);
     method public void setViewId(int);
     method public final void setVisible(boolean);
@@ -221,214 +222,214 @@
   }
 
   public static class Preference.BaseSavedState extends android.view.AbsSavedState {
-    ctor public Preference.BaseSavedState(android.os.Parcel);
-    ctor public Preference.BaseSavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<androidx.preference.Preference.BaseSavedState> CREATOR;
+    ctor public Preference.BaseSavedState(android.os.Parcel!);
+    ctor public Preference.BaseSavedState(android.os.Parcelable!);
+    field public static final android.os.Parcelable.Creator<androidx.preference.Preference.BaseSavedState>! CREATOR;
   }
 
-  public static abstract interface Preference.OnPreferenceChangeListener {
-    method public abstract boolean onPreferenceChange(androidx.preference.Preference, java.lang.Object);
+  public static interface Preference.OnPreferenceChangeListener {
+    method public boolean onPreferenceChange(androidx.preference.Preference!, Object!);
   }
 
-  public static abstract interface Preference.OnPreferenceClickListener {
-    method public abstract boolean onPreferenceClick(androidx.preference.Preference);
+  public static interface Preference.OnPreferenceClickListener {
+    method public boolean onPreferenceClick(androidx.preference.Preference!);
   }
 
   public class PreferenceCategory extends androidx.preference.PreferenceGroup {
-    ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
-    ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet);
-    ctor public PreferenceCategory(android.content.Context);
+    ctor public PreferenceCategory(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public PreferenceCategory(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public PreferenceCategory(android.content.Context!, android.util.AttributeSet!);
+    ctor public PreferenceCategory(android.content.Context!);
   }
 
   public abstract class PreferenceDataStore {
     ctor public PreferenceDataStore();
-    method public boolean getBoolean(java.lang.String, boolean);
-    method public float getFloat(java.lang.String, float);
-    method public int getInt(java.lang.String, int);
-    method public long getLong(java.lang.String, long);
-    method public java.lang.String getString(java.lang.String, java.lang.String);
-    method public java.util.Set<java.lang.String> getStringSet(java.lang.String, java.util.Set<java.lang.String>);
-    method public void putBoolean(java.lang.String, boolean);
-    method public void putFloat(java.lang.String, float);
-    method public void putInt(java.lang.String, int);
-    method public void putLong(java.lang.String, long);
-    method public void putString(java.lang.String, java.lang.String);
-    method public void putStringSet(java.lang.String, java.util.Set<java.lang.String>);
+    method public boolean getBoolean(String!, boolean);
+    method public float getFloat(String!, float);
+    method public int getInt(String!, int);
+    method public long getLong(String!, long);
+    method public String? getString(String!, String?);
+    method public java.util.Set<java.lang.String>? getStringSet(String!, java.util.Set<java.lang.String>?);
+    method public void putBoolean(String!, boolean);
+    method public void putFloat(String!, float);
+    method public void putInt(String!, int);
+    method public void putLong(String!, long);
+    method public void putString(String!, String?);
+    method public void putStringSet(String!, java.util.Set<java.lang.String>?);
   }
 
   public abstract class PreferenceDialogFragment extends android.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
     ctor public PreferenceDialogFragment();
-    method public androidx.preference.DialogPreference getPreference();
-    method protected void onBindDialogView(android.view.View);
-    method public void onClick(android.content.DialogInterface, int);
-    method protected android.view.View onCreateDialogView(android.content.Context);
+    method public androidx.preference.DialogPreference! getPreference();
+    method protected void onBindDialogView(android.view.View!);
+    method public void onClick(android.content.DialogInterface!, int);
+    method protected android.view.View! onCreateDialogView(android.content.Context!);
     method public abstract void onDialogClosed(boolean);
-    method protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder);
-    field protected static final java.lang.String ARG_KEY = "key";
+    method protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder!);
+    field protected static final String ARG_KEY = "key";
   }
 
   public abstract class PreferenceDialogFragmentCompat extends androidx.fragment.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
     ctor public PreferenceDialogFragmentCompat();
-    method public androidx.preference.DialogPreference getPreference();
-    method protected void onBindDialogView(android.view.View);
-    method public void onClick(android.content.DialogInterface, int);
-    method protected android.view.View onCreateDialogView(android.content.Context);
+    method public androidx.preference.DialogPreference! getPreference();
+    method protected void onBindDialogView(android.view.View!);
+    method public void onClick(android.content.DialogInterface!, int);
+    method protected android.view.View! onCreateDialogView(android.content.Context!);
     method public abstract void onDialogClosed(boolean);
-    method protected void onPrepareDialogBuilder(androidx.appcompat.app.AlertDialog.Builder);
-    field protected static final java.lang.String ARG_KEY = "key";
+    method protected void onPrepareDialogBuilder(androidx.appcompat.app.AlertDialog.Builder!);
+    field protected static final String ARG_KEY = "key";
   }
 
   public abstract class PreferenceFragment extends android.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
     ctor public PreferenceFragment();
-    method public void addPreferencesFromResource(int);
-    method public androidx.preference.Preference findPreference(java.lang.CharSequence);
-    method public final androidx.recyclerview.widget.RecyclerView getListView();
-    method public androidx.preference.PreferenceManager getPreferenceManager();
-    method public androidx.preference.PreferenceScreen getPreferenceScreen();
-    method protected androidx.recyclerview.widget.RecyclerView.Adapter onCreateAdapter(androidx.preference.PreferenceScreen);
-    method public androidx.recyclerview.widget.RecyclerView.LayoutManager onCreateLayoutManager();
-    method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
-    method public androidx.recyclerview.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
-    method public void onDisplayPreferenceDialog(androidx.preference.Preference);
-    method public void onNavigateToScreen(androidx.preference.PreferenceScreen);
-    method public boolean onPreferenceTreeClick(androidx.preference.Preference);
-    method public void scrollToPreference(java.lang.String);
-    method public void scrollToPreference(androidx.preference.Preference);
-    method public void setDivider(android.graphics.drawable.Drawable);
+    method public void addPreferencesFromResource(@XmlRes int);
+    method public androidx.preference.Preference! findPreference(CharSequence!);
+    method public final androidx.recyclerview.widget.RecyclerView! getListView();
+    method public androidx.preference.PreferenceManager! getPreferenceManager();
+    method public androidx.preference.PreferenceScreen! getPreferenceScreen();
+    method protected androidx.recyclerview.widget.RecyclerView.Adapter! onCreateAdapter(androidx.preference.PreferenceScreen!);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager! onCreateLayoutManager();
+    method public abstract void onCreatePreferences(android.os.Bundle!, String!);
+    method public androidx.recyclerview.widget.RecyclerView! onCreateRecyclerView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
+    method public void onDisplayPreferenceDialog(androidx.preference.Preference!);
+    method public void onNavigateToScreen(androidx.preference.PreferenceScreen!);
+    method public boolean onPreferenceTreeClick(androidx.preference.Preference!);
+    method public void scrollToPreference(String!);
+    method public void scrollToPreference(androidx.preference.Preference!);
+    method public void setDivider(android.graphics.drawable.Drawable!);
     method public void setDividerHeight(int);
-    method public void setPreferenceScreen(androidx.preference.PreferenceScreen);
-    method public void setPreferencesFromResource(int, java.lang.String);
-    field public static final java.lang.String ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+    method public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
+    method public void setPreferencesFromResource(@XmlRes int, String?);
+    field public static final String ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
   }
 
-  public static abstract interface PreferenceFragment.OnPreferenceDisplayDialogCallback {
-    method public abstract boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragment, androidx.preference.Preference);
+  public static interface PreferenceFragment.OnPreferenceDisplayDialogCallback {
+    method public boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragment, androidx.preference.Preference!);
   }
 
-  public static abstract interface PreferenceFragment.OnPreferenceStartFragmentCallback {
-    method public abstract boolean onPreferenceStartFragment(androidx.preference.PreferenceFragment, androidx.preference.Preference);
+  public static interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+    method public boolean onPreferenceStartFragment(androidx.preference.PreferenceFragment!, androidx.preference.Preference!);
   }
 
-  public static abstract interface PreferenceFragment.OnPreferenceStartScreenCallback {
-    method public abstract boolean onPreferenceStartScreen(androidx.preference.PreferenceFragment, androidx.preference.PreferenceScreen);
+  public static interface PreferenceFragment.OnPreferenceStartScreenCallback {
+    method public boolean onPreferenceStartScreen(androidx.preference.PreferenceFragment!, androidx.preference.PreferenceScreen!);
   }
 
   public abstract class PreferenceFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
     ctor public PreferenceFragmentCompat();
-    method public void addPreferencesFromResource(int);
-    method public androidx.preference.Preference findPreference(java.lang.CharSequence);
-    method public final androidx.recyclerview.widget.RecyclerView getListView();
-    method public androidx.preference.PreferenceManager getPreferenceManager();
-    method public androidx.preference.PreferenceScreen getPreferenceScreen();
-    method protected androidx.recyclerview.widget.RecyclerView.Adapter onCreateAdapter(androidx.preference.PreferenceScreen);
-    method public androidx.recyclerview.widget.RecyclerView.LayoutManager onCreateLayoutManager();
-    method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
-    method public androidx.recyclerview.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
-    method public void onDisplayPreferenceDialog(androidx.preference.Preference);
-    method public void onNavigateToScreen(androidx.preference.PreferenceScreen);
-    method public boolean onPreferenceTreeClick(androidx.preference.Preference);
-    method public void scrollToPreference(java.lang.String);
-    method public void scrollToPreference(androidx.preference.Preference);
-    method public void setDivider(android.graphics.drawable.Drawable);
+    method public void addPreferencesFromResource(@XmlRes int);
+    method public androidx.preference.Preference! findPreference(CharSequence!);
+    method public final androidx.recyclerview.widget.RecyclerView! getListView();
+    method public androidx.preference.PreferenceManager! getPreferenceManager();
+    method public androidx.preference.PreferenceScreen! getPreferenceScreen();
+    method protected androidx.recyclerview.widget.RecyclerView.Adapter! onCreateAdapter(androidx.preference.PreferenceScreen!);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager! onCreateLayoutManager();
+    method public abstract void onCreatePreferences(android.os.Bundle!, String!);
+    method public androidx.recyclerview.widget.RecyclerView! onCreateRecyclerView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
+    method public void onDisplayPreferenceDialog(androidx.preference.Preference!);
+    method public void onNavigateToScreen(androidx.preference.PreferenceScreen!);
+    method public boolean onPreferenceTreeClick(androidx.preference.Preference!);
+    method public void scrollToPreference(String!);
+    method public void scrollToPreference(androidx.preference.Preference!);
+    method public void setDivider(android.graphics.drawable.Drawable!);
     method public void setDividerHeight(int);
-    method public void setPreferenceScreen(androidx.preference.PreferenceScreen);
-    method public void setPreferencesFromResource(int, java.lang.String);
-    field public static final java.lang.String ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+    method public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
+    method public void setPreferencesFromResource(@XmlRes int, String?);
+    field public static final String ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
   }
 
-  public static abstract interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
-    method public abstract boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragmentCompat, androidx.preference.Preference);
+  public static interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
+    method public boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragmentCompat, androidx.preference.Preference!);
   }
 
-  public static abstract interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
-    method public abstract boolean onPreferenceStartFragment(androidx.preference.PreferenceFragmentCompat, androidx.preference.Preference);
+  public static interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
+    method public boolean onPreferenceStartFragment(androidx.preference.PreferenceFragmentCompat!, androidx.preference.Preference!);
   }
 
-  public static abstract interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
-    method public abstract boolean onPreferenceStartScreen(androidx.preference.PreferenceFragmentCompat, androidx.preference.PreferenceScreen);
+  public static interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
+    method public boolean onPreferenceStartScreen(androidx.preference.PreferenceFragmentCompat!, androidx.preference.PreferenceScreen!);
   }
 
   public abstract class PreferenceGroup extends androidx.preference.Preference {
-    ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
-    ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet);
-    method public void addItemFromInflater(androidx.preference.Preference);
-    method public boolean addPreference(androidx.preference.Preference);
-    method protected void dispatchRestoreInstanceState(android.os.Bundle);
-    method protected void dispatchSaveInstanceState(android.os.Bundle);
-    method public androidx.preference.Preference findPreference(java.lang.CharSequence);
+    ctor public PreferenceGroup(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public PreferenceGroup(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public PreferenceGroup(android.content.Context!, android.util.AttributeSet!);
+    method public void addItemFromInflater(androidx.preference.Preference!);
+    method public boolean addPreference(androidx.preference.Preference!);
+    method protected void dispatchRestoreInstanceState(android.os.Bundle!);
+    method protected void dispatchSaveInstanceState(android.os.Bundle!);
+    method public androidx.preference.Preference! findPreference(CharSequence!);
     method public int getInitialExpandedChildrenCount();
-    method public androidx.preference.Preference getPreference(int);
+    method public androidx.preference.Preference! getPreference(int);
     method public int getPreferenceCount();
     method protected boolean isOnSameScreenAsChildren();
     method public boolean isOrderingAsAdded();
-    method protected boolean onPrepareAddPreference(androidx.preference.Preference);
+    method protected boolean onPrepareAddPreference(androidx.preference.Preference!);
     method public void removeAll();
-    method public boolean removePreference(androidx.preference.Preference);
+    method public boolean removePreference(androidx.preference.Preference!);
     method public void setInitialExpandedChildrenCount(int);
     method public void setOrderingAsAdded(boolean);
   }
 
-  public static abstract interface PreferenceGroup.PreferencePositionCallback {
-    method public abstract int getPreferenceAdapterPosition(java.lang.String);
-    method public abstract int getPreferenceAdapterPosition(androidx.preference.Preference);
+  public static interface PreferenceGroup.PreferencePositionCallback {
+    method public int getPreferenceAdapterPosition(String!);
+    method public int getPreferenceAdapterPosition(androidx.preference.Preference!);
   }
 
   public class PreferenceManager {
-    method public androidx.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
-    method public androidx.preference.Preference findPreference(java.lang.CharSequence);
-    method public android.content.Context getContext();
-    method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
-    method public androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener getOnDisplayPreferenceDialogListener();
-    method public androidx.preference.PreferenceManager.OnNavigateToScreenListener getOnNavigateToScreenListener();
-    method public androidx.preference.PreferenceManager.OnPreferenceTreeClickListener getOnPreferenceTreeClickListener();
-    method public androidx.preference.PreferenceManager.PreferenceComparisonCallback getPreferenceComparisonCallback();
-    method public androidx.preference.PreferenceDataStore getPreferenceDataStore();
-    method public androidx.preference.PreferenceScreen getPreferenceScreen();
-    method public android.content.SharedPreferences getSharedPreferences();
+    method public androidx.preference.PreferenceScreen! createPreferenceScreen(android.content.Context!);
+    method public androidx.preference.Preference! findPreference(CharSequence!);
+    method public android.content.Context! getContext();
+    method public static android.content.SharedPreferences! getDefaultSharedPreferences(android.content.Context!);
+    method public androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener! getOnDisplayPreferenceDialogListener();
+    method public androidx.preference.PreferenceManager.OnNavigateToScreenListener! getOnNavigateToScreenListener();
+    method public androidx.preference.PreferenceManager.OnPreferenceTreeClickListener! getOnPreferenceTreeClickListener();
+    method public androidx.preference.PreferenceManager.PreferenceComparisonCallback! getPreferenceComparisonCallback();
+    method public androidx.preference.PreferenceDataStore? getPreferenceDataStore();
+    method public androidx.preference.PreferenceScreen! getPreferenceScreen();
+    method public android.content.SharedPreferences! getSharedPreferences();
     method public int getSharedPreferencesMode();
-    method public java.lang.String getSharedPreferencesName();
+    method public String! getSharedPreferencesName();
     method public boolean isStorageDefault();
     method public boolean isStorageDeviceProtected();
-    method public static void setDefaultValues(android.content.Context, int, boolean);
-    method public static void setDefaultValues(android.content.Context, java.lang.String, int, int, boolean);
-    method public void setOnDisplayPreferenceDialogListener(androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener);
-    method public void setOnNavigateToScreenListener(androidx.preference.PreferenceManager.OnNavigateToScreenListener);
-    method public void setOnPreferenceTreeClickListener(androidx.preference.PreferenceManager.OnPreferenceTreeClickListener);
-    method public void setPreferenceComparisonCallback(androidx.preference.PreferenceManager.PreferenceComparisonCallback);
-    method public void setPreferenceDataStore(androidx.preference.PreferenceDataStore);
-    method public boolean setPreferences(androidx.preference.PreferenceScreen);
+    method public static void setDefaultValues(android.content.Context!, int, boolean);
+    method public static void setDefaultValues(android.content.Context!, String!, int, int, boolean);
+    method public void setOnDisplayPreferenceDialogListener(androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener!);
+    method public void setOnNavigateToScreenListener(androidx.preference.PreferenceManager.OnNavigateToScreenListener!);
+    method public void setOnPreferenceTreeClickListener(androidx.preference.PreferenceManager.OnPreferenceTreeClickListener!);
+    method public void setPreferenceComparisonCallback(androidx.preference.PreferenceManager.PreferenceComparisonCallback!);
+    method public void setPreferenceDataStore(androidx.preference.PreferenceDataStore!);
+    method public boolean setPreferences(androidx.preference.PreferenceScreen!);
     method public void setSharedPreferencesMode(int);
-    method public void setSharedPreferencesName(java.lang.String);
+    method public void setSharedPreferencesName(String!);
     method public void setStorageDefault();
     method public void setStorageDeviceProtected();
-    method public void showDialog(androidx.preference.Preference);
-    field public static final java.lang.String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+    method public void showDialog(androidx.preference.Preference!);
+    field public static final String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
   }
 
-  public static abstract interface PreferenceManager.OnDisplayPreferenceDialogListener {
-    method public abstract void onDisplayPreferenceDialog(androidx.preference.Preference);
+  public static interface PreferenceManager.OnDisplayPreferenceDialogListener {
+    method public void onDisplayPreferenceDialog(androidx.preference.Preference!);
   }
 
-  public static abstract interface PreferenceManager.OnNavigateToScreenListener {
-    method public abstract void onNavigateToScreen(androidx.preference.PreferenceScreen);
+  public static interface PreferenceManager.OnNavigateToScreenListener {
+    method public void onNavigateToScreen(androidx.preference.PreferenceScreen!);
   }
 
-  public static abstract interface PreferenceManager.OnPreferenceTreeClickListener {
-    method public abstract boolean onPreferenceTreeClick(androidx.preference.Preference);
+  public static interface PreferenceManager.OnPreferenceTreeClickListener {
+    method public boolean onPreferenceTreeClick(androidx.preference.Preference!);
   }
 
-  public static abstract class PreferenceManager.PreferenceComparisonCallback {
+  public abstract static class PreferenceManager.PreferenceComparisonCallback {
     ctor public PreferenceManager.PreferenceComparisonCallback();
-    method public abstract boolean arePreferenceContentsTheSame(androidx.preference.Preference, androidx.preference.Preference);
-    method public abstract boolean arePreferenceItemsTheSame(androidx.preference.Preference, androidx.preference.Preference);
+    method public abstract boolean arePreferenceContentsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
+    method public abstract boolean arePreferenceItemsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
   }
 
   public static class PreferenceManager.SimplePreferenceComparisonCallback extends androidx.preference.PreferenceManager.PreferenceComparisonCallback {
     ctor public PreferenceManager.SimplePreferenceComparisonCallback();
-    method public boolean arePreferenceContentsTheSame(androidx.preference.Preference, androidx.preference.Preference);
-    method public boolean arePreferenceItemsTheSame(androidx.preference.Preference, androidx.preference.Preference);
+    method public boolean arePreferenceContentsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
+    method public boolean arePreferenceItemsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
   }
 
   public final class PreferenceScreen extends androidx.preference.PreferenceGroup {
@@ -437,7 +438,7 @@
   }
 
   public class PreferenceViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder {
-    method public android.view.View findViewById(int);
+    method public android.view.View! findViewById(@IdRes int);
     method public boolean isDividerAllowedAbove();
     method public boolean isDividerAllowedBelow();
     method public void setDividerAllowedAbove(boolean);
@@ -445,10 +446,10 @@
   }
 
   public class SeekBarPreference extends androidx.preference.Preference {
-    ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet);
-    ctor public SeekBarPreference(android.content.Context);
+    ctor public SeekBarPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public SeekBarPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public SeekBarPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public SeekBarPreference(android.content.Context!);
     method public int getMax();
     method public int getMin();
     method public final int getSeekBarIncrement();
@@ -462,47 +463,47 @@
   }
 
   public class SwitchPreference extends androidx.preference.TwoStatePreference {
-    ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public SwitchPreference(android.content.Context, android.util.AttributeSet);
-    ctor public SwitchPreference(android.content.Context);
-    method public java.lang.CharSequence getSwitchTextOff();
-    method public java.lang.CharSequence getSwitchTextOn();
-    method public void setSwitchTextOff(java.lang.CharSequence);
+    ctor public SwitchPreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public SwitchPreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public SwitchPreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public SwitchPreference(android.content.Context!);
+    method public CharSequence! getSwitchTextOff();
+    method public CharSequence! getSwitchTextOn();
+    method public void setSwitchTextOff(CharSequence!);
     method public void setSwitchTextOff(int);
-    method public void setSwitchTextOn(java.lang.CharSequence);
+    method public void setSwitchTextOn(CharSequence!);
     method public void setSwitchTextOn(int);
   }
 
   public class SwitchPreferenceCompat extends androidx.preference.TwoStatePreference {
-    ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int);
-    ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet);
-    ctor public SwitchPreferenceCompat(android.content.Context);
-    method public java.lang.CharSequence getSwitchTextOff();
-    method public java.lang.CharSequence getSwitchTextOn();
-    method public void setSwitchTextOff(java.lang.CharSequence);
+    ctor public SwitchPreferenceCompat(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public SwitchPreferenceCompat(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public SwitchPreferenceCompat(android.content.Context!, android.util.AttributeSet!);
+    ctor public SwitchPreferenceCompat(android.content.Context!);
+    method public CharSequence! getSwitchTextOff();
+    method public CharSequence! getSwitchTextOn();
+    method public void setSwitchTextOff(CharSequence!);
     method public void setSwitchTextOff(int);
-    method public void setSwitchTextOn(java.lang.CharSequence);
+    method public void setSwitchTextOn(CharSequence!);
     method public void setSwitchTextOn(int);
   }
 
   public abstract class TwoStatePreference extends androidx.preference.Preference {
-    ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
-    ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet);
-    ctor public TwoStatePreference(android.content.Context);
+    ctor public TwoStatePreference(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public TwoStatePreference(android.content.Context!, android.util.AttributeSet!, int);
+    ctor public TwoStatePreference(android.content.Context!, android.util.AttributeSet!);
+    ctor public TwoStatePreference(android.content.Context!);
     method public boolean getDisableDependentsState();
-    method public java.lang.CharSequence getSummaryOff();
-    method public java.lang.CharSequence getSummaryOn();
+    method public CharSequence! getSummaryOff();
+    method public CharSequence! getSummaryOn();
     method public boolean isChecked();
     method public void setChecked(boolean);
     method public void setDisableDependentsState(boolean);
-    method public void setSummaryOff(java.lang.CharSequence);
+    method public void setSummaryOff(CharSequence!);
     method public void setSummaryOff(int);
-    method public void setSummaryOn(java.lang.CharSequence);
+    method public void setSummaryOn(CharSequence!);
     method public void setSummaryOn(int);
-    method protected void syncSummaryView(androidx.preference.PreferenceViewHolder);
+    method protected void syncSummaryView(androidx.preference.PreferenceViewHolder!);
     field protected boolean mChecked;
   }
 
diff --git a/preference/src/main/java/androidx/preference/Preference.java b/preference/src/main/java/androidx/preference/Preference.java
index 753e192..2a1ac4a 100644
--- a/preference/src/main/java/androidx/preference/Preference.java
+++ b/preference/src/main/java/androidx/preference/Preference.java
@@ -675,7 +675,7 @@
      * @param icon The optional icon for this preference
      */
     public void setIcon(Drawable icon) {
-        if ((icon == null && mIcon != null) || (icon != null && mIcon != icon)) {
+        if (mIcon != icon) {
             mIcon = icon;
             mIconResId = 0;
             notifyChanged();
@@ -735,8 +735,7 @@
         if (getSummaryProvider() != null) {
             throw new IllegalStateException("Preference already has a SummaryProvider set.");
         }
-        if ((summary == null && mSummary != null)
-                || (summary != null && !summary.equals(mSummary))) {
+        if (!TextUtils.equals(mSummary, summary)) {
             mSummary = summary;
             notifyChanged();
         }
diff --git a/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java b/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
index 4b72f5e..533fe5e 100644
--- a/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
+++ b/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
@@ -18,7 +18,6 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
-import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
@@ -29,7 +28,6 @@
 import android.os.Message;
 import android.util.Log;
 import android.util.TypedValue;
-import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -133,7 +131,6 @@
     RecyclerView mList;
     private boolean mHavePrefs;
     private boolean mInitDone;
-    private Context mStyledContext;
     private int mLayoutResId = R.layout.preference_list_fragment;
     private Runnable mSelectPreferenceRunnable;
 
@@ -165,9 +162,9 @@
             // Fallback to default theme.
             theme = R.style.PreferenceThemeOverlay;
         }
-        mStyledContext = new ContextThemeWrapper(getActivity(), theme);
+        getActivity().getTheme().applyStyle(theme, false);
 
-        mPreferenceManager = new PreferenceManager(mStyledContext);
+        mPreferenceManager = new PreferenceManager(getContext());
         mPreferenceManager.setOnNavigateToScreenListener(this);
         final Bundle args = getArguments();
         final String rootKey;
@@ -195,7 +192,7 @@
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
 
-        TypedArray a = mStyledContext.obtainStyledAttributes(null,
+        TypedArray a = getContext().obtainStyledAttributes(null,
                 R.styleable.PreferenceFragmentCompat,
                 R.attr.preferenceFragmentCompatStyle,
                 0);
@@ -212,7 +209,7 @@
 
         a.recycle();
 
-        final LayoutInflater themedInflater = inflater.cloneInContext(mStyledContext);
+        final LayoutInflater themedInflater = inflater.cloneInContext(getContext());
 
         final View view = themedInflater.inflate(mLayoutResId, container, false);
 
@@ -377,7 +374,7 @@
     public void addPreferencesFromResource(@XmlRes int preferencesResId) {
         requirePreferenceManager();
 
-        setPreferenceScreen(mPreferenceManager.inflateFromResource(mStyledContext,
+        setPreferenceScreen(mPreferenceManager.inflateFromResource(getContext(),
                 preferencesResId, getPreferenceScreen()));
     }
 
@@ -393,7 +390,7 @@
     public void setPreferencesFromResource(@XmlRes int preferencesResId, @Nullable String key) {
         requirePreferenceManager();
 
-        final PreferenceScreen xmlRoot = mPreferenceManager.inflateFromResource(mStyledContext,
+        final PreferenceScreen xmlRoot = mPreferenceManager.inflateFromResource(getContext(),
                 preferencesResId, null);
 
         final Preference root;
@@ -540,7 +537,7 @@
             Bundle savedInstanceState) {
         // If device detected is Auto, use Auto's custom layout that contains a custom ViewGroup
         // wrapping a RecyclerView
-        if (mStyledContext.getPackageManager().hasSystemFeature(PackageManager
+        if (getContext().getPackageManager().hasSystemFeature(PackageManager
                 .FEATURE_AUTOMOTIVE)) {
             RecyclerView recyclerView = parent.findViewById(R.id.recycler_view);
             if (recyclerView != null) {
@@ -564,7 +561,7 @@
      * @return A new {@link RecyclerView.LayoutManager} instance
      */
     public RecyclerView.LayoutManager onCreateLayoutManager() {
-        return new LinearLayoutManager(getActivity());
+        return new LinearLayoutManager(getContext());
     }
 
     /**
diff --git a/recyclerview/recyclerview/api/1.0.0.txt b/recyclerview/recyclerview/api/1.0.0.txt
index c6576ff..5358a73 100644
--- a/recyclerview/recyclerview/api/1.0.0.txt
+++ b/recyclerview/recyclerview/api/1.0.0.txt
@@ -1,8 +1,9 @@
+// Signature format: 2.0
 package androidx.recyclerview.widget {
 
   public final class AdapterListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
     ctor public AdapterListUpdateCallback(androidx.recyclerview.widget.RecyclerView.Adapter);
-    method public void onChanged(int, int, java.lang.Object);
+    method public void onChanged(int, int, Object!);
     method public void onInserted(int, int);
     method public void onMoved(int, int);
     method public void onRemoved(int, int);
@@ -16,38 +17,38 @@
   public static final class AsyncDifferConfig.Builder<T> {
     ctor public AsyncDifferConfig.Builder(androidx.recyclerview.widget.DiffUtil.ItemCallback<T>);
     method public androidx.recyclerview.widget.AsyncDifferConfig<T> build();
-    method public androidx.recyclerview.widget.AsyncDifferConfig.Builder<T> setBackgroundThreadExecutor(java.util.concurrent.Executor);
+    method public androidx.recyclerview.widget.AsyncDifferConfig.Builder<T> setBackgroundThreadExecutor(java.util.concurrent.Executor!);
   }
 
   public class AsyncListDiffer<T> {
     ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T>);
     ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T>);
     method public java.util.List<T> getCurrentList();
-    method public void submitList(java.util.List<T>);
+    method public void submitList(java.util.List<T>?);
   }
 
   public class AsyncListUtil<T> {
-    ctor public AsyncListUtil(java.lang.Class<T>, int, androidx.recyclerview.widget.AsyncListUtil.DataCallback<T>, androidx.recyclerview.widget.AsyncListUtil.ViewCallback);
-    method public T getItem(int);
+    ctor public AsyncListUtil(Class<T>, int, androidx.recyclerview.widget.AsyncListUtil.DataCallback<T>, androidx.recyclerview.widget.AsyncListUtil.ViewCallback);
+    method public T? getItem(int);
     method public int getItemCount();
     method public void onRangeChanged();
     method public void refresh();
   }
 
-  public static abstract class AsyncListUtil.DataCallback<T> {
+  public abstract static class AsyncListUtil.DataCallback<T> {
     ctor public AsyncListUtil.DataCallback();
-    method public abstract void fillData(T[], int, int);
-    method public int getMaxCachedTiles();
-    method public void recycleData(T[], int);
-    method public abstract int refreshData();
+    method @WorkerThread public abstract void fillData(T[], int, int);
+    method @WorkerThread public int getMaxCachedTiles();
+    method @WorkerThread public void recycleData(T[], int);
+    method @WorkerThread public abstract int refreshData();
   }
 
-  public static abstract class AsyncListUtil.ViewCallback {
+  public abstract static class AsyncListUtil.ViewCallback {
     ctor public AsyncListUtil.ViewCallback();
-    method public void extendRangeInto(int[], int[], int);
-    method public abstract void getItemRangeInto(int[]);
-    method public abstract void onDataRefresh();
-    method public abstract void onItemLoaded(int);
+    method @UiThread public void extendRangeInto(int[], int[], int);
+    method @UiThread public abstract void getItemRangeInto(int[]);
+    method @UiThread public abstract void onDataRefresh();
+    method @UiThread public abstract void onItemLoaded(int);
     field public static final int HINT_SCROLL_ASC = 2; // 0x2
     field public static final int HINT_SCROLL_DESC = 1; // 0x1
     field public static final int HINT_SCROLL_NONE = 0; // 0x0
@@ -56,7 +57,7 @@
   public class BatchingListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
     ctor public BatchingListUpdateCallback(androidx.recyclerview.widget.ListUpdateCallback);
     method public void dispatchLastEvent();
-    method public void onChanged(int, int, java.lang.Object);
+    method public void onChanged(int, int, Object!);
     method public void onInserted(int, int);
     method public void onMoved(int, int);
     method public void onRemoved(int, int);
@@ -64,11 +65,11 @@
 
   public class DefaultItemAnimator extends androidx.recyclerview.widget.SimpleItemAnimator {
     ctor public DefaultItemAnimator();
-    method public boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int, int);
-    method public boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int, int);
-    method public boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+    method public boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+    method public boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
     method public void endAnimations();
     method public boolean isRunning();
     method public void runPendingAnimations();
@@ -79,32 +80,32 @@
     method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback, boolean);
   }
 
-  public static abstract class DiffUtil.Callback {
+  public abstract static class DiffUtil.Callback {
     ctor public DiffUtil.Callback();
     method public abstract boolean areContentsTheSame(int, int);
     method public abstract boolean areItemsTheSame(int, int);
-    method public java.lang.Object getChangePayload(int, int);
+    method public Object? getChangePayload(int, int);
     method public abstract int getNewListSize();
     method public abstract int getOldListSize();
   }
 
   public static class DiffUtil.DiffResult {
-    method public int convertNewPositionToOld(int);
-    method public int convertOldPositionToNew(int);
+    method public int convertNewPositionToOld(@IntRange(from=0) int);
+    method public int convertOldPositionToNew(@IntRange(from=0) int);
     method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
     method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
     field public static final int NO_POSITION = -1; // 0xffffffff
   }
 
-  public static abstract class DiffUtil.ItemCallback<T> {
+  public abstract static class DiffUtil.ItemCallback<T> {
     ctor public DiffUtil.ItemCallback();
     method public abstract boolean areContentsTheSame(T, T);
     method public abstract boolean areItemsTheSame(T, T);
-    method public java.lang.Object getChangePayload(T, T);
+    method public Object? getChangePayload(T, T);
   }
 
   public class DividerItemDecoration extends androidx.recyclerview.widget.RecyclerView.ItemDecoration {
-    ctor public DividerItemDecoration(android.content.Context, int);
+    ctor public DividerItemDecoration(android.content.Context!, int);
     method public void setDrawable(android.graphics.drawable.Drawable);
     method public void setOrientation(int);
     field public static final int HORIZONTAL = 0; // 0x0
@@ -112,13 +113,13 @@
   }
 
   public class GridLayoutManager extends androidx.recyclerview.widget.LinearLayoutManager {
-    ctor public GridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
-    ctor public GridLayoutManager(android.content.Context, int);
-    ctor public GridLayoutManager(android.content.Context, int, int, boolean);
+    ctor public GridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+    ctor public GridLayoutManager(android.content.Context!, int);
+    ctor public GridLayoutManager(android.content.Context!, int, int, boolean);
     method public int getSpanCount();
-    method public androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup getSpanSizeLookup();
+    method public androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup! getSpanSizeLookup();
     method public void setSpanCount(int);
-    method public void setSpanSizeLookup(androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup);
+    method public void setSpanSizeLookup(androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup!);
     field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
   }
 
@@ -128,17 +129,17 @@
   }
 
   public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
-    ctor public GridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
     ctor public GridLayoutManager.LayoutParams(int, int);
-    ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams);
+    ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+    ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+    ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
     method public int getSpanIndex();
     method public int getSpanSize();
     field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
   }
 
-  public static abstract class GridLayoutManager.SpanSizeLookup {
+  public abstract static class GridLayoutManager.SpanSizeLookup {
     ctor public GridLayoutManager.SpanSizeLookup();
     method public int getSpanGroupIndex(int, int);
     method public int getSpanIndex(int, int);
@@ -150,7 +151,7 @@
 
   public class ItemTouchHelper extends androidx.recyclerview.widget.RecyclerView.ItemDecoration implements androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener {
     ctor public ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper.Callback);
-    method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView);
+    method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?);
     method public void onChildViewAttachedToWindow(android.view.View);
     method public void onChildViewDetachedFromWindow(android.view.View);
     method public void startDrag(androidx.recyclerview.widget.RecyclerView.ViewHolder);
@@ -169,10 +170,10 @@
     field public static final int UP = 1; // 0x1
   }
 
-  public static abstract class ItemTouchHelper.Callback {
+  public abstract static class ItemTouchHelper.Callback {
     ctor public ItemTouchHelper.Callback();
     method public boolean canDropOver(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public androidx.recyclerview.widget.RecyclerView.ViewHolder chooseDropTarget(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder>, int, int);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder! chooseDropTarget(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder>, int, int);
     method public void clearView(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
     method public int convertToAbsoluteDirection(int, int);
     method public static int convertToRelativeDirection(int, int);
@@ -190,16 +191,16 @@
     method public static int makeFlag(int, int);
     method public static int makeMovementFlags(int, int);
     method public void onChildDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, float, float, int, boolean);
-    method public void onChildDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+    method public void onChildDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder!, float, float, int, boolean);
     method public abstract boolean onMove(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
     method public void onMoved(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int);
-    method public void onSelectedChanged(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+    method public void onSelectedChanged(androidx.recyclerview.widget.RecyclerView.ViewHolder?, int);
     method public abstract void onSwiped(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
     field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
     field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
   }
 
-  public static abstract class ItemTouchHelper.SimpleCallback extends androidx.recyclerview.widget.ItemTouchHelper.Callback {
+  public abstract static class ItemTouchHelper.SimpleCallback extends androidx.recyclerview.widget.ItemTouchHelper.Callback {
     ctor public ItemTouchHelper.SimpleCallback(int, int);
     method public int getDragDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
     method public int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
@@ -208,28 +209,28 @@
     method public void setDefaultSwipeDirs(int);
   }
 
-  public static abstract interface ItemTouchHelper.ViewDropHandler {
-    method public abstract void prepareForDrop(android.view.View, android.view.View, int, int);
+  public static interface ItemTouchHelper.ViewDropHandler {
+    method public void prepareForDrop(android.view.View, android.view.View, int, int);
   }
 
-  public abstract interface ItemTouchUIUtil {
-    method public abstract void clearView(android.view.View);
-    method public abstract void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, android.view.View, float, float, int, boolean);
-    method public abstract void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, android.view.View, float, float, int, boolean);
-    method public abstract void onSelected(android.view.View);
+  public interface ItemTouchUIUtil {
+    method public void clearView(android.view.View!);
+    method public void onDraw(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+    method public void onDrawOver(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+    method public void onSelected(android.view.View!);
   }
 
   public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
-    ctor public LinearLayoutManager(android.content.Context);
-    ctor public LinearLayoutManager(android.content.Context, int, boolean);
-    ctor public LinearLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
-    method public android.graphics.PointF computeScrollVectorForPosition(int);
+    ctor public LinearLayoutManager(android.content.Context!);
+    ctor public LinearLayoutManager(android.content.Context!, int, boolean);
+    ctor public LinearLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+    method public android.graphics.PointF! computeScrollVectorForPosition(int);
     method public int findFirstCompletelyVisibleItemPosition();
     method public int findFirstVisibleItemPosition();
     method public int findLastCompletelyVisibleItemPosition();
     method public int findLastVisibleItemPosition();
-    method public androidx.recyclerview.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
-    method protected int getExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+    method protected int getExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State!);
     method public int getInitialPrefetchItemCount();
     method public int getOrientation();
     method public boolean getRecycleChildrenOnDetach();
@@ -237,7 +238,7 @@
     method public boolean getStackFromEnd();
     method protected boolean isLayoutRTL();
     method public boolean isSmoothScrollbarEnabled();
-    method public void prepareForDrop(android.view.View, android.view.View, int, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void prepareForDrop(android.view.View, android.view.View, int, int);
     method public void scrollToPositionWithOffset(int, int);
     method public void setInitialPrefetchItemCount(int);
     method public void setOrientation(int);
@@ -259,91 +260,91 @@
   }
 
   public class LinearSmoothScroller extends androidx.recyclerview.widget.RecyclerView.SmoothScroller {
-    ctor public LinearSmoothScroller(android.content.Context);
+    ctor public LinearSmoothScroller(android.content.Context!);
     method public int calculateDtToFit(int, int, int, int, int);
-    method public int calculateDxToMakeVisible(android.view.View, int);
-    method public int calculateDyToMakeVisible(android.view.View, int);
-    method protected float calculateSpeedPerPixel(android.util.DisplayMetrics);
+    method public int calculateDxToMakeVisible(android.view.View!, int);
+    method public int calculateDyToMakeVisible(android.view.View!, int);
+    method protected float calculateSpeedPerPixel(android.util.DisplayMetrics!);
     method protected int calculateTimeForDeceleration(int);
     method protected int calculateTimeForScrolling(int);
     method protected int getHorizontalSnapPreference();
     method protected int getVerticalSnapPreference();
-    method protected void onSeekTargetStep(int, int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+    method protected void onSeekTargetStep(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
     method protected void onStart();
     method protected void onStop();
-    method protected void onTargetFound(android.view.View, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
-    method protected void updateActionForInterimTarget(androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+    method protected void onTargetFound(android.view.View!, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+    method protected void updateActionForInterimTarget(androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
     field public static final int SNAP_TO_ANY = 0; // 0x0
     field public static final int SNAP_TO_END = 1; // 0x1
     field public static final int SNAP_TO_START = -1; // 0xffffffff
-    field protected final android.view.animation.DecelerateInterpolator mDecelerateInterpolator;
+    field protected final android.view.animation.DecelerateInterpolator! mDecelerateInterpolator;
     field protected int mInterimTargetDx;
     field protected int mInterimTargetDy;
-    field protected final android.view.animation.LinearInterpolator mLinearInterpolator;
-    field protected android.graphics.PointF mTargetVector;
+    field protected final android.view.animation.LinearInterpolator! mLinearInterpolator;
+    field protected android.graphics.PointF! mTargetVector;
   }
 
   public class LinearSnapHelper extends androidx.recyclerview.widget.SnapHelper {
     ctor public LinearSnapHelper();
-    method public int[] calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
-    method public android.view.View findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager, int, int);
+    method public int[]! calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+    method public android.view.View! findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
   }
 
-  public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter {
+  public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
     ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T>);
     ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T>);
-    method protected T getItem(int);
+    method protected T! getItem(int);
     method public int getItemCount();
-    method public void submitList(java.util.List<T>);
+    method public void submitList(java.util.List<T>?);
   }
 
-  public abstract interface ListUpdateCallback {
-    method public abstract void onChanged(int, int, java.lang.Object);
-    method public abstract void onInserted(int, int);
-    method public abstract void onMoved(int, int);
-    method public abstract void onRemoved(int, int);
+  public interface ListUpdateCallback {
+    method public void onChanged(int, int, Object?);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
   }
 
   public abstract class OrientationHelper {
-    method public static androidx.recyclerview.widget.OrientationHelper createHorizontalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public static androidx.recyclerview.widget.OrientationHelper createOrientationHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager, int);
-    method public static androidx.recyclerview.widget.OrientationHelper createVerticalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public abstract int getDecoratedEnd(android.view.View);
-    method public abstract int getDecoratedMeasurement(android.view.View);
-    method public abstract int getDecoratedMeasurementInOther(android.view.View);
-    method public abstract int getDecoratedStart(android.view.View);
+    method public static androidx.recyclerview.widget.OrientationHelper! createHorizontalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public static androidx.recyclerview.widget.OrientationHelper! createOrientationHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int);
+    method public static androidx.recyclerview.widget.OrientationHelper! createVerticalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public abstract int getDecoratedEnd(android.view.View!);
+    method public abstract int getDecoratedMeasurement(android.view.View!);
+    method public abstract int getDecoratedMeasurementInOther(android.view.View!);
+    method public abstract int getDecoratedStart(android.view.View!);
     method public abstract int getEnd();
     method public abstract int getEndAfterPadding();
     method public abstract int getEndPadding();
-    method public androidx.recyclerview.widget.RecyclerView.LayoutManager getLayoutManager();
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager! getLayoutManager();
     method public abstract int getMode();
     method public abstract int getModeInOther();
     method public abstract int getStartAfterPadding();
     method public abstract int getTotalSpace();
     method public int getTotalSpaceChange();
-    method public abstract int getTransformedEndWithDecoration(android.view.View);
-    method public abstract int getTransformedStartWithDecoration(android.view.View);
-    method public abstract void offsetChild(android.view.View, int);
+    method public abstract int getTransformedEndWithDecoration(android.view.View!);
+    method public abstract int getTransformedStartWithDecoration(android.view.View!);
+    method public abstract void offsetChild(android.view.View!, int);
     method public abstract void offsetChildren(int);
     method public void onLayoutComplete();
     field public static final int HORIZONTAL = 0; // 0x0
     field public static final int VERTICAL = 1; // 0x1
-    field protected final androidx.recyclerview.widget.RecyclerView.LayoutManager mLayoutManager;
+    field protected final androidx.recyclerview.widget.RecyclerView.LayoutManager! mLayoutManager;
   }
 
   public class PagerSnapHelper extends androidx.recyclerview.widget.SnapHelper {
     ctor public PagerSnapHelper();
-    method public int[] calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
-    method protected androidx.recyclerview.widget.LinearSmoothScroller createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public android.view.View findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager, int, int);
+    method public int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+    method protected androidx.recyclerview.widget.LinearSmoothScroller! createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
   }
 
   public class RecyclerView extends android.view.ViewGroup implements androidx.core.view.NestedScrollingChild2 androidx.core.view.ScrollingView {
     ctor public RecyclerView(android.content.Context);
-    ctor public RecyclerView(android.content.Context, android.util.AttributeSet);
-    ctor public RecyclerView(android.content.Context, android.util.AttributeSet, int);
+    ctor public RecyclerView(android.content.Context, android.util.AttributeSet?);
+    ctor public RecyclerView(android.content.Context, android.util.AttributeSet?, int);
     method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
     method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
     method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
@@ -357,33 +358,33 @@
     method public int computeVerticalScrollExtent();
     method public int computeVerticalScrollOffset();
     method public int computeVerticalScrollRange();
-    method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
-    method public boolean drawChild(android.graphics.Canvas, android.view.View, long);
-    method public android.view.View findChildViewUnder(float, float);
-    method public android.view.View findContainingItemView(android.view.View);
-    method public androidx.recyclerview.widget.RecyclerView.ViewHolder findContainingViewHolder(android.view.View);
-    method public androidx.recyclerview.widget.RecyclerView.ViewHolder findViewHolderForAdapterPosition(int);
-    method public androidx.recyclerview.widget.RecyclerView.ViewHolder findViewHolderForItemId(long);
-    method public androidx.recyclerview.widget.RecyclerView.ViewHolder findViewHolderForLayoutPosition(int);
-    method public deprecated androidx.recyclerview.widget.RecyclerView.ViewHolder findViewHolderForPosition(int);
+    method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
+    method public boolean drawChild(android.graphics.Canvas!, android.view.View!, long);
+    method public android.view.View? findChildViewUnder(float, float);
+    method public android.view.View? findContainingItemView(android.view.View);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findContainingViewHolder(android.view.View);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForAdapterPosition(int);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder! findViewHolderForItemId(long);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForLayoutPosition(int);
+    method @Deprecated public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForPosition(int);
     method public boolean fling(int, int);
-    method public androidx.recyclerview.widget.RecyclerView.Adapter getAdapter();
+    method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
     method public int getChildAdapterPosition(android.view.View);
     method public long getChildItemId(android.view.View);
     method public int getChildLayoutPosition(android.view.View);
-    method public deprecated int getChildPosition(android.view.View);
-    method public androidx.recyclerview.widget.RecyclerView.ViewHolder getChildViewHolder(android.view.View);
-    method public androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate getCompatAccessibilityDelegate();
+    method @Deprecated public int getChildPosition(android.view.View);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder! getChildViewHolder(android.view.View);
+    method public androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate? getCompatAccessibilityDelegate();
     method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
     method public androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory getEdgeEffectFactory();
-    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator getItemAnimator();
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator? getItemAnimator();
     method public androidx.recyclerview.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
     method public int getItemDecorationCount();
-    method public androidx.recyclerview.widget.RecyclerView.LayoutManager getLayoutManager();
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
     method public int getMaxFlingVelocity();
     method public int getMinFlingVelocity();
-    method public androidx.recyclerview.widget.RecyclerView.OnFlingListener getOnFlingListener();
+    method public androidx.recyclerview.widget.RecyclerView.OnFlingListener? getOnFlingListener();
     method public boolean getPreserveFocusAfterLayout();
     method public androidx.recyclerview.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
     method public int getScrollState();
@@ -394,42 +395,42 @@
     method public boolean isAnimating();
     method public boolean isComputingLayout();
     method public boolean isLayoutFrozen();
-    method public void offsetChildrenHorizontal(int);
-    method public void offsetChildrenVertical(int);
+    method public void offsetChildrenHorizontal(@Px int);
+    method public void offsetChildrenVertical(@Px int);
     method public void onChildAttachedToWindow(android.view.View);
     method public void onChildDetachedFromWindow(android.view.View);
-    method public void onDraw(android.graphics.Canvas);
+    method public void onDraw(android.graphics.Canvas!);
     method public void onScrollStateChanged(int);
-    method public void onScrolled(int, int);
+    method public void onScrolled(@Px int, @Px int);
     method public void removeItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
     method public void removeItemDecorationAt(int);
     method public void removeOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
     method public void removeOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
     method public void removeOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
     method public void scrollToPosition(int);
-    method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate);
-    method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter);
-    method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback);
+    method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
+    method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+    method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
     method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
     method public void setHasFixedSize(boolean);
-    method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator);
+    method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
     method public void setItemViewCacheSize(int);
     method public void setLayoutFrozen(boolean);
-    method public void setLayoutManager(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public void setOnFlingListener(androidx.recyclerview.widget.RecyclerView.OnFlingListener);
-    method public deprecated void setOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+    method public void setLayoutManager(androidx.recyclerview.widget.RecyclerView.LayoutManager?);
+    method public void setOnFlingListener(androidx.recyclerview.widget.RecyclerView.OnFlingListener?);
+    method @Deprecated public void setOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener?);
     method public void setPreserveFocusAfterLayout(boolean);
-    method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool);
-    method public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener);
+    method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
+    method public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
     method public void setScrollingTouchSlop(int);
-    method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension);
-    method public void smoothScrollBy(int, int);
-    method public void smoothScrollBy(int, int, android.view.animation.Interpolator);
+    method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
+    method public void smoothScrollBy(@Px int, @Px int);
+    method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?);
     method public void smoothScrollToPosition(int);
     method public boolean startNestedScroll(int, int);
     method public void stopNestedScroll(int);
     method public void stopScroll();
-    method public void swapAdapter(androidx.recyclerview.widget.RecyclerView.Adapter, boolean);
+    method public void swapAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?, boolean);
     field public static final int HORIZONTAL = 0; // 0x0
     field public static final int INVALID_TYPE = -1; // 0xffffffff
     field public static final long NO_ID = -1L; // 0xffffffffffffffffL
@@ -442,7 +443,7 @@
     field public static final int VERTICAL = 1; // 0x1
   }
 
-  public static abstract class RecyclerView.Adapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> {
+  public abstract static class RecyclerView.Adapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> {
     ctor public RecyclerView.Adapter();
     method public final void bindViewHolder(VH, int);
     method public final VH createViewHolder(android.view.ViewGroup, int);
@@ -453,11 +454,11 @@
     method public final boolean hasStableIds();
     method public final void notifyDataSetChanged();
     method public final void notifyItemChanged(int);
-    method public final void notifyItemChanged(int, java.lang.Object);
+    method public final void notifyItemChanged(int, Object?);
     method public final void notifyItemInserted(int);
     method public final void notifyItemMoved(int, int);
     method public final void notifyItemRangeChanged(int, int);
-    method public final void notifyItemRangeChanged(int, int, java.lang.Object);
+    method public final void notifyItemRangeChanged(int, int, Object?);
     method public final void notifyItemRangeInserted(int, int);
     method public final void notifyItemRangeRemoved(int, int);
     method public final void notifyItemRemoved(int);
@@ -475,37 +476,37 @@
     method public void unregisterAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
   }
 
-  public static abstract class RecyclerView.AdapterDataObserver {
+  public abstract static class RecyclerView.AdapterDataObserver {
     ctor public RecyclerView.AdapterDataObserver();
     method public void onChanged();
     method public void onItemRangeChanged(int, int);
-    method public void onItemRangeChanged(int, int, java.lang.Object);
+    method public void onItemRangeChanged(int, int, Object?);
     method public void onItemRangeInserted(int, int);
     method public void onItemRangeMoved(int, int, int);
     method public void onItemRangeRemoved(int, int);
   }
 
-  public static abstract interface RecyclerView.ChildDrawingOrderCallback {
-    method public abstract int onGetChildDrawingOrder(int, int);
+  public static interface RecyclerView.ChildDrawingOrderCallback {
+    method public int onGetChildDrawingOrder(int, int);
   }
 
   public static class RecyclerView.EdgeEffectFactory {
     ctor public RecyclerView.EdgeEffectFactory();
-    method protected android.widget.EdgeEffect createEdgeEffect(androidx.recyclerview.widget.RecyclerView, int);
+    method protected android.widget.EdgeEffect createEdgeEffect(androidx.recyclerview.widget.RecyclerView, @androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.EdgeDirection int);
     field public static final int DIRECTION_BOTTOM = 3; // 0x3
     field public static final int DIRECTION_LEFT = 0; // 0x0
     field public static final int DIRECTION_RIGHT = 2; // 0x2
     field public static final int DIRECTION_TOP = 1; // 0x1
   }
 
-  public static abstract class RecyclerView.EdgeEffectFactory.EdgeDirection implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_LEFT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_TOP, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_RIGHT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_BOTTOM}) public static @interface RecyclerView.EdgeEffectFactory.EdgeDirection {
   }
 
-  public static abstract class RecyclerView.ItemAnimator {
+  public abstract static class RecyclerView.ItemAnimator {
     ctor public RecyclerView.ItemAnimator();
-    method public abstract boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
     method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
-    method public abstract boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
     method public abstract boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
     method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder);
     method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object>);
@@ -519,12 +520,12 @@
     method public long getMoveDuration();
     method public long getRemoveDuration();
     method public abstract boolean isRunning();
-    method public final boolean isRunning(androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener);
+    method public final boolean isRunning(androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener?);
     method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
     method public void onAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
     method public void onAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
     method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, java.util.List<java.lang.Object>);
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int, java.util.List<java.lang.Object>);
     method public abstract void runPendingAnimations();
     method public void setAddDuration(long);
     method public void setChangeDuration(long);
@@ -537,52 +538,52 @@
     field public static final int FLAG_REMOVED = 8; // 0x8
   }
 
-  public static abstract class RecyclerView.ItemAnimator.AdapterChanges implements java.lang.annotation.Annotation {
+  @IntDef(flag=true, value={androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_CHANGED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_REMOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_MOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_INVALIDATED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_APPEARED_IN_PRE_LAYOUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.ItemAnimator.AdapterChanges {
   }
 
-  public static abstract interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
-    method public abstract void onAnimationsFinished();
+  public static interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+    method public void onAnimationsFinished();
   }
 
   public static class RecyclerView.ItemAnimator.ItemHolderInfo {
     ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
     method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int);
     field public int bottom;
-    field public int changeFlags;
+    field @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges public int changeFlags;
     field public int left;
     field public int right;
     field public int top;
   }
 
-  public static abstract class RecyclerView.ItemDecoration {
+  public abstract static class RecyclerView.ItemDecoration {
     ctor public RecyclerView.ItemDecoration();
-    method public deprecated void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
+    method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
     method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
     method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
-    method public deprecated void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+    method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
     method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
-    method public deprecated void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+    method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
   }
 
-  public static abstract class RecyclerView.LayoutManager {
+  public abstract static class RecyclerView.LayoutManager {
     ctor public RecyclerView.LayoutManager();
-    method public void addDisappearingView(android.view.View);
-    method public void addDisappearingView(android.view.View, int);
-    method public void addView(android.view.View);
-    method public void addView(android.view.View, int);
-    method public void assertInLayoutOrScroll(java.lang.String);
-    method public void assertNotInLayoutOrScroll(java.lang.String);
-    method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams);
+    method public void addDisappearingView(android.view.View!);
+    method public void addDisappearingView(android.view.View!, int);
+    method public void addView(android.view.View!);
+    method public void addView(android.view.View!, int);
+    method public void assertInLayoutOrScroll(String!);
+    method public void assertNotInLayoutOrScroll(String!);
+    method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
     method public void attachView(android.view.View, int);
     method public void attachView(android.view.View);
     method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
     method public boolean canScrollHorizontally();
     method public boolean canScrollVertically();
-    method public boolean checkLayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams);
+    method public boolean checkLayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
     method public static int chooseSize(int, int, int);
-    method public void collectAdjacentPrefetchPositions(int, int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
-    method public void collectInitialPrefetchPositions(int, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+    method public void collectAdjacentPrefetchPositions(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+    method public void collectInitialPrefetchPositions(int, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
     method public int computeHorizontalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
     method public int computeHorizontalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
     method public int computeHorizontalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
@@ -594,17 +595,17 @@
     method public void detachAndScrapViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
     method public void detachView(android.view.View);
     method public void detachViewAt(int);
-    method public void endAnimation(android.view.View);
-    method public android.view.View findContainingItemView(android.view.View);
-    method public android.view.View findViewByPosition(int);
-    method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
-    method public androidx.recyclerview.widget.RecyclerView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public androidx.recyclerview.widget.RecyclerView.LayoutParams generateLayoutParams(android.content.Context, android.util.AttributeSet);
+    method public void endAnimation(android.view.View!);
+    method public android.view.View? findContainingItemView(android.view.View);
+    method public android.view.View? findViewByPosition(int);
+    method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.content.Context!, android.util.AttributeSet!);
     method public int getBaseline();
     method public int getBottomDecorationHeight(android.view.View);
-    method public android.view.View getChildAt(int);
+    method public android.view.View? getChildAt(int);
     method public int getChildCount();
-    method public static deprecated int getChildMeasureSpec(int, int, int, boolean);
+    method @Deprecated public static int getChildMeasureSpec(int, int, int, boolean);
     method public static int getChildMeasureSpec(int, int, int, int, boolean);
     method public boolean getClipToPadding();
     method public int getColumnCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
@@ -615,29 +616,29 @@
     method public int getDecoratedMeasuredWidth(android.view.View);
     method public int getDecoratedRight(android.view.View);
     method public int getDecoratedTop(android.view.View);
-    method public android.view.View getFocusedChild();
-    method public int getHeight();
+    method public android.view.View? getFocusedChild();
+    method @Px public int getHeight();
     method public int getHeightMode();
     method public int getItemCount();
     method public int getItemViewType(android.view.View);
     method public int getLayoutDirection();
     method public int getLeftDecorationWidth(android.view.View);
-    method public int getMinimumHeight();
-    method public int getMinimumWidth();
-    method public int getPaddingBottom();
-    method public int getPaddingEnd();
-    method public int getPaddingLeft();
-    method public int getPaddingRight();
-    method public int getPaddingStart();
-    method public int getPaddingTop();
+    method @Px public int getMinimumHeight();
+    method @Px public int getMinimumWidth();
+    method @Px public int getPaddingBottom();
+    method @Px public int getPaddingEnd();
+    method @Px public int getPaddingLeft();
+    method @Px public int getPaddingRight();
+    method @Px public int getPaddingStart();
+    method @Px public int getPaddingTop();
     method public int getPosition(android.view.View);
-    method public static androidx.recyclerview.widget.RecyclerView.LayoutManager.Properties getProperties(android.content.Context, android.util.AttributeSet, int, int);
+    method public static androidx.recyclerview.widget.RecyclerView.LayoutManager.Properties! getProperties(android.content.Context, android.util.AttributeSet?, int, int);
     method public int getRightDecorationWidth(android.view.View);
     method public int getRowCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
     method public int getSelectionModeForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
     method public int getTopDecorationHeight(android.view.View);
     method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
-    method public int getWidth();
+    method @Px public int getWidth();
     method public int getWidthMode();
     method public boolean hasFocus();
     method public void ignoreView(android.view.View);
@@ -654,64 +655,64 @@
     method public void measureChild(android.view.View, int, int);
     method public void measureChildWithMargins(android.view.View, int, int);
     method public void moveView(int, int);
-    method public void offsetChildrenHorizontal(int);
-    method public void offsetChildrenVertical(int);
-    method public void onAdapterChanged(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.RecyclerView.Adapter);
+    method public void offsetChildrenHorizontal(@Px int);
+    method public void offsetChildrenVertical(@Px int);
+    method public void onAdapterChanged(androidx.recyclerview.widget.RecyclerView.Adapter?, androidx.recyclerview.widget.RecyclerView.Adapter?);
     method public boolean onAddFocusables(androidx.recyclerview.widget.RecyclerView, java.util.ArrayList<android.view.View>, int, int);
-    method public void onAttachedToWindow(androidx.recyclerview.widget.RecyclerView);
-    method public deprecated void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView);
-    method public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.Recycler);
-    method public android.view.View onFocusSearchFailed(android.view.View, int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+    method @CallSuper public void onAttachedToWindow(androidx.recyclerview.widget.RecyclerView!);
+    method @Deprecated public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!);
+    method @CallSuper public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.Recycler!);
+    method public android.view.View? onFocusSearchFailed(android.view.View, int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
     method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
     method public void onInitializeAccessibilityEvent(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
     method public void onInitializeAccessibilityNodeInfo(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
     method public void onInitializeAccessibilityNodeInfoForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method public android.view.View onInterceptFocusSearch(android.view.View, int);
+    method public android.view.View? onInterceptFocusSearch(android.view.View, int);
     method public void onItemsAdded(androidx.recyclerview.widget.RecyclerView, int, int);
     method public void onItemsChanged(androidx.recyclerview.widget.RecyclerView);
     method public void onItemsMoved(androidx.recyclerview.widget.RecyclerView, int, int, int);
     method public void onItemsRemoved(androidx.recyclerview.widget.RecyclerView, int, int);
     method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int);
-    method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int, java.lang.Object);
-    method public void onLayoutChildren(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
-    method public void onLayoutCompleted(androidx.recyclerview.widget.RecyclerView.State);
+    method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int, Object?);
+    method public void onLayoutChildren(androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+    method public void onLayoutCompleted(androidx.recyclerview.widget.RecyclerView.State!);
     method public void onMeasure(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, int);
-    method public deprecated boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, android.view.View, android.view.View);
-    method public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State, android.view.View, android.view.View);
-    method public void onRestoreInstanceState(android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState();
+    method @Deprecated public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, android.view.View, android.view.View?);
+    method public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State, android.view.View, android.view.View?);
+    method public void onRestoreInstanceState(android.os.Parcelable!);
+    method public android.os.Parcelable? onSaveInstanceState();
     method public void onScrollStateChanged(int);
-    method public boolean performAccessibilityAction(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, android.os.Bundle);
-    method public boolean performAccessibilityActionForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, int, android.os.Bundle);
-    method public void postOnAnimation(java.lang.Runnable);
+    method public boolean performAccessibilityAction(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, android.os.Bundle?);
+    method public boolean performAccessibilityActionForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, int, android.os.Bundle?);
+    method public void postOnAnimation(Runnable!);
     method public void removeAllViews();
     method public void removeAndRecycleAllViews(androidx.recyclerview.widget.RecyclerView.Recycler);
     method public void removeAndRecycleView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
     method public void removeAndRecycleViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
-    method public boolean removeCallbacks(java.lang.Runnable);
+    method public boolean removeCallbacks(Runnable!);
     method public void removeDetachedView(android.view.View);
-    method public void removeView(android.view.View);
+    method public void removeView(android.view.View!);
     method public void removeViewAt(int);
     method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
     method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
     method public void requestLayout();
     method public void requestSimpleAnimationsInNextLayout();
-    method public int scrollHorizontallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+    method public int scrollHorizontallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
     method public void scrollToPosition(int);
-    method public int scrollVerticallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
-    method public deprecated void setAutoMeasureEnabled(boolean);
+    method public int scrollVerticallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+    method @Deprecated public void setAutoMeasureEnabled(boolean);
     method public final void setItemPrefetchEnabled(boolean);
-    method public void setMeasuredDimension(android.graphics.Rect, int, int);
+    method public void setMeasuredDimension(android.graphics.Rect!, int, int);
     method public void setMeasuredDimension(int, int);
     method public void setMeasurementCacheEnabled(boolean);
-    method public void smoothScrollToPosition(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State, int);
-    method public void startSmoothScroll(androidx.recyclerview.widget.RecyclerView.SmoothScroller);
+    method public void smoothScrollToPosition(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.State!, int);
+    method public void startSmoothScroll(androidx.recyclerview.widget.RecyclerView.SmoothScroller!);
     method public void stopIgnoringView(android.view.View);
     method public boolean supportsPredictiveItemAnimations();
   }
 
-  public static abstract interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
-    method public abstract void addPosition(int, int);
+  public static interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+    method public void addPosition(int, int);
   }
 
   public static class RecyclerView.LayoutManager.Properties {
@@ -723,37 +724,37 @@
   }
 
   public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
-    ctor public RecyclerView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public RecyclerView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
     ctor public RecyclerView.LayoutParams(int, int);
-    ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams);
+    ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+    ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+    ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
     method public int getViewAdapterPosition();
     method public int getViewLayoutPosition();
-    method public deprecated int getViewPosition();
+    method @Deprecated public int getViewPosition();
     method public boolean isItemChanged();
     method public boolean isItemRemoved();
     method public boolean isViewInvalid();
     method public boolean viewNeedsUpdate();
   }
 
-  public static abstract interface RecyclerView.OnChildAttachStateChangeListener {
-    method public abstract void onChildViewAttachedToWindow(android.view.View);
-    method public abstract void onChildViewDetachedFromWindow(android.view.View);
+  public static interface RecyclerView.OnChildAttachStateChangeListener {
+    method public void onChildViewAttachedToWindow(android.view.View);
+    method public void onChildViewDetachedFromWindow(android.view.View);
   }
 
-  public static abstract class RecyclerView.OnFlingListener {
+  public abstract static class RecyclerView.OnFlingListener {
     ctor public RecyclerView.OnFlingListener();
     method public abstract boolean onFling(int, int);
   }
 
-  public static abstract interface RecyclerView.OnItemTouchListener {
-    method public abstract boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
-    method public abstract void onRequestDisallowInterceptTouchEvent(boolean);
-    method public abstract void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+  public static interface RecyclerView.OnItemTouchListener {
+    method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+    method public void onRequestDisallowInterceptTouchEvent(boolean);
+    method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
   }
 
-  public static abstract class RecyclerView.OnScrollListener {
+  public abstract static class RecyclerView.OnScrollListener {
     ctor public RecyclerView.OnScrollListener();
     method public void onScrollStateChanged(androidx.recyclerview.widget.RecyclerView, int);
     method public void onScrolled(androidx.recyclerview.widget.RecyclerView, int, int);
@@ -762,9 +763,9 @@
   public static class RecyclerView.RecycledViewPool {
     ctor public RecyclerView.RecycledViewPool();
     method public void clear();
-    method public androidx.recyclerview.widget.RecyclerView.ViewHolder getRecycledView(int);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder? getRecycledView(int);
     method public int getRecycledViewCount(int);
-    method public void putRecycledView(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public void putRecycledView(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
     method public void setMaxRecycledViews(int, int);
   }
 
@@ -779,8 +780,8 @@
     method public void setViewCacheSize(int);
   }
 
-  public static abstract interface RecyclerView.RecyclerListener {
-    method public abstract void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+  public static interface RecyclerView.RecyclerListener {
+    method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
   }
 
   public static class RecyclerView.SimpleOnItemTouchListener implements androidx.recyclerview.widget.RecyclerView.OnItemTouchListener {
@@ -790,20 +791,20 @@
     method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
   }
 
-  public static abstract class RecyclerView.SmoothScroller {
+  public abstract static class RecyclerView.SmoothScroller {
     ctor public RecyclerView.SmoothScroller();
-    method public android.graphics.PointF computeScrollVectorForPosition(int);
-    method public android.view.View findViewByPosition(int);
+    method public android.graphics.PointF? computeScrollVectorForPosition(int);
+    method public android.view.View! findViewByPosition(int);
     method public int getChildCount();
-    method public int getChildPosition(android.view.View);
-    method public androidx.recyclerview.widget.RecyclerView.LayoutManager getLayoutManager();
+    method public int getChildPosition(android.view.View!);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
     method public int getTargetPosition();
-    method public deprecated void instantScrollToPosition(int);
+    method @Deprecated public void instantScrollToPosition(int);
     method public boolean isPendingInitialRun();
     method public boolean isRunning();
     method protected void normalize(android.graphics.PointF);
-    method protected void onChildAttachedToWindow(android.view.View);
-    method protected abstract void onSeekTargetStep(int, int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+    method protected void onChildAttachedToWindow(android.view.View!);
+    method protected abstract void onSeekTargetStep(@Px int, @Px int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
     method protected abstract void onStart();
     method protected abstract void onStop();
     method protected abstract void onTargetFound(android.view.View, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
@@ -812,30 +813,30 @@
   }
 
   public static class RecyclerView.SmoothScroller.Action {
-    ctor public RecyclerView.SmoothScroller.Action(int, int);
-    ctor public RecyclerView.SmoothScroller.Action(int, int, int);
-    ctor public RecyclerView.SmoothScroller.Action(int, int, int, android.view.animation.Interpolator);
+    ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int);
+    ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int);
+    ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int, android.view.animation.Interpolator?);
     method public int getDuration();
-    method public int getDx();
-    method public int getDy();
-    method public android.view.animation.Interpolator getInterpolator();
+    method @Px public int getDx();
+    method @Px public int getDy();
+    method public android.view.animation.Interpolator? getInterpolator();
     method public void jumpTo(int);
     method public void setDuration(int);
-    method public void setDx(int);
-    method public void setDy(int);
-    method public void setInterpolator(android.view.animation.Interpolator);
-    method public void update(int, int, int, android.view.animation.Interpolator);
+    method public void setDx(@Px int);
+    method public void setDy(@Px int);
+    method public void setInterpolator(android.view.animation.Interpolator?);
+    method public void update(@Px int, @Px int, int, android.view.animation.Interpolator?);
     field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
   }
 
-  public static abstract interface RecyclerView.SmoothScroller.ScrollVectorProvider {
-    method public abstract android.graphics.PointF computeScrollVectorForPosition(int);
+  public static interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+    method public android.graphics.PointF? computeScrollVectorForPosition(int);
   }
 
   public static class RecyclerView.State {
     ctor public RecyclerView.State();
     method public boolean didStructureChange();
-    method public <T> T get(int);
+    method public <T> T! get(int);
     method public int getItemCount();
     method public int getRemainingScrollHorizontal();
     method public int getRemainingScrollVertical();
@@ -843,25 +844,25 @@
     method public boolean hasTargetScrollPosition();
     method public boolean isMeasuring();
     method public boolean isPreLayout();
-    method public void put(int, java.lang.Object);
+    method public void put(int, Object!);
     method public void remove(int);
     method public boolean willRunPredictiveAnimations();
     method public boolean willRunSimpleAnimations();
   }
 
-  public static abstract class RecyclerView.ViewCacheExtension {
+  public abstract static class RecyclerView.ViewCacheExtension {
     ctor public RecyclerView.ViewCacheExtension();
-    method public abstract android.view.View getViewForPositionAndType(androidx.recyclerview.widget.RecyclerView.Recycler, int, int);
+    method public abstract android.view.View? getViewForPositionAndType(androidx.recyclerview.widget.RecyclerView.Recycler, int, int);
   }
 
-  public static abstract class RecyclerView.ViewHolder {
+  public abstract static class RecyclerView.ViewHolder {
     ctor public RecyclerView.ViewHolder(android.view.View);
     method public final int getAdapterPosition();
     method public final long getItemId();
     method public final int getItemViewType();
     method public final int getLayoutPosition();
     method public final int getOldPosition();
-    method public final deprecated int getPosition();
+    method @Deprecated public final int getPosition();
     method public final boolean isRecyclable();
     method public final void setIsRecyclable(boolean);
     field public final android.view.View itemView;
@@ -878,74 +879,74 @@
 
   public abstract class SimpleItemAnimator extends androidx.recyclerview.widget.RecyclerView.ItemAnimator {
     ctor public SimpleItemAnimator();
-    method public abstract boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
     method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
-    method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int, int);
-    method public boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
-    method public abstract boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int, int);
+    method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+    method public boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+    method public abstract boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
     method public boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
-    method public abstract boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public final void dispatchAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public final void dispatchAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public final void dispatchChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder, boolean);
-    method public final void dispatchChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder, boolean);
-    method public final void dispatchMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public final void dispatchMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public final void dispatchRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public final void dispatchRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public abstract boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public final void dispatchChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public final void dispatchMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
     method public boolean getSupportsChangeAnimations();
-    method public void onAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public void onAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public void onChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder, boolean);
-    method public void onChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder, boolean);
-    method public void onMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public void onMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public void onRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
-    method public void onRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public void onAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public void onChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public void onMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
     method public void setSupportsChangeAnimations(boolean);
   }
 
   public abstract class SnapHelper extends androidx.recyclerview.widget.RecyclerView.OnFlingListener {
     ctor public SnapHelper();
-    method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView) throws java.lang.IllegalStateException;
-    method public abstract int[] calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
-    method public int[] calculateScrollDistance(int, int);
-    method protected androidx.recyclerview.widget.RecyclerView.SmoothScroller createScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method protected deprecated androidx.recyclerview.widget.LinearSmoothScroller createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public abstract android.view.View findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager);
-    method public abstract int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager, int, int);
+    method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?) throws java.lang.IllegalStateException;
+    method public abstract int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+    method public int[]! calculateScrollDistance(int, int);
+    method protected androidx.recyclerview.widget.RecyclerView.SmoothScroller? createScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method @Deprecated protected androidx.recyclerview.widget.LinearSmoothScroller? createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public abstract android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public abstract int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
     method public boolean onFling(int, int);
   }
 
   public class SortedList<T> {
-    ctor public SortedList(java.lang.Class<T>, androidx.recyclerview.widget.SortedList.Callback<T>);
-    ctor public SortedList(java.lang.Class<T>, androidx.recyclerview.widget.SortedList.Callback<T>, int);
-    method public int add(T);
+    ctor public SortedList(Class<T>, androidx.recyclerview.widget.SortedList.Callback<T>);
+    ctor public SortedList(Class<T>, androidx.recyclerview.widget.SortedList.Callback<T>, int);
+    method public int add(T!);
     method public void addAll(T[], boolean);
     method public void addAll(T...);
     method public void addAll(java.util.Collection<T>);
     method public void beginBatchedUpdates();
     method public void clear();
     method public void endBatchedUpdates();
-    method public T get(int) throws java.lang.IndexOutOfBoundsException;
-    method public int indexOf(T);
+    method public T! get(int) throws java.lang.IndexOutOfBoundsException;
+    method public int indexOf(T!);
     method public void recalculatePositionOfItemAt(int);
-    method public boolean remove(T);
-    method public T removeItemAt(int);
+    method public boolean remove(T!);
+    method public T! removeItemAt(int);
     method public void replaceAll(T[], boolean);
     method public void replaceAll(T...);
     method public void replaceAll(java.util.Collection<T>);
     method public int size();
-    method public void updateItemAt(int, T);
+    method public void updateItemAt(int, T!);
     field public static final int INVALID_POSITION = -1; // 0xffffffff
   }
 
-  public static class SortedList.BatchedCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback {
-    ctor public SortedList.BatchedCallback(androidx.recyclerview.widget.SortedList.Callback<T2>);
-    method public boolean areContentsTheSame(T2, T2);
-    method public boolean areItemsTheSame(T2, T2);
-    method public int compare(T2, T2);
+  public static class SortedList.BatchedCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+    ctor public SortedList.BatchedCallback(androidx.recyclerview.widget.SortedList.Callback<T2>!);
+    method public boolean areContentsTheSame(T2!, T2!);
+    method public boolean areItemsTheSame(T2!, T2!);
+    method public int compare(T2!, T2!);
     method public void dispatchLastEvent();
     method public void onChanged(int, int);
     method public void onInserted(int, int);
@@ -953,18 +954,18 @@
     method public void onRemoved(int, int);
   }
 
-  public static abstract class SortedList.Callback<T2> implements java.util.Comparator androidx.recyclerview.widget.ListUpdateCallback {
+  public abstract static class SortedList.Callback<T2> implements java.util.Comparator<T2> androidx.recyclerview.widget.ListUpdateCallback {
     ctor public SortedList.Callback();
-    method public abstract boolean areContentsTheSame(T2, T2);
-    method public abstract boolean areItemsTheSame(T2, T2);
-    method public abstract int compare(T2, T2);
-    method public java.lang.Object getChangePayload(T2, T2);
+    method public abstract boolean areContentsTheSame(T2!, T2!);
+    method public abstract boolean areItemsTheSame(T2!, T2!);
+    method public abstract int compare(T2!, T2!);
+    method public Object? getChangePayload(T2!, T2!);
     method public abstract void onChanged(int, int);
-    method public void onChanged(int, int, java.lang.Object);
+    method public void onChanged(int, int, Object!);
   }
 
-  public abstract class SortedListAdapterCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback {
-    ctor public SortedListAdapterCallback(androidx.recyclerview.widget.RecyclerView.Adapter);
+  public abstract class SortedListAdapterCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+    ctor public SortedListAdapterCallback(androidx.recyclerview.widget.RecyclerView.Adapter!);
     method public void onChanged(int, int);
     method public void onInserted(int, int);
     method public void onMoved(int, int);
@@ -972,14 +973,14 @@
   }
 
   public class StaggeredGridLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
-    ctor public StaggeredGridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public StaggeredGridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
     ctor public StaggeredGridLayoutManager(int, int);
-    method public android.graphics.PointF computeScrollVectorForPosition(int);
-    method public int[] findFirstCompletelyVisibleItemPositions(int[]);
-    method public int[] findFirstVisibleItemPositions(int[]);
-    method public int[] findLastCompletelyVisibleItemPositions(int[]);
-    method public int[] findLastVisibleItemPositions(int[]);
-    method public androidx.recyclerview.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+    method public android.graphics.PointF! computeScrollVectorForPosition(int);
+    method public int[]! findFirstCompletelyVisibleItemPositions(int[]!);
+    method public int[]! findFirstVisibleItemPositions(int[]!);
+    method public int[]! findLastCompletelyVisibleItemPositions(int[]!);
+    method public int[]! findLastVisibleItemPositions(int[]!);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
     method public int getGapStrategy();
     method public int getOrientation();
     method public boolean getReverseLayout();
@@ -990,7 +991,7 @@
     method public void setOrientation(int);
     method public void setReverseLayout(boolean);
     method public void setSpanCount(int);
-    field public static final deprecated int GAP_HANDLING_LAZY = 1; // 0x1
+    field @Deprecated public static final int GAP_HANDLING_LAZY = 1; // 0x1
     field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
     field public static final int GAP_HANDLING_NONE = 0; // 0x0
     field public static final int HORIZONTAL = 0; // 0x0
@@ -998,11 +999,11 @@
   }
 
   public static class StaggeredGridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
-    ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
     ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
-    ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams);
+    ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+    ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+    ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
     method public final int getSpanIndex();
     method public boolean isFullSpan();
     method public void setFullSpan(boolean);
diff --git a/recyclerview/selection/api/1.0.0.txt b/recyclerview/selection/api/1.0.0.txt
index 72e22ef..37ddfcb 100644
--- a/recyclerview/selection/api/1.0.0.txt
+++ b/recyclerview/selection/api/1.0.0.txt
@@ -1,8 +1,9 @@
+// Signature format: 2.0
 package androidx.recyclerview.selection {
 
   public abstract class BandPredicate {
     ctor public BandPredicate();
-    method public abstract boolean canInitiate(android.view.MotionEvent);
+    method public abstract boolean canInitiate(android.view.MotionEvent!);
   }
 
   public static final class BandPredicate.EmptyArea extends androidx.recyclerview.selection.BandPredicate {
@@ -25,30 +26,30 @@
 
   public abstract class ItemDetailsLookup<K> {
     ctor public ItemDetailsLookup();
-    method public abstract androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K> getItemDetails(android.view.MotionEvent);
+    method public abstract androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>? getItemDetails(android.view.MotionEvent);
   }
 
-  public static abstract class ItemDetailsLookup.ItemDetails<K> {
+  public abstract static class ItemDetailsLookup.ItemDetails<K> {
     ctor public ItemDetailsLookup.ItemDetails();
     method public abstract int getPosition();
-    method public abstract K getSelectionKey();
+    method public abstract K? getSelectionKey();
     method public boolean hasSelectionKey();
     method public boolean inDragRegion(android.view.MotionEvent);
     method public boolean inSelectionHotspot(android.view.MotionEvent);
   }
 
   public abstract class ItemKeyProvider<K> {
-    ctor protected ItemKeyProvider(int);
-    method public abstract K getKey(int);
+    ctor protected ItemKeyProvider(@androidx.recyclerview.selection.ItemKeyProvider.Scope int);
+    method public abstract K? getKey(int);
     method public abstract int getPosition(K);
     field public static final int SCOPE_CACHED = 1; // 0x1
     field public static final int SCOPE_MAPPED = 0; // 0x0
   }
 
-  public static abstract class ItemKeyProvider.Scope implements java.lang.annotation.Annotation {
+  @IntDef({androidx.recyclerview.selection.ItemKeyProvider.SCOPE_MAPPED, androidx.recyclerview.selection.ItemKeyProvider.SCOPE_CACHED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ItemKeyProvider.Scope {
   }
 
-  public final class MutableSelection<K> extends androidx.recyclerview.selection.Selection {
+  public final class MutableSelection<K> extends androidx.recyclerview.selection.Selection<K> {
     ctor public MutableSelection();
     method public boolean add(K);
     method public void clear();
@@ -56,74 +57,74 @@
     method public boolean remove(K);
   }
 
-  public abstract interface OnContextClickListener {
-    method public abstract boolean onContextClick(android.view.MotionEvent);
+  public interface OnContextClickListener {
+    method public boolean onContextClick(android.view.MotionEvent);
   }
 
-  public abstract interface OnDragInitiatedListener {
-    method public abstract boolean onDragInitiated(android.view.MotionEvent);
+  public interface OnDragInitiatedListener {
+    method public boolean onDragInitiated(android.view.MotionEvent);
   }
 
-  public abstract interface OnItemActivatedListener<K> {
-    method public abstract boolean onItemActivated(androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>, android.view.MotionEvent);
+  public interface OnItemActivatedListener<K> {
+    method public boolean onItemActivated(androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>, android.view.MotionEvent);
   }
 
   public final class OperationMonitor {
     ctor public OperationMonitor();
     method public void addListener(androidx.recyclerview.selection.OperationMonitor.OnChangeListener);
-    method public synchronized boolean isStarted();
+    method public boolean isStarted();
     method public void removeListener(androidx.recyclerview.selection.OperationMonitor.OnChangeListener);
   }
 
-  public static abstract interface OperationMonitor.OnChangeListener {
-    method public abstract void onChanged();
+  public static interface OperationMonitor.OnChangeListener {
+    method public void onChanged();
   }
 
-  public class Selection<K> implements java.lang.Iterable {
-    method public boolean contains(K);
+  public class Selection<K> implements java.lang.Iterable<K> {
+    method public boolean contains(K?);
     method public boolean isEmpty();
-    method public java.util.Iterator<K> iterator();
+    method public java.util.Iterator<K>! iterator();
     method public int size();
   }
 
   public final class SelectionPredicates {
-    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K> createSelectAnything();
-    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K> createSelectSingleAnything();
+    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>! createSelectAnything();
+    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>! createSelectSingleAnything();
   }
 
   public abstract class SelectionTracker<K> {
     ctor public SelectionTracker();
-    method public abstract void addObserver(androidx.recyclerview.selection.SelectionTracker.SelectionObserver);
+    method public abstract void addObserver(androidx.recyclerview.selection.SelectionTracker.SelectionObserver!);
     method public abstract boolean clearSelection();
     method public abstract void copySelection(androidx.recyclerview.selection.MutableSelection<K>);
     method public abstract boolean deselect(K);
-    method public abstract androidx.recyclerview.selection.Selection<K> getSelection();
+    method public abstract androidx.recyclerview.selection.Selection<K>! getSelection();
     method public abstract boolean hasSelection();
-    method public abstract boolean isSelected(K);
-    method public abstract void onRestoreInstanceState(android.os.Bundle);
+    method public abstract boolean isSelected(K?);
+    method public abstract void onRestoreInstanceState(android.os.Bundle?);
     method public abstract void onSaveInstanceState(android.os.Bundle);
     method protected abstract void restoreSelection(androidx.recyclerview.selection.Selection<K>);
     method public abstract boolean select(K);
-    method public abstract boolean setItemsSelected(java.lang.Iterable<K>, boolean);
-    field public static final java.lang.String SELECTION_CHANGED_MARKER = "Selection-Changed";
+    method public abstract boolean setItemsSelected(Iterable<K>, boolean);
+    field public static final String SELECTION_CHANGED_MARKER = "Selection-Changed";
   }
 
   public static final class SelectionTracker.Builder<K> {
-    ctor public SelectionTracker.Builder(java.lang.String, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.selection.ItemKeyProvider<K>, androidx.recyclerview.selection.ItemDetailsLookup<K>, androidx.recyclerview.selection.StorageStrategy<K>);
-    method public androidx.recyclerview.selection.SelectionTracker<K> build();
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withBandOverlay(int);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withBandPredicate(androidx.recyclerview.selection.BandPredicate);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withFocusDelegate(androidx.recyclerview.selection.FocusDelegate<K>);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withGestureTooltypes(int...);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOnContextClickListener(androidx.recyclerview.selection.OnContextClickListener);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOnDragInitiatedListener(androidx.recyclerview.selection.OnDragInitiatedListener);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOnItemActivatedListener(androidx.recyclerview.selection.OnItemActivatedListener<K>);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOperationMonitor(androidx.recyclerview.selection.OperationMonitor);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withPointerTooltypes(int...);
-    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withSelectionPredicate(androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>);
+    ctor public SelectionTracker.Builder(String, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.selection.ItemKeyProvider<K>, androidx.recyclerview.selection.ItemDetailsLookup<K>, androidx.recyclerview.selection.StorageStrategy<K>);
+    method public androidx.recyclerview.selection.SelectionTracker<K>! build();
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withBandOverlay(@DrawableRes int);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withBandPredicate(androidx.recyclerview.selection.BandPredicate);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withFocusDelegate(androidx.recyclerview.selection.FocusDelegate<K>);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withGestureTooltypes(int...!);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOnContextClickListener(androidx.recyclerview.selection.OnContextClickListener);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOnDragInitiatedListener(androidx.recyclerview.selection.OnDragInitiatedListener);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOnItemActivatedListener(androidx.recyclerview.selection.OnItemActivatedListener<K>);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOperationMonitor(androidx.recyclerview.selection.OperationMonitor);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withPointerTooltypes(int...!);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withSelectionPredicate(androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>);
   }
 
-  public static abstract class SelectionTracker.SelectionObserver<K> {
+  public abstract static class SelectionTracker.SelectionObserver<K> {
     ctor public SelectionTracker.SelectionObserver();
     method public void onItemStateChanged(K, boolean);
     method public void onSelectionChanged();
@@ -131,26 +132,26 @@
     method public void onSelectionRestored();
   }
 
-  public static abstract class SelectionTracker.SelectionPredicate<K> {
+  public abstract static class SelectionTracker.SelectionPredicate<K> {
     ctor public SelectionTracker.SelectionPredicate();
     method public abstract boolean canSelectMultiple();
     method public abstract boolean canSetStateAtPosition(int, boolean);
     method public abstract boolean canSetStateForKey(K, boolean);
   }
 
-  public final class StableIdKeyProvider extends androidx.recyclerview.selection.ItemKeyProvider {
+  public final class StableIdKeyProvider extends androidx.recyclerview.selection.ItemKeyProvider<java.lang.Long> {
     ctor public StableIdKeyProvider(androidx.recyclerview.widget.RecyclerView);
-    method public java.lang.Long getKey(int);
-    method public int getPosition(java.lang.Long);
+    method public Long? getKey(int);
+    method public int getPosition(Long);
   }
 
   public abstract class StorageStrategy<K> {
-    ctor public StorageStrategy(java.lang.Class<K>);
+    ctor public StorageStrategy(Class<K>);
     method public abstract android.os.Bundle asBundle(androidx.recyclerview.selection.Selection<K>);
-    method public abstract androidx.recyclerview.selection.Selection<K> asSelection(android.os.Bundle);
-    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.Long> createLongStorage();
-    method public static <K extends android.os.Parcelable> androidx.recyclerview.selection.StorageStrategy<K> createParcelableStorage(java.lang.Class<K>);
-    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.String> createStringStorage();
+    method public abstract androidx.recyclerview.selection.Selection<K>? asSelection(android.os.Bundle);
+    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.Long>! createLongStorage();
+    method public static <K extends android.os.Parcelable> androidx.recyclerview.selection.StorageStrategy<K>! createParcelableStorage(Class<K>!);
+    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.String>! createStringStorage();
   }
 
 }
diff --git a/remotecallback/build.gradle b/remotecallback/build.gradle
index 67f10b0..32fb43c 100644
--- a/remotecallback/build.gradle
+++ b/remotecallback/build.gradle
@@ -24,7 +24,7 @@
 }
 
 dependencies {
-    implementation project(":annotation")
+    implementation "androidx.annotation:annotation:1.0.0"
     implementation project(path: ':collection')
 
     androidTestImplementation(TEST_RUNNER)
diff --git a/room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt b/room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
index ab0d18e..fd2cc3c 100644
--- a/room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
+++ b/room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
@@ -73,6 +73,8 @@
 import androidx.room.solver.shortcut.binder.InsertMethodBinder
 import androidx.room.solver.shortcut.binder.InstantDeleteOrUpdateMethodBinder
 import androidx.room.solver.shortcut.binder.InstantInsertMethodBinder
+import androidx.room.solver.shortcut.binderprovider.GuavaListenableFutureDeleteOrUpdateMethodBinderProvider
+import androidx.room.solver.shortcut.binderprovider.GuavaListenableFutureInsertMethodBinderProvider
 import androidx.room.solver.shortcut.binderprovider.InstantDeleteOrUpdateMethodBinderProvider
 import androidx.room.solver.shortcut.binderprovider.InstantInsertMethodBinderProvider
 import androidx.room.solver.shortcut.binderprovider.RxCompletableDeleteOrUpdateMethodBinderProvider
@@ -168,6 +170,7 @@
             RxSingleInsertMethodBinderProvider(context),
             RxMaybeInsertMethodBinderProvider(context),
             RxCompletableInsertMethodBinderProvider(context),
+            GuavaListenableFutureInsertMethodBinderProvider(context),
             InstantInsertMethodBinderProvider(context)
     )
 
@@ -175,6 +178,7 @@
             RxSingleDeleteOrUpdateMethodBinderProvider(context),
             RxMaybeDeleteOrUpdateMethodBinderProvider(context),
             RxCompletableDeleteOrUpdateMethodBinderProvider(context),
+            GuavaListenableFutureDeleteOrUpdateMethodBinderProvider(context),
             InstantDeleteOrUpdateMethodBinderProvider(context)
     )
 
diff --git a/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/GuavaListenableFutureDeleteOrUpdateMethodBinder.kt b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/GuavaListenableFutureDeleteOrUpdateMethodBinder.kt
new file mode 100644
index 0000000..2fb7e7f6
--- /dev/null
+++ b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/GuavaListenableFutureDeleteOrUpdateMethodBinder.kt
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.solver.shortcut.binder
+
+import androidx.room.ext.L
+import androidx.room.ext.N
+import androidx.room.ext.RoomGuavaTypeNames
+import androidx.room.ext.T
+import androidx.room.ext.typeName
+import androidx.room.solver.CodeGenScope
+import androidx.room.solver.shortcut.result.DeleteOrUpdateMethodAdapter
+import androidx.room.vo.ShortcutQueryParameter
+import androidx.room.writer.DaoWriter
+import com.squareup.javapoet.FieldSpec
+import com.squareup.javapoet.MethodSpec
+import com.squareup.javapoet.ParameterizedTypeName
+import com.squareup.javapoet.TypeSpec
+import javax.lang.model.element.Modifier
+import javax.lang.model.type.TypeMirror
+
+/**
+ * Binder that knows how to write delete and update methods that return ListenableFuture<T>.
+ */
+class GuavaListenableFutureDeleteOrUpdateMethodBinder(
+    private val typeArg: TypeMirror,
+    adapter: DeleteOrUpdateMethodAdapter?
+) : DeleteOrUpdateMethodBinder(adapter) {
+
+    private val instantDeleteOrUpdateMethodBinder = InstantDeleteOrUpdateMethodBinder(adapter)
+
+    override fun convertAndReturn(
+        parameters: List<ShortcutQueryParameter>,
+        adapters: Map<String, Pair<FieldSpec, TypeSpec>>,
+        scope: CodeGenScope
+    ) {
+        val callableImpl = createCallableOfT(parameters, adapters, scope)
+        scope.builder().apply {
+            addStatement(
+                "return $T.createListenableFuture($N, $L)",
+                RoomGuavaTypeNames.GUAVA_ROOM,
+                DaoWriter.dbField,
+                callableImpl)
+        }
+    }
+
+    /**
+     * Returns an anonymous subclass of Callable<T> whose implementation to execute the query is
+     * generated by an instant adapter.
+     */
+    private fun createCallableOfT(
+        parameters: List<ShortcutQueryParameter>,
+        adapters: Map<String, Pair<FieldSpec, TypeSpec>>,
+        scope: CodeGenScope
+    ): TypeSpec {
+        val adapterScope = scope.fork()
+        return TypeSpec.anonymousClassBuilder("").apply {
+            superclass(
+                ParameterizedTypeName.get(java.util.concurrent.Callable::class.typeName(),
+                    typeArg.typeName()))
+            addMethod(
+                MethodSpec.methodBuilder("call").apply {
+                    // public T call() throws Exception {}
+                    returns(typeArg.typeName())
+                    addAnnotation(Override::class.typeName())
+                    addModifiers(Modifier.PUBLIC)
+                    addException(Exception::class.typeName())
+
+                    // delegate body code generation to the instant method binder
+                    instantDeleteOrUpdateMethodBinder.convertAndReturn(
+                        parameters = parameters,
+                        adapters = adapters,
+                        scope = adapterScope
+                    )
+                    addCode(adapterScope.generate())
+                }.build())
+        }.build()
+    }
+}
\ No newline at end of file
diff --git a/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/GuavaListenableFutureInsertMethodBinder.kt b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/GuavaListenableFutureInsertMethodBinder.kt
new file mode 100644
index 0000000..167672e
--- /dev/null
+++ b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/GuavaListenableFutureInsertMethodBinder.kt
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.solver.shortcut.binder
+
+import androidx.room.ext.L
+import androidx.room.ext.N
+import androidx.room.ext.RoomGuavaTypeNames
+import androidx.room.ext.T
+import androidx.room.ext.typeName
+import androidx.room.solver.CodeGenScope
+import androidx.room.solver.shortcut.result.InsertMethodAdapter
+import androidx.room.vo.ShortcutQueryParameter
+import androidx.room.writer.DaoWriter
+import com.squareup.javapoet.FieldSpec
+import com.squareup.javapoet.MethodSpec
+import com.squareup.javapoet.ParameterizedTypeName
+import com.squareup.javapoet.TypeSpec
+import javax.lang.model.element.Modifier
+import javax.lang.model.type.TypeMirror
+
+/**
+ * Binder that knows how to write insert methods that return ListenableFuture<T>.
+ */
+class GuavaListenableFutureInsertMethodBinder(
+    private val typeArg: TypeMirror,
+    adapter: InsertMethodAdapter?
+) : InsertMethodBinder(adapter) {
+
+    private val instantInsertMethodBinder = InstantInsertMethodBinder(adapter)
+
+    override fun convertAndReturn(
+        parameters: List<ShortcutQueryParameter>,
+        insertionAdapters: Map<String, Pair<FieldSpec, TypeSpec>>,
+        scope: CodeGenScope
+    ) {
+        val callableImpl = createCallableOfT(parameters, insertionAdapters, scope)
+        scope.builder().apply {
+            addStatement(
+                "return $T.createListenableFuture($N, $L)",
+                RoomGuavaTypeNames.GUAVA_ROOM,
+                DaoWriter.dbField,
+                callableImpl)
+        }
+    }
+
+    /**
+     * Returns an anonymous subclass of Callable<T> whose implementation to execute the query is
+     * generated by an instant adapter.
+     */
+    private fun createCallableOfT(
+        parameters: List<ShortcutQueryParameter>,
+        insertionAdapters: Map<String, Pair<FieldSpec, TypeSpec>>,
+        scope: CodeGenScope
+    ): TypeSpec {
+        val adapterScope = scope.fork()
+        return TypeSpec.anonymousClassBuilder("").apply {
+            superclass(
+                ParameterizedTypeName.get(java.util.concurrent.Callable::class.typeName(),
+                    typeArg.typeName()))
+            addMethod(
+                MethodSpec.methodBuilder("call").apply {
+                    // public T call() throws Exception {}
+                    returns(typeArg.typeName())
+                    addAnnotation(Override::class.typeName())
+                    addModifiers(Modifier.PUBLIC)
+                    addException(Exception::class.typeName())
+
+                    // delegate body code generation to the instant method binder
+                    instantInsertMethodBinder.convertAndReturn(
+                        parameters = parameters,
+                        insertionAdapters = insertionAdapters,
+                        scope = adapterScope
+                    )
+                    addCode(adapterScope.generate())
+                }.build())
+        }.build()
+    }
+}
\ No newline at end of file
diff --git a/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/GuavaListenableFutureDeleteOrUpdateMethodBinderProvider.kt b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/GuavaListenableFutureDeleteOrUpdateMethodBinderProvider.kt
new file mode 100644
index 0000000..b9d79ad
--- /dev/null
+++ b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/GuavaListenableFutureDeleteOrUpdateMethodBinderProvider.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.solver.shortcut.binderprovider
+
+import androidx.room.ext.GuavaUtilConcurrentTypeNames
+import androidx.room.ext.RoomGuavaTypeNames
+import androidx.room.ext.typeName
+import androidx.room.processor.Context
+import androidx.room.processor.ProcessorErrors
+import androidx.room.solver.shortcut.binder.DeleteOrUpdateMethodBinder
+import androidx.room.solver.shortcut.binder.GuavaListenableFutureDeleteOrUpdateMethodBinder
+import javax.lang.model.type.DeclaredType
+
+/**
+ * Provider for Guava ListenableFuture binders.
+ */
+class GuavaListenableFutureDeleteOrUpdateMethodBinderProvider(
+    val context: Context
+) : DeleteOrUpdateMethodBinderProvider {
+
+    private val hasGuavaRoom by lazy {
+        context.processingEnv.elementUtils
+            .getTypeElement(RoomGuavaTypeNames.GUAVA_ROOM.toString()) != null
+    }
+
+    override fun matches(declared: DeclaredType): Boolean =
+        declared.typeArguments.size == 1 &&
+                context.processingEnv.typeUtils.erasure(declared).typeName() ==
+                GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE
+
+    override fun provide(declared: DeclaredType): DeleteOrUpdateMethodBinder {
+        if (!hasGuavaRoom) {
+            context.logger.e(ProcessorErrors.MISSING_ROOM_GUAVA_ARTIFACT)
+        }
+
+        val typeArg = declared.typeArguments.first()
+        val adapter = context.typeAdapterStore.findDeleteOrUpdateAdapter(typeArg)
+        return GuavaListenableFutureDeleteOrUpdateMethodBinder(typeArg, adapter)
+    }
+}
\ No newline at end of file
diff --git a/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/GuavaListenableFutureInsertMethodBinderProvider.kt b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/GuavaListenableFutureInsertMethodBinderProvider.kt
new file mode 100644
index 0000000..e0871725
--- /dev/null
+++ b/room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/GuavaListenableFutureInsertMethodBinderProvider.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.solver.shortcut.binderprovider
+
+import androidx.room.ext.GuavaUtilConcurrentTypeNames
+import androidx.room.ext.RoomGuavaTypeNames
+import androidx.room.ext.typeName
+import androidx.room.processor.Context
+import androidx.room.processor.ProcessorErrors
+import androidx.room.solver.shortcut.binder.GuavaListenableFutureInsertMethodBinder
+import androidx.room.solver.shortcut.binder.InsertMethodBinder
+import androidx.room.vo.ShortcutQueryParameter
+import javax.lang.model.type.DeclaredType
+
+/**
+ * Provider for Guava ListenableFuture binders.
+ */
+class GuavaListenableFutureInsertMethodBinderProvider(
+    private val context: Context
+) : InsertMethodBinderProvider {
+
+    private val hasGuavaRoom by lazy {
+        context.processingEnv.elementUtils
+            .getTypeElement(RoomGuavaTypeNames.GUAVA_ROOM.toString()) != null
+    }
+
+    override fun matches(declared: DeclaredType): Boolean =
+        declared.typeArguments.size == 1 &&
+                context.processingEnv.typeUtils.erasure(declared).typeName() ==
+                GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE
+
+    override fun provide(
+        declared: DeclaredType,
+        params: List<ShortcutQueryParameter>
+    ): InsertMethodBinder {
+        if (!hasGuavaRoom) {
+            context.logger.e(ProcessorErrors.MISSING_ROOM_GUAVA_ARTIFACT)
+        }
+
+        val typeArg = declared.typeArguments.first()
+        val adapter = context.typeAdapterStore.findInsertAdapter(typeArg, params)
+        return GuavaListenableFutureInsertMethodBinder(typeArg, adapter)
+    }
+}
\ No newline at end of file
diff --git a/room/compiler/src/test/data/common/input/GuavaRoom.java b/room/compiler/src/test/data/common/input/GuavaRoom.java
new file mode 100644
index 0000000..0cf7c71
--- /dev/null
+++ b/room/compiler/src/test/data/common/input/GuavaRoom.java
@@ -0,0 +1,6 @@
+package androidx.room.guava;
+
+// fake GuavaRoom class for tests
+public class GuavaRoom {
+
+}
\ No newline at end of file
diff --git a/media2/src/main/java/androidx/media2/Rating2.java b/room/compiler/src/test/data/common/input/guava/ListenableFuture.java
similarity index 61%
copy from media2/src/main/java/androidx/media2/Rating2.java
copy to room/compiler/src/test/data/common/input/guava/ListenableFuture.java
index 7a4df47..2c25b8a 100644
--- a/media2/src/main/java/androidx/media2/Rating2.java
+++ b/room/compiler/src/test/data/common/input/guava/ListenableFuture.java
@@ -14,17 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.media2;
+// fake ListenableFuture
+import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
 
-import androidx.versionedparcelable.VersionedParcelable;
-
-/**
- * An interface to encapsulate rating information used as content metadata.
- */
-public interface Rating2 extends VersionedParcelable {
-    /**
-     * Returns whether there is a rating value available.
-     * @return {@code true} if there is an available rating value.
-     */
-    boolean isRated();
-}
+public interface ListenableFuture<V> extends Future<V> {
+    void addListener(Runnable var1, Executor var2);
+}
\ No newline at end of file
diff --git a/room/compiler/src/test/kotlin/androidx/room/processor/ShortcutMethodProcessorTest.kt b/room/compiler/src/test/kotlin/androidx/room/processor/ShortcutMethodProcessorTest.kt
index d858c3f..c5117d9 100644
--- a/room/compiler/src/test/kotlin/androidx/room/processor/ShortcutMethodProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/processor/ShortcutMethodProcessorTest.kt
@@ -19,6 +19,7 @@
 import COMMON
 import androidx.room.Dao
 import androidx.room.ext.CommonTypeNames
+import androidx.room.ext.GuavaUtilConcurrentTypeNames
 import androidx.room.ext.RxJava2TypeNames
 import androidx.room.ext.typeName
 import androidx.room.testing.TestInvocation
@@ -138,7 +139,8 @@
                 "Integer",
                 "${RxJava2TypeNames.SINGLE}<Integer>",
                 "${RxJava2TypeNames.MAYBE}<Integer>",
-                RxJava2TypeNames.COMPLETABLE
+                RxJava2TypeNames.COMPLETABLE,
+                "${GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE}<Integer>"
         ).forEach { type ->
             singleShortcutMethod(
                     """
@@ -240,7 +242,8 @@
                 "Integer",
                 "${RxJava2TypeNames.SINGLE}<Integer>",
                 "${RxJava2TypeNames.MAYBE}<Integer>",
-                RxJava2TypeNames.COMPLETABLE
+                RxJava2TypeNames.COMPLETABLE,
+                "${GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE}<Integer>"
         ).forEach { type ->
             singleShortcutMethod(
                     """
@@ -271,7 +274,10 @@
                 "${RxJava2TypeNames.SINGLE}<String>",
                 "${RxJava2TypeNames.MAYBE}<String>",
                 "${RxJava2TypeNames.SINGLE}<User>",
-                "${RxJava2TypeNames.MAYBE}<User>"
+                "${RxJava2TypeNames.MAYBE}<User>",
+                "${GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE}<Int>",
+                "${GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE}<String>",
+                "${GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE}<User>"
         ).forEach { type ->
             singleShortcutMethod(
                     """
@@ -298,8 +304,8 @@
         return Truth.assertAbout(JavaSourcesSubjectFactory.javaSources())
                 .that(listOf(JavaFileObjects.forSourceString("foo.bar.MyClass",
                         DAO_PREFIX + input.joinToString("\n") + DAO_SUFFIX
-                ), COMMON.USER, COMMON.BOOK, COMMON.NOT_AN_ENTITY,
-                        COMMON.COMPLETABLE, COMMON.MAYBE, COMMON.SINGLE))
+                ), COMMON.USER, COMMON.BOOK, COMMON.NOT_AN_ENTITY, COMMON.COMPLETABLE, COMMON.MAYBE,
+                    COMMON.SINGLE, COMMON.LISTENABLE_FUTURE, COMMON.GUAVA_ROOM))
                 .processedWith(TestProcessor.builder()
                         .forAnnotations(annotation, Dao::class)
                         .nextRunHandler { invocation ->
diff --git a/room/compiler/src/test/kotlin/androidx/room/solver/TypeAdapterStoreTest.kt b/room/compiler/src/test/kotlin/androidx/room/solver/TypeAdapterStoreTest.kt
index 3e24cca..5487d38 100644
--- a/room/compiler/src/test/kotlin/androidx/room/solver/TypeAdapterStoreTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/solver/TypeAdapterStoreTest.kt
@@ -20,6 +20,7 @@
 import androidx.paging.DataSource
 import androidx.paging.PositionalDataSource
 import androidx.room.Entity
+import androidx.room.ext.GuavaUtilConcurrentTypeNames
 import androidx.room.ext.L
 import androidx.room.ext.LifecyclesTypeNames
 import androidx.room.ext.PagingTypeNames
@@ -36,6 +37,8 @@
 import androidx.room.solver.binderprovider.LiveDataQueryResultBinderProvider
 import androidx.room.solver.binderprovider.RxFlowableQueryResultBinderProvider
 import androidx.room.solver.binderprovider.RxObservableQueryResultBinderProvider
+import androidx.room.solver.shortcut.binderprovider.GuavaListenableFutureDeleteOrUpdateMethodBinderProvider
+import androidx.room.solver.shortcut.binderprovider.GuavaListenableFutureInsertMethodBinderProvider
 import androidx.room.solver.shortcut.binderprovider.RxCompletableDeleteOrUpdateMethodBinderProvider
 import androidx.room.solver.shortcut.binderprovider.RxCompletableInsertMethodBinderProvider
 import androidx.room.solver.shortcut.binderprovider.RxMaybeDeleteOrUpdateMethodBinderProvider
@@ -316,6 +319,18 @@
     }
 
     @Test
+    fun testFindInsertListenableFuture() {
+        simpleRun(jfos = *arrayOf(COMMON.LISTENABLE_FUTURE)) {
+                invocation ->
+            val future = invocation.processingEnv.elementUtils
+                .getTypeElement(GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE.toString())
+            assertThat(future, notNullValue())
+            assertThat(GuavaListenableFutureInsertMethodBinderProvider(invocation.context).matches(
+                MoreTypes.asDeclared(future.asType())), `is`(true))
+        }.compilesWithoutError()
+    }
+
+    @Test
     fun testFindDeleteOrUpdateSingle() {
         simpleRun(jfos = *arrayOf(COMMON.SINGLE)) {
             invocation ->
@@ -352,6 +367,18 @@
     }
 
     @Test
+    fun testFindDeleteOrUpdateListenableFuture() {
+        simpleRun(jfos = *arrayOf(COMMON.LISTENABLE_FUTURE)) {
+                invocation ->
+            val future = invocation.processingEnv.elementUtils
+                .getTypeElement(GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE.toString())
+            assertThat(future, notNullValue())
+            assertThat(GuavaListenableFutureDeleteOrUpdateMethodBinderProvider(invocation.context)
+                .matches(MoreTypes.asDeclared(future.asType())), `is`(true))
+        }.compilesWithoutError()
+    }
+
+    @Test
     fun testFindLiveData() {
         simpleRun(jfos = *arrayOf(COMMON.COMPUTABLE_LIVE_DATA, COMMON.LIVE_DATA)) {
             invocation ->
diff --git a/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt b/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
index 8851569..f7c5227 100644
--- a/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
@@ -16,9 +16,11 @@
 
 import androidx.room.DatabaseView
 import androidx.room.Entity
+import androidx.room.ext.GuavaUtilConcurrentTypeNames
 import androidx.room.ext.LifecyclesTypeNames
 import androidx.room.ext.PagingTypeNames
 import androidx.room.ext.ReactiveStreamsTypeNames
+import androidx.room.ext.RoomGuavaTypeNames
 import androidx.room.ext.RoomRxJava2TypeNames
 import androidx.room.ext.RxJava2TypeNames
 import androidx.room.processor.TableEntityProcessor
@@ -118,6 +120,16 @@
         loadJavaCode("common/input/PositionalDataSource.java",
                 PagingTypeNames.POSITIONAL_DATA_SOURCE.toString())
     }
+
+    val LISTENABLE_FUTURE by lazy {
+        loadJavaCode("common/input/guava/ListenableFuture.java",
+            GuavaUtilConcurrentTypeNames.LISTENABLE_FUTURE.toString())
+    }
+
+    val GUAVA_ROOM by lazy {
+        loadJavaCode("common/input/GuavaRoom.java",
+            RoomGuavaTypeNames.GUAVA_ROOM.toString())
+    }
 }
 fun testCodeGenScope(): CodeGenScope {
     return CodeGenScope(Mockito.mock(ClassWriter::class.java))
diff --git a/room/guava/src/main/java/androidx/room/guava/GuavaRoom.java b/room/guava/src/main/java/androidx/room/guava/GuavaRoom.java
index c075143..d779752 100644
--- a/room/guava/src/main/java/androidx/room/guava/GuavaRoom.java
+++ b/room/guava/src/main/java/androidx/room/guava/GuavaRoom.java
@@ -97,4 +97,16 @@
 
         return listenableFutureTask;
     }
+
+    /**
+     * Returns a {@link ListenableFuture<T>} created by submitting the input {@code callable} to
+     * {@link RoomDatabase}'s {@link java.util.concurrent.Executor}.
+     */
+    public static <T> ListenableFuture<T> createListenableFuture(
+            final RoomDatabase roomDatabase,
+            final Callable<T> callable) {
+        ListenableFutureTask<T> listenableFutureTask = ListenableFutureTask.create(callable);
+        roomDatabase.getQueryExecutor().execute(listenableFutureTask);
+        return listenableFutureTask;
+    }
 }
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java
index c7aa469..17a7333 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java
@@ -36,6 +36,8 @@
 import androidx.room.integration.testapp.vo.UserSummary;
 import androidx.sqlite.db.SupportSQLiteQuery;
 
+import com.google.common.util.concurrent.ListenableFuture;
+
 import org.reactivestreams.Publisher;
 
 import java.util.Date;
@@ -263,4 +265,28 @@
     // The subquery is intentional (b/118398616)
     @Query("SELECT `mId`, `mName` FROM (SELECT * FROM User)")
     public abstract List<UserSummary> getNames();
+
+    @Insert
+    public abstract ListenableFuture<List<Long>> insertWithLongListFuture(List<User> users);
+
+    @Insert
+    public abstract ListenableFuture<Long[]> insertWithLongArrayFuture(User... users);
+
+    @Insert
+    public abstract ListenableFuture<Long> insertWithLongFuture(User user);
+
+    @Insert
+    public abstract ListenableFuture<Void> insertWithVoidFuture(User user);
+
+    @Delete
+    public abstract ListenableFuture<Integer> deleteWithIntFuture(User user);
+
+    @Delete
+    public abstract ListenableFuture<Void> deleteWithVoidFuture(User user);
+
+    @Update
+    public abstract ListenableFuture<Integer> updateWithIntFuture(User user);
+
+    @Update
+    public abstract ListenableFuture<Void> updateWithVoidFuture(User user);
 }
diff --git a/room/runtime/api/2.0.0.txt b/room/runtime/api/2.0.0.txt
index f3ed7e4..de2b4c7 100644
--- a/room/runtime/api/2.0.0.txt
+++ b/room/runtime/api/2.0.0.txt
@@ -1,60 +1,61 @@
+// Signature format: 2.0
 package androidx.room {
 
   public class DatabaseConfiguration {
     method public boolean isMigrationRequiredFrom(int);
     field public final boolean allowMainThreadQueries;
-    field public final java.util.List<androidx.room.RoomDatabase.Callback> callbacks;
+    field public final java.util.List<androidx.room.RoomDatabase.Callback>? callbacks;
     field public final android.content.Context context;
-    field public final androidx.room.RoomDatabase.JournalMode journalMode;
+    field public final androidx.room.RoomDatabase.JournalMode! journalMode;
     field public final androidx.room.RoomDatabase.MigrationContainer migrationContainer;
-    field public final java.lang.String name;
+    field public final String? name;
     field public final java.util.concurrent.Executor queryExecutor;
     field public final boolean requireMigration;
     field public final androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory;
   }
 
   public class InvalidationTracker {
-    method public void addObserver(androidx.room.InvalidationTracker.Observer);
+    method @WorkerThread public void addObserver(androidx.room.InvalidationTracker.Observer);
     method public void refreshVersionsAsync();
-    method public void removeObserver(androidx.room.InvalidationTracker.Observer);
+    method @WorkerThread public void removeObserver(androidx.room.InvalidationTracker.Observer);
   }
 
-  public static abstract class InvalidationTracker.Observer {
-    ctor protected InvalidationTracker.Observer(java.lang.String, java.lang.String...);
-    ctor public InvalidationTracker.Observer(java.lang.String[]);
+  public abstract static class InvalidationTracker.Observer {
+    ctor protected InvalidationTracker.Observer(String, java.lang.String...!);
+    ctor public InvalidationTracker.Observer(String[]);
     method public abstract void onInvalidated(java.util.Set<java.lang.String>);
   }
 
   public class Room {
-    ctor public deprecated Room();
-    method public static <T extends androidx.room.RoomDatabase> androidx.room.RoomDatabase.Builder<T> databaseBuilder(android.content.Context, java.lang.Class<T>, java.lang.String);
-    method public static <T extends androidx.room.RoomDatabase> androidx.room.RoomDatabase.Builder<T> inMemoryDatabaseBuilder(android.content.Context, java.lang.Class<T>);
-    field public static final java.lang.String MASTER_TABLE_NAME = "room_master_table";
+    ctor @Deprecated public Room();
+    method public static <T extends androidx.room.RoomDatabase> androidx.room.RoomDatabase.Builder<T> databaseBuilder(android.content.Context, Class<T>, String);
+    method public static <T extends androidx.room.RoomDatabase> androidx.room.RoomDatabase.Builder<T> inMemoryDatabaseBuilder(android.content.Context, Class<T>);
+    field public static final String MASTER_TABLE_NAME = "room_master_table";
   }
 
   public abstract class RoomDatabase {
     ctor public RoomDatabase();
     method public void beginTransaction();
-    method public abstract void clearAllTables();
+    method @WorkerThread public abstract void clearAllTables();
     method public void close();
-    method public androidx.sqlite.db.SupportSQLiteStatement compileStatement(java.lang.String);
+    method public androidx.sqlite.db.SupportSQLiteStatement! compileStatement(String);
     method protected abstract androidx.room.InvalidationTracker createInvalidationTracker();
-    method protected abstract androidx.sqlite.db.SupportSQLiteOpenHelper createOpenHelper(androidx.room.DatabaseConfiguration);
+    method protected abstract androidx.sqlite.db.SupportSQLiteOpenHelper createOpenHelper(androidx.room.DatabaseConfiguration!);
     method public void endTransaction();
     method public androidx.room.InvalidationTracker getInvalidationTracker();
     method public androidx.sqlite.db.SupportSQLiteOpenHelper getOpenHelper();
     method public java.util.concurrent.Executor getQueryExecutor();
     method public boolean inTransaction();
-    method public void init(androidx.room.DatabaseConfiguration);
+    method @CallSuper public void init(androidx.room.DatabaseConfiguration);
     method protected void internalInitInvalidationTracker(androidx.sqlite.db.SupportSQLiteDatabase);
     method public boolean isOpen();
-    method public android.database.Cursor query(java.lang.String, java.lang.Object[]);
-    method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery);
-    method public void runInTransaction(java.lang.Runnable);
-    method public <V> V runInTransaction(java.util.concurrent.Callable<V>);
+    method public android.database.Cursor! query(String!, Object[]?);
+    method public android.database.Cursor! query(androidx.sqlite.db.SupportSQLiteQuery!);
+    method public void runInTransaction(Runnable);
+    method public <V> V! runInTransaction(java.util.concurrent.Callable<V>);
     method public void setTransactionSuccessful();
-    field protected java.util.List<androidx.room.RoomDatabase.Callback> mCallbacks;
-    field protected volatile androidx.sqlite.db.SupportSQLiteDatabase mDatabase;
+    field protected java.util.List<androidx.room.RoomDatabase.Callback>? mCallbacks;
+    field protected volatile androidx.sqlite.db.SupportSQLiteDatabase! mDatabase;
   }
 
   public static class RoomDatabase.Builder<T extends androidx.room.RoomDatabase> {
@@ -63,30 +64,28 @@
     method public androidx.room.RoomDatabase.Builder<T> allowMainThreadQueries();
     method public T build();
     method public androidx.room.RoomDatabase.Builder<T> fallbackToDestructiveMigration();
-    method public androidx.room.RoomDatabase.Builder<T> fallbackToDestructiveMigrationFrom(int...);
-    method public androidx.room.RoomDatabase.Builder<T> openHelperFactory(androidx.sqlite.db.SupportSQLiteOpenHelper.Factory);
+    method public androidx.room.RoomDatabase.Builder<T> fallbackToDestructiveMigrationFrom(int...!);
+    method public androidx.room.RoomDatabase.Builder<T> openHelperFactory(androidx.sqlite.db.SupportSQLiteOpenHelper.Factory?);
     method public androidx.room.RoomDatabase.Builder<T> setJournalMode(androidx.room.RoomDatabase.JournalMode);
     method public androidx.room.RoomDatabase.Builder<T> setQueryExecutor(java.util.concurrent.Executor);
   }
 
-  public static abstract class RoomDatabase.Callback {
+  public abstract static class RoomDatabase.Callback {
     ctor public RoomDatabase.Callback();
     method public void onCreate(androidx.sqlite.db.SupportSQLiteDatabase);
     method public void onOpen(androidx.sqlite.db.SupportSQLiteDatabase);
   }
 
-  public static final class RoomDatabase.JournalMode extends java.lang.Enum {
-    method public static androidx.room.RoomDatabase.JournalMode valueOf(java.lang.String);
-    method public static final androidx.room.RoomDatabase.JournalMode[] values();
+  public static enum RoomDatabase.JournalMode {
     enum_constant public static final androidx.room.RoomDatabase.JournalMode AUTOMATIC;
     enum_constant public static final androidx.room.RoomDatabase.JournalMode TRUNCATE;
-    enum_constant public static final androidx.room.RoomDatabase.JournalMode WRITE_AHEAD_LOGGING;
+    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.JELLY_BEAN) public static final androidx.room.RoomDatabase.JournalMode WRITE_AHEAD_LOGGING;
   }
 
   public static class RoomDatabase.MigrationContainer {
     ctor public RoomDatabase.MigrationContainer();
     method public void addMigrations(androidx.room.migration.Migration...);
-    method public java.util.List<androidx.room.migration.Migration> findMigrationPath(int, int);
+    method public java.util.List<androidx.room.migration.Migration>? findMigrationPath(int, int);
   }
 
 }
diff --git a/room/rxjava2/api/2.0.0.txt b/room/rxjava2/api/2.0.0.txt
index 8da664a..b92289e3 100644
--- a/room/rxjava2/api/2.0.0.txt
+++ b/room/rxjava2/api/2.0.0.txt
@@ -1,14 +1,15 @@
+// Signature format: 2.0
 package androidx.room {
 
   public class EmptyResultSetException extends java.lang.RuntimeException {
-    ctor public EmptyResultSetException(java.lang.String);
+    ctor public EmptyResultSetException(String!);
   }
 
   public class RxRoom {
-    ctor public deprecated RxRoom();
-    method public static io.reactivex.Flowable<java.lang.Object> createFlowable(androidx.room.RoomDatabase, java.lang.String...);
-    method public static io.reactivex.Observable<java.lang.Object> createObservable(androidx.room.RoomDatabase, java.lang.String...);
-    field public static final java.lang.Object NOTHING;
+    ctor @Deprecated public RxRoom();
+    method public static io.reactivex.Flowable<java.lang.Object>! createFlowable(androidx.room.RoomDatabase!, java.lang.String...!);
+    method public static io.reactivex.Observable<java.lang.Object>! createObservable(androidx.room.RoomDatabase!, java.lang.String...!);
+    field public static final Object! NOTHING;
   }
 
 }
diff --git a/room/testing/api/2.0.0.txt b/room/testing/api/2.0.0.txt
index d441d62..27556ec 100644
--- a/room/testing/api/2.0.0.txt
+++ b/room/testing/api/2.0.0.txt
@@ -1,12 +1,13 @@
+// Signature format: 2.0
 package androidx.room.testing {
 
   public class MigrationTestHelper extends org.junit.rules.TestWatcher {
-    ctor public MigrationTestHelper(android.app.Instrumentation, java.lang.String);
-    ctor public MigrationTestHelper(android.app.Instrumentation, java.lang.String, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory);
-    method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase);
-    method public void closeWhenFinished(androidx.room.RoomDatabase);
-    method public androidx.sqlite.db.SupportSQLiteDatabase createDatabase(java.lang.String, int) throws java.io.IOException;
-    method public androidx.sqlite.db.SupportSQLiteDatabase runMigrationsAndValidate(java.lang.String, int, boolean, androidx.room.migration.Migration...) throws java.io.IOException;
+    ctor public MigrationTestHelper(android.app.Instrumentation!, String!);
+    ctor public MigrationTestHelper(android.app.Instrumentation!, String!, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory!);
+    method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method public void closeWhenFinished(androidx.room.RoomDatabase!);
+    method public androidx.sqlite.db.SupportSQLiteDatabase! createDatabase(String!, int) throws java.io.IOException;
+    method public androidx.sqlite.db.SupportSQLiteDatabase! runMigrationsAndValidate(String!, int, boolean, androidx.room.migration.Migration...!) throws java.io.IOException;
   }
 
 }
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
index 237e0fc..6281cc3 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
@@ -55,7 +55,7 @@
     private static final String VARIABLE_VOLUME_QUEUING_ROUTE_ID = "variable_queuing";
     private static final String VARIABLE_VOLUME_SESSION_ROUTE_ID = "variable_session";
 
-    protected static final int VOLUME_MAX = 10;
+    protected static final int VOLUME_MAX = 100;
 
     /**
      * A custom media control intent category for special requests that are
diff --git a/samples/SupportMediaDemos/src/main/AndroidManifest.xml b/samples/SupportMediaDemos/src/main/AndroidManifest.xml
index 829eb00..56434b5 100644
--- a/samples/SupportMediaDemos/src/main/AndroidManifest.xml
+++ b/samples/SupportMediaDemos/src/main/AndroidManifest.xml
@@ -18,7 +18,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     package="com.example.androidx.media">
 
-    <uses-sdk tools:overrideLibrary="androidx.media.widget" />
+    <uses-sdk tools:overrideLibrary="androidx.media2.widget" />
 
     <application android:label="Video View Test"
                  android:supportsRtl="true">
diff --git a/samples/SupportMediaDemos/src/main/java/com/example/androidx/media/VideoViewTest.java b/samples/SupportMediaDemos/src/main/java/com/example/androidx/media/VideoViewTest.java
index 0abc61c..52e9cf5 100644
--- a/samples/SupportMediaDemos/src/main/java/com/example/androidx/media/VideoViewTest.java
+++ b/samples/SupportMediaDemos/src/main/java/com/example/androidx/media/VideoViewTest.java
@@ -38,16 +38,16 @@
 import androidx.annotation.NonNull;
 import androidx.core.content.ContextCompat;
 import androidx.fragment.app.FragmentActivity;
-import androidx.media.widget.MediaControlView2;
-import androidx.media.widget.VideoView2;
-import androidx.media2.MediaController2;
-import androidx.media2.SessionToken2;
-import androidx.media2.UriMediaItem2;
+import androidx.media2.MediaController;
+import androidx.media2.SessionToken;
+import androidx.media2.UriMediaItem;
+import androidx.media2.widget.MediaControlView;
+import androidx.media2.widget.VideoView;
 
 import java.util.concurrent.Executor;
 
 /**
- * Test application for VideoView2/MediaControlView2
+ * Test application for VideoView/MediaControlView
  */
 @SuppressLint("NewApi")
 public class VideoViewTest extends FragmentActivity {
@@ -62,8 +62,8 @@
     private MyVideoView mVideoView = null;
     private float mSpeed = 1.0f;
 
-    private MediaControlView2 mMediaControlView = null;
-    private MediaController2 mMediaController = null;
+    private MediaControlView mMediaControlView = null;
+    private MediaController mMediaController = null;
 
     private boolean mUseTextureView = false;
     private int mPrevWidth;
@@ -89,18 +89,18 @@
         } else {
             mUseTextureView = intent.getBooleanExtra(USE_TEXTURE_VIEW_EXTRA_NAME, false);
             if (mUseTextureView) {
-                mVideoView.setViewType(VideoView2.VIEW_TYPE_TEXTUREVIEW);
+                mVideoView.setViewType(VideoView.VIEW_TYPE_TEXTUREVIEW);
             }
-            UriMediaItem2 mediaItem = new UriMediaItem2.Builder(this, videoUri).build();
-            mVideoView.setMediaItem2(mediaItem);
+            UriMediaItem mediaItem = new UriMediaItem.Builder(this, videoUri).build();
+            mVideoView.setMediaItem(mediaItem);
 
-            mMediaControlView = new MediaControlView2(this);
-            mVideoView.setMediaControlView2(mMediaControlView, 2000);
+            mMediaControlView = new MediaControlView(this);
+            mVideoView.setMediaControlView(mMediaControlView, 2000);
             mMediaControlView.setOnFullScreenListener(new FullScreenListener());
-            SessionToken2 token = mVideoView.getMediaSessionToken2();
+            SessionToken token = mVideoView.getSessionToken();
 
             Executor executor = ContextCompat.getMainExecutor(this);
-            mMediaController = new MediaController2(
+            mMediaController = new MediaController(
                     this, token, executor, new ControllerCallback());
         }
         if (errorString != null) {
@@ -151,16 +151,16 @@
                         }).show();
     }
 
-    class ControllerCallback extends MediaController2.ControllerCallback {
+    class ControllerCallback extends MediaController.ControllerCallback {
         @Override
         public void onPlaybackSpeedChanged(
-                @NonNull MediaController2 controller, float speed) {
+                @NonNull MediaController controller, float speed) {
             mSpeed = speed;
         }
     }
 
     private class FullScreenListener
-            implements MediaControlView2.OnFullScreenListener {
+            implements MediaControlView.OnFullScreenListener {
         @Override
         public void onFullScreen(View view, boolean fullScreen) {
             // TODO: Remove bottom controls after adding back button functionality.
@@ -201,7 +201,7 @@
      *
      * @author johngro@google.com (John Grossman)
      */
-    public static class MyVideoView extends VideoView2 {
+    public static class MyVideoView extends VideoView {
         private float mDX;
         private float mDY;
         private Activity mActivity;
@@ -254,25 +254,25 @@
     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
-        if (mVideoView.getViewType() == VideoView2.VIEW_TYPE_SURFACEVIEW) {
-            mVideoView.setViewType(VideoView2.VIEW_TYPE_TEXTUREVIEW);
+        if (mVideoView.getViewType() == VideoView.VIEW_TYPE_SURFACEVIEW) {
+            mVideoView.setViewType(VideoView.VIEW_TYPE_TEXTUREVIEW);
             Toast.makeText(this, "switch to TextureView", Toast.LENGTH_SHORT).show();
             setTitle(getViewTypeString(mVideoView));
-        } else if (mVideoView.getViewType() == VideoView2.VIEW_TYPE_TEXTUREVIEW) {
-            mVideoView.setViewType(VideoView2.VIEW_TYPE_SURFACEVIEW);
+        } else if (mVideoView.getViewType() == VideoView.VIEW_TYPE_TEXTUREVIEW) {
+            mVideoView.setViewType(VideoView.VIEW_TYPE_SURFACEVIEW);
             Toast.makeText(this, "switch to SurfaceView", Toast.LENGTH_SHORT).show();
             setTitle(getViewTypeString(mVideoView));
         }
     }
 
-    private String getViewTypeString(VideoView2 videoView) {
+    private String getViewTypeString(VideoView videoView) {
         if (videoView == null) {
             return "Unknown";
         }
         int type = videoView.getViewType();
-        if (type == VideoView2.VIEW_TYPE_SURFACEVIEW) {
+        if (type == VideoView.VIEW_TYPE_SURFACEVIEW) {
             return "SurfaceView";
-        } else if (type == VideoView2.VIEW_TYPE_TEXTUREVIEW) {
+        } else if (type == VideoView.VIEW_TYPE_TEXTUREVIEW) {
             return "TextureView";
         }
         return "Unknown";
diff --git a/slices/benchmark/src/androidTest/java/androidx/slice/SliceSerializeMetrics.java b/slices/benchmark/src/androidTest/java/androidx/slice/SliceSerializeMetrics.java
index f1e80bf..7753cf8 100644
--- a/slices/benchmark/src/androidTest/java/androidx/slice/SliceSerializeMetrics.java
+++ b/slices/benchmark/src/androidTest/java/androidx/slice/SliceSerializeMetrics.java
@@ -71,7 +71,7 @@
     public void testSerialization() throws Exception {
         final BenchmarkState state = mBenchmarkRule.getState();
         // Create a slice containing all the types in a hierarchy.
-        Slice before = createSlice(Uri.parse("context://pkg/slice"), 3, 3, 6);
+        Slice before = createSlice(mContext, Uri.parse("context://pkg/slice"), 3, 3, 6);
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024 * 1024);
 
         if (WRITE_SAMPLE_FILE) {
@@ -131,7 +131,7 @@
             after = SliceUtils.parseSlice(mContext, inputStream, "UTF-8", listener);
         }
 
-        Slice before = createSlice(Uri.parse("context://pkg/slice"), 3, 3, 6);
+        Slice before = createSlice(mContext, Uri.parse("context://pkg/slice"), 3, 3, 6);
         assertEquivalentRoot(before, after);
     }
 
@@ -176,11 +176,11 @@
         }
     }
 
-    private Slice createSlice(Uri uri, int width, int depth, int items) {
+    public static Slice createSlice(Context context, Uri uri, int width, int depth, int items) {
         Slice.Builder builder = new Slice.Builder(uri);
         if (depth > 0) {
             for (int i = 0; i < width; i++) {
-                builder.addSubSlice(createSlice(uri.buildUpon()
+                builder.addSubSlice(createSlice(context, uri.buildUpon()
                         .appendPath(String.valueOf(width))
                         .appendPath(String.valueOf(depth))
                         .appendPath(String.valueOf(items))
@@ -197,7 +197,7 @@
             builder.addText("Some text", null);
         }
         if (items > 3) {
-            PendingIntent pi = PendingIntent.getActivity(mContext, 0, new Intent(), 0);
+            PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(), 0);
             builder.addAction(pi,
                     new Slice.Builder(Uri.parse("content://pkg/slice/action"))
                             .addText("Action text", null)
@@ -207,7 +207,7 @@
             builder.addInt(0xff00ff00, "subtype");
         }
         if (items > 5) {
-            builder.addIcon(IconCompat.createWithResource(mContext,
+            builder.addIcon(IconCompat.createWithResource(context,
                     R.drawable.abc_slice_see_more_bg), null);
         }
         return builder.addHints("Hint 1", "Hint 2")
diff --git a/slices/benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics.java b/slices/benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics.java
new file mode 100644
index 0000000..b4c017ef
--- /dev/null
+++ b/slices/benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.slice;
+
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+import androidx.benchmark.BenchmarkRule;
+import androidx.benchmark.BenchmarkState;
+import androidx.slice.widget.SliceView;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.filters.MediumTest;
+import androidx.test.filters.SdkSuppress;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.Description;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.model.Statement;
+
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+
+@RunWith(Parameterized.class)
+@MediumTest
+@SdkSuppress(minSdkVersion = 19)
+public class SliceViewMetrics {
+
+    private final int mMode;
+
+    @Parameterized.Parameters
+    public static Iterable<? extends Object[]> data() {
+        return Arrays.asList(new Object[][]{{SliceView.MODE_SHORTCUT}, {SliceView.MODE_SMALL},
+                {SliceView.MODE_LARGE}});
+    }
+
+    public SliceViewMetrics(int mode) {
+        mMode = mode;
+    }
+
+    @Rule
+    public BenchmarkRule mBenchmarkRule = new BenchmarkRule() {
+        @NonNull
+        @Override
+        public Statement apply(@NonNull Statement base, @NonNull Description description) {
+            return super.apply(base, fixDescription(description));
+        }
+
+        private Description fixDescription(Description description) {
+            // Copies the Description and modifies the method to be compatible with BenchmarkRule.
+            return Description.createTestDescription(description.getClassName(),
+                    fixMethodName(description.getMethodName()),
+                    description.getAnnotations().toArray(new Annotation[0]));
+        }
+
+        private String fixMethodName(String methodName) {
+            // Replace [int] with [string] for BenchmarkRule and readability.
+            return methodName.replace("[0]", "[shortcut]")
+                    .replace("[1]", "[small]")
+                    .replace("[2]", "[large]");
+        }
+    };
+
+    private final Context mContext = InstrumentationRegistry.getContext();
+
+    @Test
+    public void testCreate() {
+        // Since using parameterized, UiThreadTest isn't supported
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                final BenchmarkState state = mBenchmarkRule.getState();
+                while (state.keepRunning()) {
+                    new SliceView(mContext).setMode(mMode);
+                }
+            }
+        });
+    }
+
+    @Test
+    @UiThreadTest
+    public void testCreateAndSet() {
+        // Since using parameterized, UiThreadTest isn't supported
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                final BenchmarkState state = mBenchmarkRule.getState();
+                Uri uri = Uri.parse("content:///androidx.slice.benchmark");
+                Slice s = SliceSerializeMetrics.createSlice(mContext, uri, 3, 3, 6);
+                while (state.keepRunning()) {
+                    SliceView v = new SliceView(mContext);
+                    v.setMode(mMode);
+                    v.setSlice(s);
+                }
+            }
+        });
+    }
+
+    @Test
+    @UiThreadTest
+    public void testSet() {
+        // Since using parameterized, UiThreadTest isn't supported
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                final BenchmarkState state = mBenchmarkRule.getState();
+                Uri uri = Uri.parse("content:///androidx.slice.benchmark");
+                Slice s = SliceSerializeMetrics.createSlice(mContext, uri, 3, 3, 6);
+                SliceView v = new SliceView(mContext);
+                v.setMode(mMode);
+                v.setSlice(s);
+                while (state.keepRunning()) {
+                    v.setSlice(s);
+                }
+            }
+        });
+    }
+}
diff --git a/slices/builders/api/1.0.0.txt b/slices/builders/api/1.0.0.txt
index b732d84..291321c 100644
--- a/slices/builders/api/1.0.0.txt
+++ b/slices/builders/api/1.0.0.txt
@@ -1,9 +1,10 @@
+// Signature format: 2.0
 package androidx.slice.builders {
 
-  public class GridRowBuilder {
+  @RequiresApi(19) public class GridRowBuilder {
     ctor public GridRowBuilder();
     method public androidx.slice.builders.GridRowBuilder addCell(androidx.slice.builders.GridRowBuilder.CellBuilder);
-    method public androidx.slice.builders.GridRowBuilder setContentDescription(java.lang.CharSequence);
+    method public androidx.slice.builders.GridRowBuilder setContentDescription(CharSequence);
     method public androidx.slice.builders.GridRowBuilder setLayoutDirection(int);
     method public androidx.slice.builders.GridRowBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
     method public androidx.slice.builders.GridRowBuilder setSeeMoreAction(android.app.PendingIntent);
@@ -13,27 +14,28 @@
   public static class GridRowBuilder.CellBuilder {
     ctor public GridRowBuilder.CellBuilder();
     method public androidx.slice.builders.GridRowBuilder.CellBuilder addImage(androidx.core.graphics.drawable.IconCompat, int);
-    method public androidx.slice.builders.GridRowBuilder.CellBuilder addImage(androidx.core.graphics.drawable.IconCompat, int, boolean);
-    method public androidx.slice.builders.GridRowBuilder.CellBuilder addText(java.lang.CharSequence);
-    method public androidx.slice.builders.GridRowBuilder.CellBuilder addText(java.lang.CharSequence, boolean);
-    method public androidx.slice.builders.GridRowBuilder.CellBuilder addTitleText(java.lang.CharSequence);
-    method public androidx.slice.builders.GridRowBuilder.CellBuilder addTitleText(java.lang.CharSequence, boolean);
-    method public androidx.slice.builders.GridRowBuilder.CellBuilder setContentDescription(java.lang.CharSequence);
+    method public androidx.slice.builders.GridRowBuilder.CellBuilder addImage(androidx.core.graphics.drawable.IconCompat?, int, boolean);
+    method public androidx.slice.builders.GridRowBuilder.CellBuilder addText(CharSequence);
+    method public androidx.slice.builders.GridRowBuilder.CellBuilder addText(CharSequence?, boolean);
+    method public androidx.slice.builders.GridRowBuilder.CellBuilder addTitleText(CharSequence);
+    method public androidx.slice.builders.GridRowBuilder.CellBuilder addTitleText(CharSequence?, boolean);
+    method public androidx.slice.builders.GridRowBuilder.CellBuilder setContentDescription(CharSequence);
     method public androidx.slice.builders.GridRowBuilder.CellBuilder setContentIntent(android.app.PendingIntent);
   }
 
-  public class ListBuilder extends androidx.slice.builders.TemplateSliceBuilder {
+  @RequiresApi(19) public class ListBuilder extends androidx.slice.builders.TemplateSliceBuilder {
     ctor public ListBuilder(android.content.Context, android.net.Uri, long);
-    ctor public ListBuilder(android.content.Context, android.net.Uri, java.time.Duration);
+    ctor @RequiresApi(26) public ListBuilder(android.content.Context, android.net.Uri, java.time.Duration?);
     method public androidx.slice.builders.ListBuilder addAction(androidx.slice.builders.SliceAction);
     method public androidx.slice.builders.ListBuilder addGridRow(androidx.slice.builders.GridRowBuilder);
     method public androidx.slice.builders.ListBuilder addInputRange(androidx.slice.builders.ListBuilder.InputRangeBuilder);
     method public androidx.slice.builders.ListBuilder addRange(androidx.slice.builders.ListBuilder.RangeBuilder);
     method public androidx.slice.builders.ListBuilder addRow(androidx.slice.builders.ListBuilder.RowBuilder);
-    method public androidx.slice.builders.ListBuilder setAccentColor(int);
+    method public androidx.slice.builders.ListBuilder addSelection(androidx.slice.builders.SelectionBuilder);
+    method public androidx.slice.builders.ListBuilder setAccentColor(@ColorInt int);
     method public androidx.slice.builders.ListBuilder setHeader(androidx.slice.builders.ListBuilder.HeaderBuilder);
     method public androidx.slice.builders.ListBuilder setIsError(boolean);
-    method public androidx.slice.builders.ListBuilder setKeywords(java.util.Set<java.lang.String>);
+    method public androidx.slice.builders.ListBuilder setKeywords(java.util.Set<java.lang.String>!);
     method public androidx.slice.builders.ListBuilder setLayoutDirection(int);
     method public androidx.slice.builders.ListBuilder setSeeMoreAction(android.app.PendingIntent);
     method public androidx.slice.builders.ListBuilder setSeeMoreRow(androidx.slice.builders.ListBuilder.RowBuilder);
@@ -46,85 +48,97 @@
 
   public static class ListBuilder.HeaderBuilder {
     ctor public ListBuilder.HeaderBuilder();
-    method public androidx.slice.builders.ListBuilder.HeaderBuilder setContentDescription(java.lang.CharSequence);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setContentDescription(CharSequence);
     method public androidx.slice.builders.ListBuilder.HeaderBuilder setLayoutDirection(int);
     method public androidx.slice.builders.ListBuilder.HeaderBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
-    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSubtitle(java.lang.CharSequence);
-    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSubtitle(java.lang.CharSequence, boolean);
-    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSummary(java.lang.CharSequence);
-    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSummary(java.lang.CharSequence, boolean);
-    method public androidx.slice.builders.ListBuilder.HeaderBuilder setTitle(java.lang.CharSequence);
-    method public androidx.slice.builders.ListBuilder.HeaderBuilder setTitle(java.lang.CharSequence, boolean);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSubtitle(CharSequence);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSubtitle(CharSequence, boolean);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSummary(CharSequence);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSummary(CharSequence, boolean);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setTitle(CharSequence);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setTitle(CharSequence, boolean);
   }
 
   public static class ListBuilder.InputRangeBuilder {
     ctor public ListBuilder.InputRangeBuilder();
-    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setContentDescription(java.lang.CharSequence);
+    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setContentDescription(CharSequence);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setInputAction(android.app.PendingIntent);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setLayoutDirection(int);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setMax(int);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setMin(int);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
-    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setSubtitle(java.lang.CharSequence);
+    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setSubtitle(CharSequence);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setThumb(androidx.core.graphics.drawable.IconCompat);
-    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setTitle(java.lang.CharSequence);
+    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setTitle(CharSequence);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setValue(int);
   }
 
   public static class ListBuilder.RangeBuilder {
     ctor public ListBuilder.RangeBuilder();
-    method public androidx.slice.builders.ListBuilder.RangeBuilder setContentDescription(java.lang.CharSequence);
+    method public androidx.slice.builders.ListBuilder.RangeBuilder setContentDescription(CharSequence);
     method public androidx.slice.builders.ListBuilder.RangeBuilder setLayoutDirection(int);
     method public androidx.slice.builders.ListBuilder.RangeBuilder setMax(int);
     method public androidx.slice.builders.ListBuilder.RangeBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
-    method public androidx.slice.builders.ListBuilder.RangeBuilder setSubtitle(java.lang.CharSequence);
-    method public androidx.slice.builders.ListBuilder.RangeBuilder setTitle(java.lang.CharSequence);
+    method public androidx.slice.builders.ListBuilder.RangeBuilder setSubtitle(CharSequence);
+    method public androidx.slice.builders.ListBuilder.RangeBuilder setTitle(CharSequence);
     method public androidx.slice.builders.ListBuilder.RangeBuilder setValue(int);
   }
 
   public static class ListBuilder.RowBuilder {
     ctor public ListBuilder.RowBuilder();
-    ctor public ListBuilder.RowBuilder(android.net.Uri);
+    ctor public ListBuilder.RowBuilder(android.net.Uri!);
     method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
     method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat, int);
-    method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat, int, boolean);
+    method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
     method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction);
     method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction, boolean);
-    method public androidx.slice.builders.ListBuilder.RowBuilder setContentDescription(java.lang.CharSequence);
+    method public androidx.slice.builders.ListBuilder.RowBuilder setContentDescription(CharSequence);
     method public androidx.slice.builders.ListBuilder.RowBuilder setLayoutDirection(int);
     method public androidx.slice.builders.ListBuilder.RowBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
-    method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(java.lang.CharSequence);
-    method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(java.lang.CharSequence, boolean);
-    method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(java.lang.CharSequence);
-    method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(java.lang.CharSequence, boolean);
+    method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(CharSequence);
+    method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(CharSequence?, boolean);
+    method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence);
+    method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence?, boolean);
     method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
-    method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
-    method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int, boolean);
+    method public androidx.slice.builders.ListBuilder.RowBuilder! setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
+    method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
     method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction);
     method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction, boolean);
   }
 
-  public class SliceAction implements androidx.slice.core.SliceAction {
-    method public static androidx.slice.builders.SliceAction create(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, java.lang.CharSequence);
-    method public static androidx.slice.builders.SliceAction createDeeplink(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, java.lang.CharSequence);
-    method public static androidx.slice.builders.SliceAction createToggle(android.app.PendingIntent, java.lang.CharSequence, boolean);
-    method public static androidx.slice.builders.SliceAction createToggle(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, java.lang.CharSequence, boolean);
+  @RequiresApi(19) public class SelectionBuilder {
+    ctor public SelectionBuilder();
+    method public androidx.slice.builders.SelectionBuilder! addOption(String!, CharSequence!);
+    method public androidx.slice.builders.SelectionBuilder! setContentDescription(CharSequence?);
+    method public androidx.slice.builders.SelectionBuilder! setInputAction(android.app.PendingIntent);
+    method public androidx.slice.builders.SelectionBuilder! setLayoutDirection(int);
+    method public androidx.slice.builders.SelectionBuilder! setPrimaryAction(androidx.slice.builders.SliceAction);
+    method public androidx.slice.builders.SelectionBuilder! setSelectedOption(String!);
+    method public androidx.slice.builders.SelectionBuilder! setSubtitle(CharSequence?);
+    method public androidx.slice.builders.SelectionBuilder! setTitle(CharSequence?);
+  }
+
+  @RequiresApi(19) public class SliceAction implements androidx.slice.core.SliceAction {
+    method public static androidx.slice.builders.SliceAction! create(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
+    method public static androidx.slice.builders.SliceAction! createDeeplink(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
+    method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
+    method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
     method public android.app.PendingIntent getAction();
-    method public java.lang.CharSequence getContentDescription();
-    method public androidx.core.graphics.drawable.IconCompat getIcon();
+    method public CharSequence? getContentDescription();
+    method public androidx.core.graphics.drawable.IconCompat? getIcon();
     method public int getImageMode();
     method public int getPriority();
-    method public java.lang.CharSequence getTitle();
+    method public CharSequence getTitle();
     method public boolean isActivity();
     method public boolean isChecked();
     method public boolean isDefaultToggle();
     method public boolean isToggle();
     method public androidx.slice.builders.SliceAction setChecked(boolean);
-    method public androidx.slice.builders.SliceAction setContentDescription(java.lang.CharSequence);
-    method public androidx.slice.builders.SliceAction setPriority(int);
+    method public androidx.slice.builders.SliceAction setContentDescription(CharSequence);
+    method public androidx.slice.builders.SliceAction setPriority(@IntRange(from=0) int);
   }
 
-  public abstract class TemplateSliceBuilder {
+  @RequiresApi(19) public abstract class TemplateSliceBuilder {
     method public androidx.slice.Slice build();
   }
 
diff --git a/slices/core/api/1.0.0.txt b/slices/core/api/1.0.0.txt
index cdd590a6..6abecd0 100644
--- a/slices/core/api/1.0.0.txt
+++ b/slices/core/api/1.0.0.txt
@@ -1,79 +1,81 @@
+// Signature format: 2.0
 package androidx.slice {
 
-  public final class Slice implements androidx.versionedparcelable.VersionedParcelable {
-    method public java.util.List<java.lang.String> getHints();
-    method public java.util.List<androidx.slice.SliceItem> getItems();
-    method public android.net.Uri getUri();
+  @RequiresApi(19) public final class Slice extends androidx.versionedparcelable.CustomVersionedParcelable implements androidx.versionedparcelable.VersionedParcelable {
+    method public java.util.List<java.lang.String>! getHints();
+    method public java.util.List<androidx.slice.SliceItem>! getItems();
+    method public android.net.Uri! getUri();
+    field public static final String EXTRA_SELECTION = "android.app.slice.extra.SELECTION";
   }
 
-  public class SliceConvert {
-    method public static android.app.slice.Slice unwrap(androidx.slice.Slice);
-    method public static androidx.slice.Slice wrap(android.app.slice.Slice, android.content.Context);
+  @RequiresApi(28) public class SliceConvert {
+    method public static android.app.slice.Slice! unwrap(androidx.slice.Slice!);
+    method public static androidx.slice.Slice! wrap(android.app.slice.Slice!, android.content.Context!);
   }
 
-  public final class SliceItem extends androidx.versionedparcelable.CustomVersionedParcelable {
-    method public void fireAction(android.content.Context, android.content.Intent) throws android.app.PendingIntent.CanceledException;
-    method public android.app.PendingIntent getAction();
-    method public java.lang.String getFormat();
+  @RequiresApi(19) public final class SliceItem extends androidx.versionedparcelable.CustomVersionedParcelable {
+    method public void fireAction(android.content.Context?, android.content.Intent?) throws android.app.PendingIntent.CanceledException;
+    method public android.app.PendingIntent! getAction();
+    method public String! getFormat();
     method public java.util.List<java.lang.String> getHints();
-    method public androidx.core.graphics.drawable.IconCompat getIcon();
+    method public androidx.core.graphics.drawable.IconCompat! getIcon();
     method public int getInt();
     method public long getLong();
-    method public androidx.slice.Slice getSlice();
-    method public java.lang.String getSubType();
-    method public java.lang.CharSequence getText();
-    method public boolean hasHint(java.lang.String);
+    method public androidx.slice.Slice! getSlice();
+    method public String! getSubType();
+    method public CharSequence! getText();
+    method public boolean hasHint(String!);
   }
 
-  public abstract class SliceManager {
+  @RequiresApi(19) public abstract class SliceManager {
     method public abstract int checkSlicePermission(android.net.Uri, int, int);
     method public static androidx.slice.SliceManager getInstance(android.content.Context);
     method public abstract java.util.List<android.net.Uri> getPinnedSlices();
-    method public abstract void grantSlicePermission(java.lang.String, android.net.Uri);
-    method public abstract void revokeSlicePermission(java.lang.String, android.net.Uri);
+    method public abstract void grantSlicePermission(String, android.net.Uri);
+    method public abstract void revokeSlicePermission(String, android.net.Uri);
   }
 
   public abstract class SliceProvider extends android.content.ContentProvider implements androidx.core.app.CoreComponentFactory.CompatWrapped {
     ctor public SliceProvider(java.lang.String...);
     ctor public SliceProvider();
     method public final int bulkInsert(android.net.Uri, android.content.ContentValues[]);
-    method public final android.net.Uri canonicalize(android.net.Uri);
-    method public final int delete(android.net.Uri, java.lang.String, java.lang.String[]);
-    method public java.util.List<android.net.Uri> getPinnedSlices();
-    method public final java.lang.String getType(android.net.Uri);
-    method public java.lang.Object getWrapper();
-    method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
-    method public abstract androidx.slice.Slice onBindSlice(android.net.Uri);
+    method @RequiresApi(19) public final android.net.Uri? canonicalize(android.net.Uri);
+    method public final int delete(android.net.Uri, String?, String[]?);
+    method @RequiresApi(19) public java.util.List<android.net.Uri> getPinnedSlices();
+    method public final String! getType(android.net.Uri!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) @RequiresApi(19) public Object! getWrapper();
+    method public final android.net.Uri? insert(android.net.Uri, android.content.ContentValues?);
+    method @RequiresApi(19) public abstract androidx.slice.Slice! onBindSlice(android.net.Uri!);
     method public final boolean onCreate();
-    method public abstract boolean onCreateSliceProvider();
-    method public java.util.Collection<android.net.Uri> onGetSliceDescendants(android.net.Uri);
-    method public android.net.Uri onMapIntentToUri(android.content.Intent);
-    method public void onSlicePinned(android.net.Uri);
-    method public void onSliceUnpinned(android.net.Uri);
-    method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
-    method public final android.database.Cursor query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal);
-    method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal);
-    method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
+    method @RequiresApi(19) public abstract boolean onCreateSliceProvider();
+    method @RequiresApi(19) public java.util.Collection<android.net.Uri>! onGetSliceDescendants(android.net.Uri!);
+    method @RequiresApi(19) public android.net.Uri onMapIntentToUri(android.content.Intent!);
+    method @RequiresApi(19) public void onSlicePinned(android.net.Uri!);
+    method @RequiresApi(19) public void onSliceUnpinned(android.net.Uri!);
+    method public final android.database.Cursor? query(android.net.Uri, String[]?, String?, String[]?, String?);
+    method @RequiresApi(28) public final android.database.Cursor? query(android.net.Uri, String[]?, android.os.Bundle?, android.os.CancellationSignal?);
+    method @RequiresApi(16) public final android.database.Cursor? query(android.net.Uri, String[]?, String?, String[]?, String?, android.os.CancellationSignal?);
+    method public final int update(android.net.Uri, android.content.ContentValues?, String?, String[]?);
   }
 
 }
 
 package androidx.slice.core {
 
-  public abstract interface SliceAction {
-    method public abstract android.app.PendingIntent getAction();
-    method public abstract java.lang.CharSequence getContentDescription();
-    method public abstract androidx.core.graphics.drawable.IconCompat getIcon();
-    method public abstract int getImageMode();
-    method public abstract int getPriority();
-    method public abstract java.lang.CharSequence getTitle();
-    method public abstract boolean isActivity();
-    method public abstract boolean isChecked();
-    method public abstract boolean isDefaultToggle();
-    method public abstract boolean isToggle();
-    method public abstract androidx.slice.core.SliceAction setChecked(boolean);
-    method public abstract androidx.slice.core.SliceAction setContentDescription(java.lang.CharSequence);
-    method public abstract androidx.slice.core.SliceAction setPriority(int);
+  @RequiresApi(19) public interface SliceAction {
+    method public android.app.PendingIntent getAction();
+    method public CharSequence? getContentDescription();
+    method public androidx.core.graphics.drawable.IconCompat? getIcon();
+    method public int getImageMode();
+    method public int getPriority();
+    method public CharSequence getTitle();
+    method public boolean isActivity();
+    method public boolean isChecked();
+    method public boolean isDefaultToggle();
+    method public boolean isToggle();
+    method public androidx.slice.core.SliceAction! setChecked(boolean);
+    method public androidx.slice.core.SliceAction? setContentDescription(CharSequence);
+    method public androidx.slice.core.SliceAction! setPriority(@IntRange(from=0) int);
   }
 
 }
diff --git a/slices/core/src/main/java/androidx/slice/Slice.java b/slices/core/src/main/java/androidx/slice/Slice.java
index d80c83a..8b27ea6 100644
--- a/slices/core/src/main/java/androidx/slice/Slice.java
+++ b/slices/core/src/main/java/androidx/slice/Slice.java
@@ -227,6 +227,15 @@
     }
 
     /**
+     * @hide
+     * @return
+     */
+    @RestrictTo(LIBRARY)
+    public SliceItem[] getItemArray() {
+        return mItems;
+    }
+
+    /**
      * @return All hints associated with this Slice.
      */
     public @SliceHint List<String> getHints() {
@@ -236,6 +245,14 @@
     /**
      * @hide
      */
+    @RestrictTo(LIBRARY)
+    public @SliceHint String[] getHintArray() {
+        return mHints;
+    }
+
+    /**
+     * @hide
+     */
     @RestrictTo(Scope.LIBRARY_GROUP)
     public boolean hasHint(@SliceHint String hint) {
         return ArrayUtils.contains(mHints, hint);
@@ -340,8 +357,7 @@
          */
         public Builder addSubSlice(@NonNull Slice slice, String subType) {
             Preconditions.checkNotNull(slice);
-            mItems.add(new SliceItem(slice, FORMAT_SLICE, subType, slice.getHints().toArray(
-                    new String[slice.getHints().size()])));
+            mItems.add(new SliceItem(slice, FORMAT_SLICE, subType, slice.getHintArray()));
             return this;
         }
 
@@ -354,7 +370,7 @@
                 @NonNull Slice s, @Nullable String subType) {
             Preconditions.checkNotNull(action);
             Preconditions.checkNotNull(s);
-            @SliceHint String[] hints = s.getHints().toArray(new String[s.getHints().size()]);
+            @SliceHint String[] hints = s.getHintArray();
             mItems.add(new SliceItem(action, s, FORMAT_ACTION, subType, hints));
             return this;
         }
@@ -368,7 +384,7 @@
         public Slice.Builder addAction(@NonNull SliceItem.ActionHandler action,
                 @NonNull Slice s, @Nullable String subType) {
             Preconditions.checkNotNull(s);
-            @SliceHint String[] hints = s.getHints().toArray(new String[s.getHints().size()]);
+            @SliceHint String[] hints = s.getHintArray();
             mItems.add(new SliceItem(action, s, FORMAT_ACTION, subType, hints));
             return this;
         }
diff --git a/slices/core/src/main/java/androidx/slice/SliceConvert.java b/slices/core/src/main/java/androidx/slice/SliceConvert.java
index 2baf55a..22a01e6 100644
--- a/slices/core/src/main/java/androidx/slice/SliceConvert.java
+++ b/slices/core/src/main/java/androidx/slice/SliceConvert.java
@@ -53,7 +53,7 @@
         android.app.slice.Slice.Builder builder = new android.app.slice.Slice.Builder(
                 slice.getUri(), unwrap(slice.getSpec()));
         builder.addHints(slice.getHints());
-        for (androidx.slice.SliceItem item : slice.getItems()) {
+        for (androidx.slice.SliceItem item : slice.getItemArray()) {
             switch (item.getFormat()) {
                 case FORMAT_SLICE:
                     builder.addSubSlice(unwrap(item.getSlice()), item.getSubType());
diff --git a/slices/core/src/main/java/androidx/slice/SliceItem.java b/slices/core/src/main/java/androidx/slice/SliceItem.java
index 143e569..1f91530 100644
--- a/slices/core/src/main/java/androidx/slice/SliceItem.java
+++ b/slices/core/src/main/java/androidx/slice/SliceItem.java
@@ -177,6 +177,14 @@
      * @hide
      */
     @RestrictTo(Scope.LIBRARY)
+    public @NonNull @Slice.SliceHint String[] getHintArray() {
+        return mHints;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
     public void addHint(@Slice.SliceHint String hint) {
         mHints = ArrayUtils.appendElement(String.class, mHints, hint);
     }
diff --git a/slices/core/src/main/java/androidx/slice/core/SliceQuery.java b/slices/core/src/main/java/androidx/slice/core/SliceQuery.java
index f2dd970..e687e85 100644
--- a/slices/core/src/main/java/androidx/slice/core/SliceQuery.java
+++ b/slices/core/src/main/java/androidx/slice/core/SliceQuery.java
@@ -27,8 +27,10 @@
 import androidx.slice.Slice;
 import androidx.slice.SliceItem;
 
+import java.util.ArrayDeque;
 import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Collections;
+import java.util.Deque;
 import java.util.List;
 
 /**
@@ -43,9 +45,8 @@
      */
     public static boolean hasAnyHints(SliceItem item, String... hints) {
         if (hints == null) return false;
-        List<String> itemHints = item.getHints();
         for (String hint : hints) {
-            if (itemHints.contains(hint)) {
+            if (item.hasHint(hint)) {
                 return true;
             }
         }
@@ -56,9 +57,8 @@
      */
     public static boolean hasHints(SliceItem item, String... hints) {
         if (hints == null) return true;
-        List<String> itemHints = item.getHints();
         for (String hint : hints) {
-            if (!TextUtils.isEmpty(hint) && !itemHints.contains(hint)) {
+            if (!TextUtils.isEmpty(hint) && !item.hasHint(hint)) {
                 return false;
             }
         }
@@ -69,9 +69,8 @@
      */
     public static boolean hasHints(Slice item, String... hints) {
         if (hints == null) return true;
-        List<String> itemHints = item.getHints();
         for (String hint : hints) {
-            if (!TextUtils.isEmpty(hint) && !itemHints.contains(hint)) {
+            if (!TextUtils.isEmpty(hint) && !item.hasHint(hint)) {
                 return false;
             }
         }
@@ -95,12 +94,12 @@
      */
     private static boolean contains(SliceItem container, final SliceItem item) {
         if (container == null || item == null) return false;
-        return findFirst(filter(stream(container), new Filter<SliceItem>() {
+        return findSliceItem(toQueue(container), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem s) {
                 return s == item;
             }
-        }), null) != null;
+        }) != null;
     }
 
     /**
@@ -126,26 +125,30 @@
      */
     public static List<SliceItem> findAll(Slice s, final String format, final String[] hints,
             final String[] nonHints) {
-        return collect(filter(stream(s), new Filter<SliceItem>() {
+        ArrayList<SliceItem> ret = new ArrayList();
+        findAll(toQueue(s), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem item) {
                 return checkFormat(item, format)
                         && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
             }
-        }));
+        }, ret);
+        return ret;
     }
 
     /**
      */
     public static List<SliceItem> findAll(SliceItem s, final String format, final String[] hints,
             final String[] nonHints) {
-        return collect(filter(stream(s), new Filter<SliceItem>() {
+        ArrayList<SliceItem> ret = new ArrayList();
+        findAll(toQueue(s), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem item) {
                 return checkFormat(item, format)
                         && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
             }
-        }));
+        }, ret);
+        return ret;
     }
 
     /**
@@ -176,48 +179,52 @@
      */
     public static SliceItem find(Slice s, final String format, final String[] hints,
             final String[] nonHints) {
-        return findFirst(filter(stream(s), new Filter<SliceItem>() {
+        if (s == null) return null;
+        return findSliceItem(toQueue(s), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem item) {
                 return checkFormat(item, format)
                         && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
             }
-        }), null);
+        });
     }
 
     /**
      */
     public static SliceItem findSubtype(Slice s, final String format, final String subtype) {
-        return findFirst(filter(stream(s), new Filter<SliceItem>() {
+        if (s == null) return null;
+        return findSliceItem(toQueue(s), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem item) {
                 return checkFormat(item, format) && checkSubtype(item, subtype);
             }
-        }), null);
+        });
     }
 
     /**
      */
     public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {
-        return findFirst(filter(stream(s), new Filter<SliceItem>() {
+        if (s == null) return null;
+        return findSliceItem(toQueue(s), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem item) {
                 return checkFormat(item, format) && checkSubtype(item, subtype);
             }
-        }), null);
+        });
     }
 
     /**
      */
     public static SliceItem find(SliceItem s, final String format, final String[] hints,
             final String[] nonHints) {
-        return findFirst(filter(stream(s), new Filter<SliceItem>() {
+        if (s == null) return null;
+        return findSliceItem(toQueue(s), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem item) {
                 return checkFormat(item, format)
                         && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
             }
-        }), null);
+        });
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
@@ -230,43 +237,44 @@
         return subtype == null || subtype.equals(item.getSubType());
     }
 
-    /**
-     */
-    public static Iterator<SliceItem> stream(SliceItem slice) {
-        ArrayList<SliceItem> items = new ArrayList<>();
-        items.add(slice);
-        return getSliceItemStream(items);
+    private static Deque<SliceItem> toQueue(Slice item) {
+        Deque<SliceItem> q = new ArrayDeque<>();
+        Collections.addAll(q, item.getItemArray());
+        return q;
     }
 
-    /**
-     */
-    public static Iterator<SliceItem> stream(Slice slice) {
-        ArrayList<SliceItem> items = new ArrayList<>();
-        if (slice != null) {
-            items.addAll(slice.getItems());
-        }
-        return getSliceItemStream(items);
+    private static Deque<SliceItem> toQueue(SliceItem item) {
+        Deque<SliceItem> q = new ArrayDeque<>();
+        q.add(item);
+        return q;
     }
 
-    /**
-     */
-    private static Iterator<SliceItem> getSliceItemStream(final ArrayList<SliceItem> items) {
-        return new Iterator<SliceItem>() {
-            @Override
-            public boolean hasNext() {
-                return items.size() != 0;
-            }
-
-            @Override
-            public SliceItem next() {
-                SliceItem item = items.remove(0);
-                if (FORMAT_SLICE.equals(item.getFormat())
-                        || FORMAT_ACTION.equals(item.getFormat())) {
-                    items.addAll(item.getSlice().getItems());
-                }
+    private static SliceItem findSliceItem(final Deque<SliceItem> items, Filter<SliceItem> f) {
+        while (!items.isEmpty()) {
+            SliceItem item = items.poll();
+            if (f.filter(item)) {
                 return item;
             }
-        };
+            if (FORMAT_SLICE.equals(item.getFormat())
+                    || FORMAT_ACTION.equals(item.getFormat())) {
+                Collections.addAll(items, item.getSlice().getItemArray());
+            }
+        }
+        return null;
+    }
+
+    private static void findAll(final Deque<SliceItem> items, Filter<SliceItem> f,
+            List<SliceItem> out) {
+        while (!items.isEmpty()) {
+            SliceItem item = items.poll();
+            if (f.filter(item)) {
+                out.add(item);
+            }
+            if (FORMAT_SLICE.equals(item.getFormat())
+                    || FORMAT_ACTION.equals(item.getFormat())) {
+                Collections.addAll(items, item.getSlice().getItemArray());
+            }
+        }
     }
 
     /**
@@ -274,9 +282,9 @@
      */
     public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,
             final String[] hints, final String[] nonHints) {
-        List<SliceItem> items = s.getItems();
-        for (int i = 0; i < items.size(); i++) {
-            SliceItem item = items.get(i);
+        SliceItem[] items = s.getItemArray();
+        for (int i = 0; i < items.length; i++) {
+            SliceItem item = items[i];
             if (checkFormat(item, format)
                     && checkSubtype(item, subtype)
                     && hasHints(item, hints)
@@ -287,54 +295,12 @@
         return null;
     }
 
-    private static <T> List<T> collect(Iterator<T> iter) {
-        List<T> list = new ArrayList<>();
-        while (iter.hasNext()) list.add(iter.next());
-        return list;
-    }
-
-    private static <T> Iterator<T> filter(final Iterator<T> input, final Filter<T> f) {
-        return new Iterator<T>() {
-            T mNext = findNext();
-
-            private T findNext() {
-                while (input.hasNext()) {
-                    T i = input.next();
-                    if (f.filter(i)) {
-                        return i;
-                    }
-                }
-                return null;
-            }
-
-            @Override
-            public boolean hasNext() {
-                return mNext != null;
-            }
-
-            @Override
-            public T next() {
-                T ret = mNext;
-                mNext = findNext();
-                return ret;
-            }
-        };
-    }
-
-    private static <T> T findFirst(Iterator<T> filter, T def) {
-        while (filter.hasNext()) {
-            T r = filter.next();
-            if (r != null) return r;
-        }
-        return def;
-    }
-
     /**
      * @hide
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public static SliceItem findItem(Slice s, final Uri uri) {
-        return findFirst(filter(stream(s), new Filter<SliceItem>() {
+        return findSliceItem(toQueue(s), new Filter<SliceItem>() {
             @Override
             public boolean filter(SliceItem input) {
                 if (FORMAT_ACTION.equals(input.getFormat()) || FORMAT_SLICE.equals(
@@ -343,7 +309,7 @@
                 }
                 return false;
             }
-        }), null);
+        });
     }
 
     private interface Filter<T> {
diff --git a/slices/test/src/main/java/androidx/slice/test/SampleSliceProvider.java b/slices/test/src/main/java/androidx/slice/test/SampleSliceProvider.java
index facf00f..efe7436 100644
--- a/slices/test/src/main/java/androidx/slice/test/SampleSliceProvider.java
+++ b/slices/test/src/main/java/androidx/slice/test/SampleSliceProvider.java
@@ -53,6 +53,7 @@
 import androidx.slice.builders.ListBuilder.RangeBuilder;
 import androidx.slice.builders.ListBuilder.RowBuilder;
 import androidx.slice.builders.MessagingSliceBuilder;
+import androidx.slice.builders.SelectionBuilder;
 import androidx.slice.builders.SliceAction;
 
 import java.util.ArrayList;
@@ -107,7 +108,8 @@
             "cat",
             "permission",
             "longtext",
-            "loading"
+            "loading",
+            "selection",
     };
 
     /**
@@ -203,6 +205,8 @@
                 return createPermissionSlice(getContext(), sliceUri, getContext().getPackageName());
             case "/loading":
                 return createLoadingSlice(sliceUri);
+            case "/selection":
+                return createSelectionSlice(sliceUri);
         }
         Log.w(TAG, String.format("Unknown uri: %s", sliceUri));
         return null;
@@ -1144,6 +1148,28 @@
         return s;
     }
 
+    private Slice createSelectionSlice(Uri sliceUri) {
+        return new ListBuilder(getContext(), sliceUri, INFINITY)
+                .addSelection(new SelectionBuilder()
+                        .setTitle("Pick a card")
+                        .setSubtitle("Any card")
+                        .addOption("index", "Index")
+                        .addOption("business", "Business")
+                        .addOption("playing", "Playing")
+                        .setSelectedOption("business")
+                        // TODO: Update this intent once view-side selection is supported.
+                        .setPrimaryAction(SliceAction.create(
+                                getBroadcastIntent(ACTION_TOAST,
+                                        "open card type selection"),
+                                IconCompat.createWithResource(getContext(), R.drawable.ic_note),
+                                ICON_IMAGE,
+                                "Select card type"))
+                        .setInputAction(getBroadcastIntent(ACTION_TOAST,
+                                "handle card type selection"))
+                        .setContentDescription("selection for card type"))
+                .build();
+    }
+
     private PendingIntent getIntent(String action) {
         Intent intent = new Intent(action);
         PendingIntent pi = PendingIntent.getActivity(getContext(), 0, intent, 0);
diff --git a/slices/view/api/1.0.0.txt b/slices/view/api/1.0.0.txt
index 4db855b..4c426cd 100644
--- a/slices/view/api/1.0.0.txt
+++ b/slices/view/api/1.0.0.txt
@@ -1,66 +1,68 @@
+// Signature format: 2.0
 package androidx.slice {
 
-  public class SliceMetadata {
-    method public static androidx.slice.SliceMetadata from(android.content.Context, androidx.slice.Slice);
+  @RequiresApi(19) public class SliceMetadata {
+    method public static androidx.slice.SliceMetadata! from(android.content.Context, androidx.slice.Slice);
     method public long getExpiry();
     method public int getHeaderType();
-    method public android.app.PendingIntent getInputRangeAction();
+    method public android.app.PendingIntent? getInputRangeAction();
     method public long getLastUpdatedTime();
     method public int getLoadingState();
-    method public androidx.slice.core.SliceAction getPrimaryAction();
-    method public androidx.core.util.Pair<java.lang.Integer, java.lang.Integer> getRange();
+    method public androidx.slice.core.SliceAction? getPrimaryAction();
+    method public androidx.core.util.Pair<java.lang.Integer,java.lang.Integer>? getRange();
     method public int getRangeValue();
-    method public java.util.List<androidx.slice.core.SliceAction> getSliceActions();
-    method public java.util.List<java.lang.String> getSliceKeywords();
-    method public java.lang.CharSequence getSubtitle();
-    method public java.lang.CharSequence getSummary();
-    method public java.lang.CharSequence getTitle();
-    method public java.util.List<androidx.slice.core.SliceAction> getToggles();
+    method public java.util.List<androidx.slice.core.SliceAction>? getSliceActions();
+    method public java.util.List<java.lang.String>? getSliceKeywords();
+    method public CharSequence? getSubtitle();
+    method public CharSequence? getSummary();
+    method public CharSequence? getTitle();
+    method public java.util.List<androidx.slice.core.SliceAction>! getToggles();
     method public boolean hasLargeMode();
+    method public boolean isCachedSlice();
     method public boolean isErrorSlice();
     method public boolean isPermissionSlice();
     method public boolean sendInputRangeAction(int) throws android.app.PendingIntent.CanceledException;
-    method public boolean sendToggleAction(androidx.slice.core.SliceAction, boolean) throws android.app.PendingIntent.CanceledException;
+    method public boolean sendToggleAction(androidx.slice.core.SliceAction!, boolean) throws android.app.PendingIntent.CanceledException;
     field public static final int LOADED_ALL = 2; // 0x2
     field public static final int LOADED_NONE = 0; // 0x0
     field public static final int LOADED_PARTIAL = 1; // 0x1
   }
 
-  public class SliceStructure {
-    ctor public SliceStructure(androidx.slice.Slice);
+  @RequiresApi(19) public class SliceStructure {
+    ctor public SliceStructure(androidx.slice.Slice!);
   }
 
-  public class SliceUtils {
-    method public static androidx.slice.Slice parseSlice(android.content.Context, java.io.InputStream, java.lang.String, androidx.slice.SliceUtils.SliceActionListener) throws java.io.IOException, androidx.slice.SliceUtils.SliceParseException;
+  @RequiresApi(19) public class SliceUtils {
+    method public static androidx.slice.Slice parseSlice(android.content.Context, java.io.InputStream, String, androidx.slice.SliceUtils.SliceActionListener) throws java.io.IOException, androidx.slice.SliceUtils.SliceParseException;
     method public static void serializeSlice(androidx.slice.Slice, android.content.Context, java.io.OutputStream, androidx.slice.SliceUtils.SerializeOptions) throws java.lang.IllegalArgumentException;
     method public static androidx.slice.Slice stripSlice(androidx.slice.Slice, int, boolean);
   }
 
   public static class SliceUtils.SerializeOptions {
     ctor public SliceUtils.SerializeOptions();
-    method public androidx.slice.SliceUtils.SerializeOptions setActionMode(int);
-    method public androidx.slice.SliceUtils.SerializeOptions setImageConversionFormat(android.graphics.Bitmap.CompressFormat, int);
-    method public androidx.slice.SliceUtils.SerializeOptions setImageMode(int);
-    method public androidx.slice.SliceUtils.SerializeOptions setMaxImageHeight(int);
-    method public androidx.slice.SliceUtils.SerializeOptions setMaxImageWidth(int);
+    method public androidx.slice.SliceUtils.SerializeOptions! setActionMode(int);
+    method public androidx.slice.SliceUtils.SerializeOptions! setImageConversionFormat(android.graphics.Bitmap.CompressFormat!, int);
+    method public androidx.slice.SliceUtils.SerializeOptions! setImageMode(int);
+    method public androidx.slice.SliceUtils.SerializeOptions! setMaxImageHeight(int);
+    method public androidx.slice.SliceUtils.SerializeOptions! setMaxImageWidth(int);
     field public static final int MODE_CONVERT = 2; // 0x2
     field public static final int MODE_REMOVE = 1; // 0x1
     field public static final int MODE_THROW = 0; // 0x0
   }
 
-  public static abstract interface SliceUtils.SliceActionListener {
-    method public abstract void onSliceAction(android.net.Uri, android.content.Context, android.content.Intent);
+  public static interface SliceUtils.SliceActionListener {
+    method public void onSliceAction(android.net.Uri!, android.content.Context!, android.content.Intent!);
   }
 
   public static class SliceUtils.SliceParseException extends java.lang.Exception {
   }
 
-  public abstract class SliceViewManager {
-    method public abstract androidx.slice.Slice bindSlice(android.net.Uri);
-    method public abstract androidx.slice.Slice bindSlice(android.content.Intent);
+  @RequiresApi(19) public abstract class SliceViewManager {
+    method public abstract androidx.slice.Slice? bindSlice(android.net.Uri);
+    method public abstract androidx.slice.Slice? bindSlice(android.content.Intent);
     method public static androidx.slice.SliceViewManager getInstance(android.content.Context);
-    method public abstract java.util.Collection<android.net.Uri> getSliceDescendants(android.net.Uri);
-    method public abstract android.net.Uri mapIntentToUri(android.content.Intent);
+    method @WorkerThread public abstract java.util.Collection<android.net.Uri> getSliceDescendants(android.net.Uri);
+    method public abstract android.net.Uri? mapIntentToUri(android.content.Intent);
     method public abstract void pinSlice(android.net.Uri);
     method public abstract void registerSliceCallback(android.net.Uri, androidx.slice.SliceViewManager.SliceCallback);
     method public abstract void registerSliceCallback(android.net.Uri, java.util.concurrent.Executor, androidx.slice.SliceViewManager.SliceCallback);
@@ -68,15 +70,15 @@
     method public abstract void unregisterSliceCallback(android.net.Uri, androidx.slice.SliceViewManager.SliceCallback);
   }
 
-  public static abstract interface SliceViewManager.SliceCallback {
-    method public abstract void onSliceUpdated(androidx.slice.Slice);
+  public static interface SliceViewManager.SliceCallback {
+    method public void onSliceUpdated(androidx.slice.Slice);
   }
 
 }
 
 package androidx.slice.widget {
 
-  public class EventInfo {
+  @RequiresApi(19) public class EventInfo {
     ctor public EventInfo(int, int, int, int);
     method public void setPosition(int, int, int);
     field public static final int ACTION_TYPE_BUTTON = 1; // 0x1
@@ -106,47 +108,53 @@
     field public int state;
   }
 
-  public final class SliceLiveData {
+  @RequiresApi(19) public final class SliceLiveData {
+    method public static androidx.slice.widget.SliceLiveData.CachedSliceLiveData fromCachedSlice(android.content.Context, java.io.InputStream, androidx.slice.widget.SliceLiveData.OnErrorListener!);
     method public static androidx.lifecycle.LiveData<androidx.slice.Slice> fromIntent(android.content.Context, android.content.Intent);
-    method public static androidx.lifecycle.LiveData<androidx.slice.Slice> fromStream(android.content.Context, java.io.InputStream, androidx.slice.widget.SliceLiveData.OnErrorListener);
+    method public static androidx.lifecycle.LiveData<androidx.slice.Slice> fromStream(android.content.Context, java.io.InputStream, androidx.slice.widget.SliceLiveData.OnErrorListener!);
     method public static androidx.lifecycle.LiveData<androidx.slice.Slice> fromUri(android.content.Context, android.net.Uri);
   }
 
-  public static abstract interface SliceLiveData.OnErrorListener {
-    method public abstract void onSliceError(int, java.lang.Throwable);
+  public static class SliceLiveData.CachedSliceLiveData extends androidx.lifecycle.LiveData<androidx.slice.Slice> {
+    method public void goLive();
+    method public void parseStream();
+  }
+
+  public static interface SliceLiveData.OnErrorListener {
+    method public void onSliceError(@androidx.slice.widget.SliceLiveData.OnErrorListener.ErrorType int, Throwable?);
     field public static final int ERROR_INVALID_INPUT = 3; // 0x3
     field public static final int ERROR_SLICE_NO_LONGER_PRESENT = 2; // 0x2
     field public static final int ERROR_STRUCTURE_CHANGED = 1; // 0x1
     field public static final int ERROR_UNKNOWN = 0; // 0x0
   }
 
-  public static abstract class SliceLiveData.OnErrorListener.ErrorType implements java.lang.annotation.Annotation {
+  @IntDef({androidx.slice.widget.SliceLiveData.OnErrorListener.ERROR_UNKNOWN, androidx.slice.widget.SliceLiveData.OnErrorListener.ERROR_STRUCTURE_CHANGED, androidx.slice.widget.SliceLiveData.OnErrorListener.ERROR_SLICE_NO_LONGER_PRESENT, androidx.slice.widget.SliceLiveData.OnErrorListener.ERROR_INVALID_INPUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface SliceLiveData.OnErrorListener.ErrorType {
   }
 
-  public class SliceView extends android.view.ViewGroup implements androidx.lifecycle.Observer android.view.View.OnClickListener {
-    ctor public SliceView(android.content.Context);
-    ctor public SliceView(android.content.Context, android.util.AttributeSet);
-    ctor public SliceView(android.content.Context, android.util.AttributeSet, int);
-    ctor public SliceView(android.content.Context, android.util.AttributeSet, int, int);
+  @RequiresApi(19) public class SliceView extends android.view.ViewGroup implements androidx.lifecycle.Observer<androidx.slice.Slice> android.view.View.OnClickListener {
+    ctor public SliceView(android.content.Context!);
+    ctor public SliceView(android.content.Context!, android.util.AttributeSet?);
+    ctor public SliceView(android.content.Context!, android.util.AttributeSet?, int);
+    ctor @RequiresApi(21) public SliceView(android.content.Context!, android.util.AttributeSet!, int, int);
     method public int getMode();
-    method public androidx.slice.Slice getSlice();
-    method public java.util.List<androidx.slice.core.SliceAction> getSliceActions();
+    method public androidx.slice.Slice? getSlice();
+    method public java.util.List<androidx.slice.core.SliceAction>? getSliceActions();
     method public boolean isScrollable();
-    method public void onChanged(androidx.slice.Slice);
-    method public void onClick(android.view.View);
-    method public void setAccentColor(int);
+    method public void onChanged(androidx.slice.Slice?);
+    method public void onClick(android.view.View!);
+    method public void setAccentColor(@ColorInt int);
     method public void setMode(int);
-    method public void setOnSliceActionListener(androidx.slice.widget.SliceView.OnSliceActionListener);
+    method public void setOnSliceActionListener(androidx.slice.widget.SliceView.OnSliceActionListener?);
     method public void setScrollable(boolean);
-    method public void setSlice(androidx.slice.Slice);
-    method public void setSliceActions(java.util.List<androidx.slice.core.SliceAction>);
+    method public void setSlice(androidx.slice.Slice?);
+    method public void setSliceActions(java.util.List<androidx.slice.core.SliceAction>?);
     field public static final int MODE_LARGE = 2; // 0x2
     field public static final int MODE_SHORTCUT = 3; // 0x3
     field public static final int MODE_SMALL = 1; // 0x1
   }
 
-  public static abstract interface SliceView.OnSliceActionListener {
-    method public abstract void onSliceAction(androidx.slice.widget.EventInfo, androidx.slice.SliceItem);
+  public static interface SliceView.OnSliceActionListener {
+    method public void onSliceAction(androidx.slice.widget.EventInfo, androidx.slice.SliceItem);
   }
 
 }
diff --git a/slices/view/src/main/java/androidx/slice/widget/GridContent.java b/slices/view/src/main/java/androidx/slice/widget/GridContent.java
index 05967fe..6159025 100644
--- a/slices/view/src/main/java/androidx/slice/widget/GridContent.java
+++ b/slices/view/src/main/java/androidx/slice/widget/GridContent.java
@@ -34,11 +34,8 @@
 import static androidx.slice.core.SliceHints.LARGE_IMAGE;
 import static androidx.slice.core.SliceHints.SMALL_IMAGE;
 import static androidx.slice.core.SliceHints.UNKNOWN_IMAGE;
-import static androidx.slice.widget.SliceView.MODE_SMALL;
 
 import android.app.slice.Slice;
-import android.content.Context;
-import android.content.res.Resources;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -47,7 +44,6 @@
 import androidx.slice.SliceItem;
 import androidx.slice.core.SliceActionImpl;
 import androidx.slice.core.SliceQuery;
-import androidx.slice.view.R;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -69,27 +65,11 @@
     private int mLargestImageMode = UNKNOWN_IMAGE;
     private boolean mIsLastIndex;
 
-    private int mBigPicMinHeight;
-    private int mBigPicMaxHeight;
-    private int mAllImagesHeight;
-    private int mImageTextHeight;
-    private int mMaxHeight;
-    private int mMinHeight;
     private SliceItem mTitleItem;
 
-    public GridContent(Context context, SliceItem gridItem, int position) {
+    public GridContent(SliceItem gridItem, int position) {
         super(gridItem, position);
         populate(gridItem);
-
-        if (context != null) {
-            Resources res = context.getResources();
-            mBigPicMinHeight = res.getDimensionPixelSize(R.dimen.abc_slice_big_pic_min_height);
-            mBigPicMaxHeight = res.getDimensionPixelSize(R.dimen.abc_slice_big_pic_max_height);
-            mAllImagesHeight = res.getDimensionPixelSize(R.dimen.abc_slice_grid_image_only_height);
-            mImageTextHeight = res.getDimensionPixelSize(R.dimen.abc_slice_grid_image_text_height);
-            mMinHeight = res.getDimensionPixelSize(R.dimen.abc_slice_grid_min_height);
-            mMaxHeight = res.getDimensionPixelSize(R.dimen.abc_slice_grid_max_height);
-        }
     }
 
     /**
@@ -236,7 +216,12 @@
     }
 
     /**
-     * Whether this content is being displayed last in a list.
+     * @return whether this content is being displayed last in a list.
+     */
+    public boolean getIsLastIndex() { return mIsLastIndex; }
+
+    /**
+     * Sets whether this content is being displayed last in a list.
      */
     public void setIsLastIndex(boolean isLast) {
         mIsLastIndex = isLast;
@@ -244,29 +229,7 @@
 
     @Override
     public int getHeight(SliceStyle style, SliceViewPolicy policy) {
-        boolean isSmall = policy.getMode() == MODE_SMALL;
-        if (!isValid()) {
-            return 0;
-        }
-        int height;
-        if (mAllImages) {
-            height = mGridContent.size() == 1
-                    ? isSmall ? mBigPicMinHeight : mBigPicMaxHeight
-                    : mLargestImageMode == ICON_IMAGE ? mMinHeight : mAllImagesHeight;
-        } else {
-            boolean twoLines = getMaxCellLineCount() > 1;
-            boolean hasImage = hasImage();
-            boolean iconImagesOrNone = mLargestImageMode == ICON_IMAGE
-                    || mLargestImageMode == UNKNOWN_IMAGE;
-            height = (twoLines && !isSmall)
-                    ? hasImage ? mMaxHeight : mMinHeight
-                    : iconImagesOrNone ? mMinHeight : mImageTextHeight;
-        }
-        int topPadding = isAllImages() && mRowIndex == 0
-                ? style.getGridTopPadding() : 0;
-        int bottomPadding = isAllImages() && mIsLastIndex
-                ? style.getGridBottomPadding() : 0;
-        return height + topPadding + bottomPadding;
+        return style.getGridHeight(this, policy);
     }
 
     /**
diff --git a/slices/view/src/main/java/androidx/slice/widget/ListContent.java b/slices/view/src/main/java/androidx/slice/widget/ListContent.java
index 6b1e084..3c5b46f 100644
--- a/slices/view/src/main/java/androidx/slice/widget/ListContent.java
+++ b/slices/view/src/main/java/androidx/slice/widget/ListContent.java
@@ -86,12 +86,12 @@
         mSliceActions = SliceMetadata.getSliceActions(slice);
         final SliceItem headerItem = findHeaderItem(slice);
         if (headerItem != null) {
-            mHeaderContent = new RowContent(mContext, headerItem, 0);
+            mHeaderContent = new RowContent(headerItem, 0);
             mRowItems.add(mHeaderContent);
         }
         final SliceItem seeMoreItem = getSeeMoreItem(slice);
         if (seeMoreItem != null) {
-            mSeeMoreContent = new RowContent(mContext, seeMoreItem, -1);
+            mSeeMoreContent = new RowContent(seeMoreItem, -1);
         }
 
         // Filter + create row items
@@ -103,13 +103,13 @@
                     HINT_TTL, HINT_LAST_UPDATED);
             if (!isNonRowContent && (FORMAT_ACTION.equals(format) || FORMAT_SLICE.equals(format))) {
                 if (mHeaderContent == null && !child.hasHint(HINT_LIST_ITEM)) {
-                    mHeaderContent = new RowContent(mContext, child, 0);
+                    mHeaderContent = new RowContent(child, 0);
                     mRowItems.add(0, mHeaderContent);
                 } else if (child.hasHint(HINT_LIST_ITEM)) {
                     if (child.hasHint(HINT_HORIZONTAL)) {
-                        mRowItems.add(new GridContent(mContext, child, i));
+                        mRowItems.add(new GridContent(child, i));
                     } else {
-                        mRowItems.add(new RowContent(mContext, child, i));
+                        mRowItems.add(new RowContent(child, i));
                     }
                 }
             }
diff --git a/slices/view/src/main/java/androidx/slice/widget/RowContent.java b/slices/view/src/main/java/androidx/slice/widget/RowContent.java
index 7f7825b..8ff7e1e 100644
--- a/slices/view/src/main/java/androidx/slice/widget/RowContent.java
+++ b/slices/view/src/main/java/androidx/slice/widget/RowContent.java
@@ -73,27 +73,10 @@
     private SliceItem mRange;
     private boolean mIsHeader;
     private int mLineCount = 0;
-    private int mMaxHeight;
-    private int mTextWithRangeHeight;
-    private int mSingleTextWithRangeHeight;
-    private int mMinHeight;
-    private int mRangeHeight;
 
-    public RowContent(Context context, SliceItem rowSlice, int position) {
+    public RowContent(SliceItem rowSlice, int position) {
         super(rowSlice, position);
         populate(rowSlice, position == 0);
-        if (context != null) {
-            mMaxHeight = context.getResources().getDimensionPixelSize(
-                    R.dimen.abc_slice_row_max_height);
-            mTextWithRangeHeight = context.getResources().getDimensionPixelSize(
-                    R.dimen.abc_slice_row_range_multi_text_height);
-            mSingleTextWithRangeHeight = context.getResources().getDimensionPixelSize(
-                    R.dimen.abc_slice_row_range_single_text_height);
-            mMinHeight = context.getResources().getDimensionPixelSize(
-                    R.dimen.abc_slice_row_min_height);
-            mRangeHeight = context.getResources().getDimensionPixelSize(
-                    R.dimen.abc_slice_row_range_height);
-        }
     }
 
     /**
@@ -229,6 +212,11 @@
     }
 
     /**
+     * @return whether this row represents a header or not.
+     */
+    public boolean getIsHeader() { return mIsHeader; }
+
+    /**
      * Sets whether this row represents a header or not.
      */
     public void setIsHeader(boolean isHeader) {
@@ -319,20 +307,7 @@
 
     @Override
     public int getHeight(SliceStyle style, SliceViewPolicy policy) {
-        int maxHeight = policy.getMaxSmallHeight() > 0 ? policy.getMaxSmallHeight() : mMaxHeight;
-        if (getRange() != null || policy.getMode() == MODE_LARGE) {
-            if (getRange() != null) {
-                // Range element always has set height and then the height of the text
-                // area on the row will vary depending on if 1 or 2 lines of text.
-                int textAreaHeight = getLineCount() > 1 ? mTextWithRangeHeight
-                        : mSingleTextWithRangeHeight;
-                return textAreaHeight + mRangeHeight;
-            } else {
-                return (getLineCount() > 1 || mIsHeader) ? maxHeight : mMinHeight;
-            }
-        } else {
-            return maxHeight;
-        }
+        return style.getRowHeight(this, policy);
     }
 
     /**
diff --git a/slices/view/src/main/java/androidx/slice/widget/RowView.java b/slices/view/src/main/java/androidx/slice/widget/RowView.java
index bda8c07..55cd5b4 100644
--- a/slices/view/src/main/java/androidx/slice/widget/RowView.java
+++ b/slices/view/src/main/java/androidx/slice/widget/RowView.java
@@ -32,8 +32,10 @@
 import static androidx.slice.core.SliceHints.SMALL_IMAGE;
 import static androidx.slice.core.SliceHints.SUBTYPE_MIN;
 import static androidx.slice.widget.EventInfo.ACTION_TYPE_BUTTON;
+import static androidx.slice.widget.EventInfo.ACTION_TYPE_SLIDER;
 import static androidx.slice.widget.EventInfo.ACTION_TYPE_TOGGLE;
 import static androidx.slice.widget.EventInfo.ROW_TYPE_LIST;
+import static androidx.slice.widget.EventInfo.ROW_TYPE_SLIDER;
 import static androidx.slice.widget.EventInfo.ROW_TYPE_TOGGLE;
 import static androidx.slice.widget.SliceView.MODE_SMALL;
 
@@ -619,6 +621,12 @@
                 mRangeItem.fireAction(getContext(),
                         new Intent().addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
                                 .putExtra(EXTRA_RANGE_VALUE, mRangeValue));
+                if (mObserver != null) {
+                    EventInfo info = new EventInfo(getMode(), ACTION_TYPE_SLIDER, ROW_TYPE_SLIDER,
+                            mRowIndex);
+                    info.state = mRangeValue;
+                    mObserver.onSliceAction(info, mRangeItem);
+                }
             } catch (CanceledException e) {
                 Log.e(TAG, "PendingIntent for slice cannot be sent", e);
             }
diff --git a/slices/view/src/main/java/androidx/slice/widget/SliceContent.java b/slices/view/src/main/java/androidx/slice/widget/SliceContent.java
index 0e25af6..75f3c87 100644
--- a/slices/view/src/main/java/androidx/slice/widget/SliceContent.java
+++ b/slices/view/src/main/java/androidx/slice/widget/SliceContent.java
@@ -123,6 +123,11 @@
     }
 
     /**
+     * @return the row index of this content, or -1 if no row index is set.
+     */
+    public int getRowIndex() { return mRowIndex; }
+
+    /**
      * @return the desired height of this content based on the provided mode and context or the
      * default height if context is null.
      */
diff --git a/slices/view/src/main/java/androidx/slice/widget/SliceStyle.java b/slices/view/src/main/java/androidx/slice/widget/SliceStyle.java
index 7923827..af811b1 100644
--- a/slices/view/src/main/java/androidx/slice/widget/SliceStyle.java
+++ b/slices/view/src/main/java/androidx/slice/widget/SliceStyle.java
@@ -17,12 +17,18 @@
 package androidx.slice.widget;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
 
 import androidx.annotation.RestrictTo;
 import androidx.slice.view.R;
 
+import static androidx.slice.core.SliceHints.ICON_IMAGE;
+import static androidx.slice.core.SliceHints.UNKNOWN_IMAGE;
+import static androidx.slice.widget.SliceView.MODE_LARGE;
+import static androidx.slice.widget.SliceView.MODE_SMALL;
+
 /**
  * Holds style information shared between child views of a slice
  * @hide
@@ -44,6 +50,19 @@
     private int mGridTopPadding;
     private int mGridBottomPadding;
 
+    private int mRowMaxHeight;
+    private int mRowTextWithRangeHeight;
+    private int mRowSingleTextWithRangeHeight;
+    private int mRowMinHeight;
+    private int mRowRangeHeight;
+
+    private int mGridBigPicMinHeight;
+    private int mGridBigPicMaxHeight;
+    private int mGridAllImagesHeight;
+    private int mGridImageTextHeight;
+    private int mGridMaxHeight;
+    private int mGridMinHeight;
+
     public SliceStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SliceView,
                 defStyleAttr, defStyleRes);
@@ -78,6 +97,25 @@
         } finally {
             a.recycle();
         }
+
+        // Note: The above colors and dimensions are styleable, but the below ones are not.
+
+        final Resources r = context.getResources();
+
+        mRowMaxHeight = r.getDimensionPixelSize(R.dimen.abc_slice_row_max_height);
+        mRowTextWithRangeHeight = r.getDimensionPixelSize(
+                R.dimen.abc_slice_row_range_multi_text_height);
+        mRowSingleTextWithRangeHeight = r.getDimensionPixelSize(
+                R.dimen.abc_slice_row_range_single_text_height);
+        mRowMinHeight = r.getDimensionPixelSize(R.dimen.abc_slice_row_min_height);
+        mRowRangeHeight = r.getDimensionPixelSize(R.dimen.abc_slice_row_range_height);
+
+        mGridBigPicMinHeight = r.getDimensionPixelSize(R.dimen.abc_slice_big_pic_min_height);
+        mGridBigPicMaxHeight = r.getDimensionPixelSize(R.dimen.abc_slice_big_pic_max_height);
+        mGridAllImagesHeight = r.getDimensionPixelSize(R.dimen.abc_slice_grid_image_only_height);
+        mGridImageTextHeight = r.getDimensionPixelSize(R.dimen.abc_slice_grid_image_text_height);
+        mGridMinHeight = r.getDimensionPixelSize(R.dimen.abc_slice_grid_min_height);
+        mGridMaxHeight = r.getDimensionPixelSize(R.dimen.abc_slice_grid_max_height);
     }
 
     public void setTintColor(int tint) {
@@ -139,4 +177,49 @@
     public int getGridBottomPadding() {
         return mGridBottomPadding;
     }
+
+    public int getRowHeight(RowContent row, SliceViewPolicy policy) {
+        int maxHeight = policy.getMaxSmallHeight() > 0 ? policy.getMaxSmallHeight() : mRowMaxHeight;
+        if (row.getRange() != null || policy.getMode() == MODE_LARGE) {
+            if (row.getRange() != null) {
+                // Range element always has set height and then the height of the text
+                // area on the row will vary depending on if 1 or 2 lines of text.
+                int textAreaHeight = row.getLineCount() > 1 ? mRowTextWithRangeHeight
+                        : mRowSingleTextWithRangeHeight;
+                return textAreaHeight + mRowRangeHeight;
+            } else {
+                return (row.getLineCount() > 1 || row.getIsHeader()) ? maxHeight : mRowMinHeight;
+            }
+        } else {
+            return maxHeight;
+        }
+    }
+
+    public int getGridHeight(GridContent grid, SliceViewPolicy policy) {
+        boolean isSmall = policy.getMode() == MODE_SMALL;
+        if (!grid.isValid()) {
+            return 0;
+        }
+        int largestImageMode = grid.getLargestImageMode();
+        int height;
+        if (grid.isAllImages()) {
+            height = grid.getGridContent().size() == 1
+                    ? isSmall ? mGridBigPicMinHeight : mGridBigPicMaxHeight
+                    : largestImageMode == ICON_IMAGE ? mGridMinHeight
+                            : mGridAllImagesHeight;
+        } else {
+            boolean twoLines = grid.getMaxCellLineCount() > 1;
+            boolean hasImage = grid.hasImage();
+            boolean iconImagesOrNone = largestImageMode == ICON_IMAGE
+                    || largestImageMode == UNKNOWN_IMAGE;
+            height = (twoLines && !isSmall)
+                    ? hasImage ? mGridMaxHeight : mGridMinHeight
+                    : iconImagesOrNone ? mGridMinHeight : mGridImageTextHeight;
+        }
+        int topPadding = grid.isAllImages() && grid.getRowIndex() == 0
+                ? mGridTopPadding : 0;
+        int bottomPadding = grid.isAllImages() && grid.getIsLastIndex()
+                ? mGridBottomPadding : 0;
+        return height + topPadding + bottomPadding;
+    }
 }
diff --git a/swiperefreshlayout/api/1.0.0.txt b/swiperefreshlayout/api/1.0.0.txt
index 49e8991..d64e003 100644
--- a/swiperefreshlayout/api/1.0.0.txt
+++ b/swiperefreshlayout/api/1.0.0.txt
@@ -1,8 +1,9 @@
+// Signature format: 2.0
 package androidx.swiperefreshlayout.widget {
 
   public class CircularProgressDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable {
     ctor public CircularProgressDrawable(android.content.Context);
-    method public void draw(android.graphics.Canvas);
+    method public void draw(android.graphics.Canvas!);
     method public boolean getArrowEnabled();
     method public float getArrowHeight();
     method public float getArrowScale();
@@ -23,7 +24,7 @@
     method public void setArrowScale(float);
     method public void setBackgroundColor(int);
     method public void setCenterRadius(float);
-    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setColorFilter(android.graphics.ColorFilter!);
     method public void setColorSchemeColors(int...);
     method public void setProgressRotation(float);
     method public void setStartEndTrim(float, float);
@@ -38,27 +39,27 @@
 
   public class SwipeRefreshLayout extends android.view.ViewGroup implements androidx.core.view.NestedScrollingChild androidx.core.view.NestedScrollingParent {
     ctor public SwipeRefreshLayout(android.content.Context);
-    ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet);
+    ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet?);
     method public boolean canChildScrollUp();
     method public int getProgressCircleDiameter();
     method public int getProgressViewEndOffset();
     method public int getProgressViewStartOffset();
     method public boolean isRefreshing();
     method public void onMeasure(int, int);
-    method public deprecated void setColorScheme(int...);
-    method public void setColorSchemeColors(int...);
-    method public void setColorSchemeResources(int...);
+    method @Deprecated public void setColorScheme(@ColorRes int...!);
+    method public void setColorSchemeColors(@ColorInt int...!);
+    method public void setColorSchemeResources(@ColorRes int...!);
     method public void setDistanceToTriggerSync(int);
-    method public void setOnChildScrollUpCallback(androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnChildScrollUpCallback);
-    method public void setOnRefreshListener(androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener);
-    method public deprecated void setProgressBackgroundColor(int);
-    method public void setProgressBackgroundColorSchemeColor(int);
-    method public void setProgressBackgroundColorSchemeResource(int);
+    method public void setOnChildScrollUpCallback(androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnChildScrollUpCallback?);
+    method public void setOnRefreshListener(androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener?);
+    method @Deprecated public void setProgressBackgroundColor(int);
+    method public void setProgressBackgroundColorSchemeColor(@ColorInt int);
+    method public void setProgressBackgroundColorSchemeResource(@ColorRes int);
     method public void setProgressViewEndTarget(boolean, int);
     method public void setProgressViewOffset(boolean, int, int);
     method public void setRefreshing(boolean);
     method public void setSize(int);
-    method public void setSlingshotDistance(int);
+    method public void setSlingshotDistance(@Px int);
     field public static final int DEFAULT = 1; // 0x1
     field public static final int DEFAULT_SLINGSHOT_DISTANCE = -1; // 0xffffffff
     field public static final int LARGE = 0; // 0x0
@@ -66,12 +67,12 @@
     field protected int mOriginalOffsetTop;
   }
 
-  public static abstract interface SwipeRefreshLayout.OnChildScrollUpCallback {
-    method public abstract boolean canChildScrollUp(androidx.swiperefreshlayout.widget.SwipeRefreshLayout, android.view.View);
+  public static interface SwipeRefreshLayout.OnChildScrollUpCallback {
+    method public boolean canChildScrollUp(androidx.swiperefreshlayout.widget.SwipeRefreshLayout, android.view.View?);
   }
 
-  public static abstract interface SwipeRefreshLayout.OnRefreshListener {
-    method public abstract void onRefresh();
+  public static interface SwipeRefreshLayout.OnRefreshListener {
+    method public void onRefresh();
   }
 
 }
diff --git a/textclassifier/api/1.0.0-alpha01.txt b/textclassifier/api/1.0.0-alpha01.txt
index 7cdb40d..2d0c5d9 100644
--- a/textclassifier/api/1.0.0-alpha01.txt
+++ b/textclassifier/api/1.0.0-alpha01.txt
@@ -7,6 +7,7 @@
     method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String!);
     method public String getEntityType(int);
     method @IntRange(from=0) public int getEntityTypeCount();
+    method public android.os.Bundle getExtras();
     method public String? getId();
     method public CharSequence? getText();
     method public android.os.Bundle toBundle();
@@ -17,6 +18,7 @@
     method public androidx.textclassifier.TextClassification.Builder addAction(androidx.core.app.RemoteActionCompat);
     method public androidx.textclassifier.TextClassification build();
     method public androidx.textclassifier.TextClassification.Builder! setEntityType(String, @FloatRange(from=0.0, to=1.0) float);
+    method public androidx.textclassifier.TextClassification.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextClassification.Builder setId(String?);
     method public androidx.textclassifier.TextClassification.Builder! setText(CharSequence?);
   }
@@ -25,6 +27,7 @@
     method public static androidx.textclassifier.TextClassification.Request! createFromBundle(android.os.Bundle);
     method public androidx.core.os.LocaleListCompat? getDefaultLocales();
     method @IntRange(from=0) public int getEndIndex();
+    method public android.os.Bundle getExtras();
     method public Long? getReferenceTime();
     method @IntRange(from=0) public int getStartIndex();
     method public CharSequence getText();
@@ -35,6 +38,7 @@
     ctor public TextClassification.Request.Builder(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
     method public androidx.textclassifier.TextClassification.Request build();
     method public androidx.textclassifier.TextClassification.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextClassification.Request.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextClassification.Request.Builder setReferenceTime(Long?);
   }
 
@@ -113,6 +117,7 @@
   public final class TextLinks {
     method public int apply(android.text.Spannable, androidx.textclassifier.TextClassifier, androidx.textclassifier.TextLinksParams);
     method public static androidx.textclassifier.TextLinks createFromBundle(android.os.Bundle);
+    method public android.os.Bundle getExtras();
     method public java.util.Collection<androidx.textclassifier.TextLinks.TextLink> getLinks();
     method public android.os.Bundle toBundle();
     field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0
@@ -129,6 +134,7 @@
     method public androidx.textclassifier.TextLinks.Builder addLink(int, int, java.util.Map<java.lang.String,java.lang.Float>);
     method public androidx.textclassifier.TextLinks build();
     method public androidx.textclassifier.TextLinks.Builder clearTextLinks();
+    method public androidx.textclassifier.TextLinks.Builder setExtras(android.os.Bundle?);
   }
 
   public static class TextLinks.DefaultTextLinkSpan extends androidx.textclassifier.TextLinks.TextLinkSpan {
@@ -141,6 +147,7 @@
     method public static androidx.textclassifier.TextLinks.Request createFromBundle(android.os.Bundle);
     method public androidx.core.os.LocaleListCompat? getDefaultLocales();
     method public androidx.textclassifier.TextClassifier.EntityConfig getEntityConfig();
+    method public android.os.Bundle getExtras();
     method public Long? getReferenceTime();
     method public CharSequence getText();
     method public android.os.Bundle toBundle();
@@ -151,6 +158,7 @@
     method public androidx.textclassifier.TextLinks.Request build();
     method public androidx.textclassifier.TextLinks.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
     method public androidx.textclassifier.TextLinks.Request.Builder setEntityConfig(androidx.textclassifier.TextClassifier.EntityConfig?);
+    method public androidx.textclassifier.TextLinks.Request.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextLinks.Request.Builder setReferenceTime(Long?);
   }
 
@@ -196,6 +204,7 @@
     method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String!);
     method public String getEntity(int);
     method @IntRange(from=0) public int getEntityCount();
+    method public android.os.Bundle getExtras();
     method public String? getId();
     method public int getSelectionEndIndex();
     method public int getSelectionStartIndex();
@@ -206,6 +215,7 @@
     ctor public TextSelection.Builder(@IntRange(from=0) int, @IntRange(from=0) int);
     method public androidx.textclassifier.TextSelection build();
     method public androidx.textclassifier.TextSelection.Builder setEntityType(String, @FloatRange(from=0.0, to=1.0) float);
+    method public androidx.textclassifier.TextSelection.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextSelection.Builder setId(String?);
   }
 
@@ -213,6 +223,7 @@
     method public static androidx.textclassifier.TextSelection.Request createFromBundle(android.os.Bundle);
     method public androidx.core.os.LocaleListCompat? getDefaultLocales();
     method @IntRange(from=0) public int getEndIndex();
+    method public android.os.Bundle getExtras();
     method @IntRange(from=0) public int getStartIndex();
     method public CharSequence getText();
     method public android.os.Bundle toBundle();
@@ -222,6 +233,7 @@
     ctor public TextSelection.Request.Builder(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
     method public androidx.textclassifier.TextSelection.Request build();
     method public androidx.textclassifier.TextSelection.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextSelection.Request.Builder setExtras(android.os.Bundle?);
   }
 
 }
diff --git a/textclassifier/api/current.txt b/textclassifier/api/current.txt
index 7cdb40d..2d0c5d9 100644
--- a/textclassifier/api/current.txt
+++ b/textclassifier/api/current.txt
@@ -7,6 +7,7 @@
     method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String!);
     method public String getEntityType(int);
     method @IntRange(from=0) public int getEntityTypeCount();
+    method public android.os.Bundle getExtras();
     method public String? getId();
     method public CharSequence? getText();
     method public android.os.Bundle toBundle();
@@ -17,6 +18,7 @@
     method public androidx.textclassifier.TextClassification.Builder addAction(androidx.core.app.RemoteActionCompat);
     method public androidx.textclassifier.TextClassification build();
     method public androidx.textclassifier.TextClassification.Builder! setEntityType(String, @FloatRange(from=0.0, to=1.0) float);
+    method public androidx.textclassifier.TextClassification.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextClassification.Builder setId(String?);
     method public androidx.textclassifier.TextClassification.Builder! setText(CharSequence?);
   }
@@ -25,6 +27,7 @@
     method public static androidx.textclassifier.TextClassification.Request! createFromBundle(android.os.Bundle);
     method public androidx.core.os.LocaleListCompat? getDefaultLocales();
     method @IntRange(from=0) public int getEndIndex();
+    method public android.os.Bundle getExtras();
     method public Long? getReferenceTime();
     method @IntRange(from=0) public int getStartIndex();
     method public CharSequence getText();
@@ -35,6 +38,7 @@
     ctor public TextClassification.Request.Builder(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
     method public androidx.textclassifier.TextClassification.Request build();
     method public androidx.textclassifier.TextClassification.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextClassification.Request.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextClassification.Request.Builder setReferenceTime(Long?);
   }
 
@@ -113,6 +117,7 @@
   public final class TextLinks {
     method public int apply(android.text.Spannable, androidx.textclassifier.TextClassifier, androidx.textclassifier.TextLinksParams);
     method public static androidx.textclassifier.TextLinks createFromBundle(android.os.Bundle);
+    method public android.os.Bundle getExtras();
     method public java.util.Collection<androidx.textclassifier.TextLinks.TextLink> getLinks();
     method public android.os.Bundle toBundle();
     field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0
@@ -129,6 +134,7 @@
     method public androidx.textclassifier.TextLinks.Builder addLink(int, int, java.util.Map<java.lang.String,java.lang.Float>);
     method public androidx.textclassifier.TextLinks build();
     method public androidx.textclassifier.TextLinks.Builder clearTextLinks();
+    method public androidx.textclassifier.TextLinks.Builder setExtras(android.os.Bundle?);
   }
 
   public static class TextLinks.DefaultTextLinkSpan extends androidx.textclassifier.TextLinks.TextLinkSpan {
@@ -141,6 +147,7 @@
     method public static androidx.textclassifier.TextLinks.Request createFromBundle(android.os.Bundle);
     method public androidx.core.os.LocaleListCompat? getDefaultLocales();
     method public androidx.textclassifier.TextClassifier.EntityConfig getEntityConfig();
+    method public android.os.Bundle getExtras();
     method public Long? getReferenceTime();
     method public CharSequence getText();
     method public android.os.Bundle toBundle();
@@ -151,6 +158,7 @@
     method public androidx.textclassifier.TextLinks.Request build();
     method public androidx.textclassifier.TextLinks.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
     method public androidx.textclassifier.TextLinks.Request.Builder setEntityConfig(androidx.textclassifier.TextClassifier.EntityConfig?);
+    method public androidx.textclassifier.TextLinks.Request.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextLinks.Request.Builder setReferenceTime(Long?);
   }
 
@@ -196,6 +204,7 @@
     method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String!);
     method public String getEntity(int);
     method @IntRange(from=0) public int getEntityCount();
+    method public android.os.Bundle getExtras();
     method public String? getId();
     method public int getSelectionEndIndex();
     method public int getSelectionStartIndex();
@@ -206,6 +215,7 @@
     ctor public TextSelection.Builder(@IntRange(from=0) int, @IntRange(from=0) int);
     method public androidx.textclassifier.TextSelection build();
     method public androidx.textclassifier.TextSelection.Builder setEntityType(String, @FloatRange(from=0.0, to=1.0) float);
+    method public androidx.textclassifier.TextSelection.Builder setExtras(android.os.Bundle?);
     method public androidx.textclassifier.TextSelection.Builder setId(String?);
   }
 
@@ -213,6 +223,7 @@
     method public static androidx.textclassifier.TextSelection.Request createFromBundle(android.os.Bundle);
     method public androidx.core.os.LocaleListCompat? getDefaultLocales();
     method @IntRange(from=0) public int getEndIndex();
+    method public android.os.Bundle getExtras();
     method @IntRange(from=0) public int getStartIndex();
     method public CharSequence getText();
     method public android.os.Bundle toBundle();
@@ -222,6 +233,7 @@
     ctor public TextSelection.Request.Builder(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
     method public androidx.textclassifier.TextSelection.Request build();
     method public androidx.textclassifier.TextSelection.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextSelection.Request.Builder setExtras(android.os.Bundle?);
   }
 
 }
diff --git a/textclassifier/integration-tests/testapp/src/main/java/androidx/textclassifier/integration/testapp/SimpleTextClassifier.java b/textclassifier/integration-tests/testapp/src/main/java/androidx/textclassifier/integration/testapp/SimpleTextClassifier.java
index e1ca0e4a..f74dde0 100644
--- a/textclassifier/integration-tests/testapp/src/main/java/androidx/textclassifier/integration/testapp/SimpleTextClassifier.java
+++ b/textclassifier/integration-tests/testapp/src/main/java/androidx/textclassifier/integration/testapp/SimpleTextClassifier.java
@@ -77,8 +77,7 @@
                 builder.addLink(
                         spannable.getSpanStart(urlSpan),
                         spannable.getSpanEnd(urlSpan),
-                        Collections.singletonMap(TextClassifier.TYPE_URL, 1.0f),
-                        urlSpan);
+                        Collections.singletonMap(TextClassifier.TYPE_URL, 1.0f));
             }
         }
         return builder.build();
diff --git a/textclassifier/src/androidTest/java/androidx/textclassifier/LegacyTextClassifierTest.java b/textclassifier/src/androidTest/java/androidx/textclassifier/LegacyTextClassifierTest.java
index 6363f1d..18cec4f 100644
--- a/textclassifier/src/androidTest/java/androidx/textclassifier/LegacyTextClassifierTest.java
+++ b/textclassifier/src/androidTest/java/androidx/textclassifier/LegacyTextClassifierTest.java
@@ -26,7 +26,6 @@
 
 import android.app.PendingIntent;
 import android.content.Intent;
-import android.text.style.URLSpan;
 
 import androidx.collection.ArraySet;
 import androidx.core.app.RemoteActionCompat;
@@ -165,8 +164,6 @@
         assertThat(textLink.getStart()).isEqualTo(START);
         assertThat(textLink.getEnd()).isEqualTo(text.length());
         assertThat(textLink.getConfidenceScore(TextClassifier.TYPE_URL)).isEqualTo(1.0f);
-        URLSpan urlSpan = textLink.getUrlSpan();
-        assertThat(urlSpan.getURL()).contains(URL);
     }
 
     @Test
@@ -183,8 +180,6 @@
         assertThat(textLink.getStart()).isEqualTo(START);
         assertThat(textLink.getEnd()).isEqualTo(text.length());
         assertThat(textLink.getConfidenceScore(TextClassifier.TYPE_EMAIL)).isEqualTo(1.0f);
-        URLSpan urlSpan = textLink.getUrlSpan();
-        assertThat(urlSpan.getURL()).contains(EMAIL);
     }
 
     @Test
@@ -201,8 +196,6 @@
         assertThat(textLink.getStart()).isEqualTo(START);
         assertThat(textLink.getEnd()).isEqualTo(text.length());
         assertThat(textLink.getConfidenceScore(TextClassifier.TYPE_PHONE)).isEqualTo(1.0f);
-        URLSpan urlSpan = textLink.getUrlSpan();
-        assertThat(urlSpan.getURL()).contains(PHONE_NUMBER);
     }
 
     @Test
@@ -258,7 +251,6 @@
             String entityType = textLink.getEntity(0);
             assertThat(expectedEntities).contains(entityType);
             assertThat(textLink.getConfidenceScore(entityType)).isEqualTo(1.0f);
-            assertThat(textLink.getUrlSpan().getURL()).contains(entityToSpanText(entityType));
             expectedEntities.remove(entityType);
         }
     }
diff --git a/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java b/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java
index 64b3e40..620f94f 100644
--- a/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java
+++ b/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java
@@ -25,6 +25,7 @@
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.Color;
+import android.os.Bundle;
 import android.os.LocaleList;
 import android.text.SpannableString;
 
@@ -54,6 +55,12 @@
     private static final LocaleListCompat LOCALE_LIST =
             LocaleListCompat.forLanguageTags("en-US,de-DE");
 
+    private static final String BUNDLE_KEY = "key";
+    private static final String BUNDLE_VALUE = "value";
+    private static final Bundle BUNDLE = new Bundle();
+    static {
+        BUNDLE.putString(BUNDLE_KEY, BUNDLE_VALUE);
+    }
 
     private static final String PRIMARY_LABEL = "primaryLabel";
     private static final String PRIMARY_DESCRIPTION = "primaryDescription";
@@ -84,15 +91,18 @@
 
     @Test
     public void testBundle() {
-        final TextClassification reference = createExpectedBuilderWithRemoteActions().build();
+        final TextClassification reference = createExpectedBuilderWithRemoteActions()
+                .setExtras(BUNDLE).build();
         // Serialize/deserialize.
         final TextClassification result = TextClassification.createFromBundle(reference.toBundle());
         assertTextClassificationEquals(result, reference);
+        assertEquals(BUNDLE_VALUE, result.getExtras().getString(BUNDLE_KEY));
     }
 
     @Test
     public void testBundleRequest() {
-        TextClassification.Request reference = createTextClassificationRequest();
+        TextClassification.Request reference = createTextClassificationRequestBuilder()
+                .setExtras(BUNDLE).build();
 
         // Serialize/deserialize.
         TextClassification.Request result = TextClassification.Request.createFromBundle(
@@ -103,6 +113,7 @@
         assertEquals(END_INDEX, result.getEndIndex());
         assertEquals(LOCALE_LIST.toLanguageTags(), result.getDefaultLocales().toLanguageTags());
         assertEquals(REFERENCE_TIME_IN_MS, result.getReferenceTime());
+        assertEquals(BUNDLE_VALUE, result.getExtras().getString(BUNDLE_KEY));
     }
 
     @Test
@@ -122,7 +133,7 @@
     @Test
     @SdkSuppress(minSdkVersion = 28)
     public void testToPlatformRequest() {
-        TextClassification.Request request = createTextClassificationRequest();
+        TextClassification.Request request = createTextClassificationRequestBuilder().build();
         android.view.textclassifier.TextClassification.Request platformRequest =
                 (android.view.textclassifier.TextClassification.Request) request.toPlatform();
 
@@ -241,11 +252,10 @@
         assertThat(platformTextClassification.getIntent()).isNull();
     }
 
-    private static TextClassification.Request createTextClassificationRequest() {
+    private static TextClassification.Request.Builder createTextClassificationRequestBuilder() {
         return new TextClassification.Request.Builder(TEXT, START_INDEX, END_INDEX)
                 .setDefaultLocales(LOCALE_LIST)
-                .setReferenceTime(REFERENCE_TIME_IN_MS)
-                .build();
+                .setReferenceTime(REFERENCE_TIME_IN_MS);
     }
 
     private TextClassification.Builder createExpectedBuilder() {
diff --git a/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinkSpanTest.java b/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinkSpanTest.java
index 10d9fee..b0dfbe6 100644
--- a/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinkSpanTest.java
+++ b/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinkSpanTest.java
@@ -102,7 +102,7 @@
 
         final Map<String, Float> scores = new ArrayMap<>();
         scores.put(TextClassifier.TYPE_EMAIL, 1f);
-        mTextLink = new TextLink(0, ENTITY.length(), scores, null);
+        mTextLink = new TextLink(0, ENTITY.length(), scores);
     }
 
     @Test
diff --git a/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinksTest.java b/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinksTest.java
index 764389c..8bae29d 100644
--- a/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinksTest.java
+++ b/textclassifier/src/androidTest/java/androidx/textclassifier/TextLinksTest.java
@@ -26,9 +26,9 @@
 import static org.junit.Assert.assertEquals;
 
 import android.content.Context;
+import android.os.Bundle;
 import android.text.Spannable;
 import android.text.SpannableString;
-import android.text.style.URLSpan;
 
 import androidx.collection.ArrayMap;
 import androidx.core.os.LocaleListCompat;
@@ -43,7 +43,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -64,6 +63,13 @@
 
     private Map<String, Float> mDummyEntityScores;
 
+    private static final String BUNDLE_KEY = "key";
+    private static final String BUNDLE_VALUE = "value";
+    private static final Bundle BUNDLE = new Bundle();
+    static {
+        BUNDLE.putString(BUNDLE_KEY, BUNDLE_VALUE);
+    }
+
     @Before
     public void setup() {
         mDummyEntityScores = new ArrayMap<>();
@@ -91,17 +97,19 @@
         final TextLinks reference = new TextLinks.Builder(FULL_TEXT.toString())
                 .addLink(0, 4, getEntityScores(0.f, 0.f, 1.f))
                 .addLink(5, 12, getEntityScores(.8f, .1f, .5f))
+                .setExtras(BUNDLE)
                 .build();
 
         // Serialize/deserialize.
         final TextLinks result = TextLinks.createFromBundle(reference.toBundle());
 
         assertTextLinks(result);
+        assertEquals(BUNDLE_VALUE, result.getExtras().getString(BUNDLE_KEY));
     }
 
     @Test
     public void testBundleRequest() {
-        TextLinks.Request reference = createTextLinksRequest();
+        TextLinks.Request reference = createTextLinksRequest().setExtras(BUNDLE).build();
 
         // Serialize/deserialize.
         TextLinks.Request result = TextLinks.Request.createFromBundle(reference.toBundle());
@@ -113,6 +121,7 @@
                 Arrays.asList("default", "excluded")))
                 .containsExactly("included", "default");
         assertThat(result.getReferenceTime()).isEqualTo(REFERENCE_TIME);
+        assertEquals(BUNDLE_VALUE, result.getExtras().getString(BUNDLE_KEY));
     }
 
     @Test
@@ -128,7 +137,7 @@
     @Test
     @SdkSuppress(minSdkVersion = 28)
     public void testConvertToPlatformRequest() {
-        TextLinks.Request request = createTextLinksRequest();
+        TextLinks.Request request = createTextLinksRequest().build();
 
         android.view.textclassifier.TextLinks.Request platformRequest = request.toPlatform();
         assertEquals(FULL_TEXT, platformRequest.getText());
@@ -153,19 +162,6 @@
     }
 
     @Test
-    public void testTextLinksWithUrlSpan() {
-        final String url = "http://www.google.com";
-        final TextLinks textLinks = new TextLinks.Builder(FULL_TEXT.toString())
-                .addLink(0, 4, getEntityScores(0.f, 0.f, 1.f), new URLSpan(url))
-                .build();
-
-        Collection<TextLinks.TextLink> links = textLinks.getLinks();
-        assertThat(links).hasSize(1);
-        TextLinks.TextLink textLink = links.iterator().next();
-        assertThat(textLink.getUrlSpan().getURL()).isEqualTo(url);
-    }
-
-    @Test
     public void testApply_spannable_no_link() {
         SpannableString text = new SpannableString(FULL_TEXT);
         TextLinks textLinks = new TextLinks.Builder(text).build();
@@ -206,7 +202,7 @@
                 .isEqualTo(TextClassifier.TYPE_PHONE);
     }
 
-    private TextLinks.Request createTextLinksRequest() {
+    private TextLinks.Request.Builder createTextLinksRequest() {
         EntityConfig entityConfig = new EntityConfig.Builder()
                 .setIncludedEntityTypes(Arrays.asList("included"))
                 .setExcludedEntityTypes(Arrays.asList("excluded"))
@@ -216,8 +212,7 @@
         return new TextLinks.Request.Builder(FULL_TEXT)
                 .setDefaultLocales(LOCALE_LIST)
                 .setEntityConfig(entityConfig)
-                .setReferenceTime(REFERENCE_TIME)
-                .build();
+                .setReferenceTime(REFERENCE_TIME);
     }
 
     private void assertTextLinks(TextLinks textLinks) {
diff --git a/textclassifier/src/androidTest/java/androidx/textclassifier/TextSelectionTest.java b/textclassifier/src/androidTest/java/androidx/textclassifier/TextSelectionTest.java
index ae15b09..52c7290 100644
--- a/textclassifier/src/androidTest/java/androidx/textclassifier/TextSelectionTest.java
+++ b/textclassifier/src/androidTest/java/androidx/textclassifier/TextSelectionTest.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertEquals;
 
 import android.os.Build;
+import android.os.Bundle;
 import android.os.LocaleList;
 
 import androidx.core.os.LocaleListCompat;
@@ -48,9 +49,16 @@
     private static final LocaleListCompat LOCALE_LIST =
             LocaleListCompat.forLanguageTags("en-US,de-DE");
 
+    private static final String BUNDLE_KEY = "key";
+    private static final String BUNDLE_VALUE = "value";
+    private static final Bundle BUNDLE = new Bundle();
+    static {
+        BUNDLE.putString(BUNDLE_KEY, BUNDLE_VALUE);
+    }
+
     @Test
     public void testParcel() {
-        TextSelection reference = createTextSelection();
+        TextSelection reference = createTextSelection().setExtras(BUNDLE).build();
 
         // Serialize/deserialize.
         final TextSelection result = TextSelection.createFromBundle(reference.toBundle());
@@ -58,6 +66,7 @@
         assertEquals(START_INDEX, result.getSelectionStartIndex());
         assertEquals(END_INDEX, result.getSelectionEndIndex());
         assertEquals(ID, result.getId());
+        assertEquals(BUNDLE_VALUE, result.getExtras().getString(BUNDLE_KEY));
 
         assertThat(result.getEntityCount()).isEqualTo(3);
         assertThat(result.getEntity(0)).isEqualTo(TextClassifier.TYPE_ADDRESS);
@@ -79,6 +88,7 @@
         TextSelection.Request reference =
                 new TextSelection.Request.Builder(text, startIndex, endIndex)
                         .setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"))
+                        .setExtras(BUNDLE)
                         .build();
 
         // Serialize/deserialize.
@@ -88,6 +98,7 @@
         assertEquals(startIndex, result.getStartIndex());
         assertEquals(endIndex, result.getEndIndex());
         assertEquals("en-US,de-DE", result.getDefaultLocales().toLanguageTags());
+        assertEquals(BUNDLE_VALUE, result.getExtras().getString(BUNDLE_KEY));
     }
 
     @Test
@@ -160,7 +171,7 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O, maxSdkVersion = Build.VERSION_CODES.O_MR1)
     public void testToPlatform_O() {
-        TextSelection reference = createTextSelection();
+        TextSelection reference = createTextSelection().build();
 
         android.view.textclassifier.TextSelection platformTextSelection =
                 (android.view.textclassifier.TextSelection) reference.toPlatform();
@@ -172,7 +183,7 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
     public void testToPlatform_P() {
-        TextSelection reference = createTextSelection();
+        TextSelection reference = createTextSelection().build();
 
         android.view.textclassifier.TextSelection platformTextSelection =
                 (android.view.textclassifier.TextSelection) reference.toPlatform();
@@ -195,12 +206,11 @@
                 .isWithin(EPSILON).of(URL_SCORE);
     }
 
-    private TextSelection createTextSelection() {
+    private TextSelection.Builder createTextSelection() {
         return new TextSelection.Builder(START_INDEX, END_INDEX)
                 .setId(ID)
                 .setEntityType(TextClassifier.TYPE_ADDRESS, ADDRESS_SCORE)
                 .setEntityType(TextClassifier.TYPE_PHONE, PHONE_SCORE)
-                .setEntityType(TextClassifier.TYPE_URL, URL_SCORE)
-                .build();
+                .setEntityType(TextClassifier.TYPE_URL, URL_SCORE);
     }
 }
diff --git a/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java b/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java
index b55e708..1906b4c 100644
--- a/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java
+++ b/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java
@@ -16,6 +16,7 @@
 
 package androidx.textclassifier;
 
+import android.os.Build;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
@@ -38,6 +39,16 @@
 
     private BundleUtils() {}
 
+    /** Compat wrapper for deepCopy. */
+    static Bundle deepCopy(Bundle bundle) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            return bundle.deepCopy();
+        } else {
+            // TODO: actually perform a deep copy.
+            return (Bundle) bundle.clone();
+        }
+    }
+
     /** Serializes a string keyed map to a bundle, or clears it if null is passed. */
     static void putMap(
             @NonNull Bundle bundle, @NonNull String key, @Nullable Map<String, Float> map) {
diff --git a/textclassifier/src/main/java/androidx/textclassifier/LegacyTextClassifier.java b/textclassifier/src/main/java/androidx/textclassifier/LegacyTextClassifier.java
index c07a9ef..439c1f0 100644
--- a/textclassifier/src/main/java/androidx/textclassifier/LegacyTextClassifier.java
+++ b/textclassifier/src/main/java/androidx/textclassifier/LegacyTextClassifier.java
@@ -144,8 +144,7 @@
                 builder.addLink(
                         spannable.getSpanStart(urlSpan),
                         spannable.getSpanEnd(urlSpan),
-                        Collections.singletonMap(entityType, 1.0f),
-                        urlSpan);
+                        Collections.singletonMap(entityType, 1.0f));
             }
         }
     }
diff --git a/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java b/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java
index 9a381f8..134f213 100644
--- a/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java
+++ b/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java
@@ -75,6 +75,7 @@
     private static final String EXTRA_ACTIONS = "actions";
     private static final String EXTRA_ENTITY_CONFIDENCE = "entity_conf";
     private static final String EXTRA_ID = "id";
+    private static final String EXTRA_EXTRAS = "extras";
     private static final IconCompat NO_ICON =
             IconCompat.createWithData(new byte[0], 0, 0);
 
@@ -88,16 +89,19 @@
     @NonNull private final List<RemoteActionCompat> mActions;
     @NonNull private final EntityConfidence mEntityConfidence;
     @Nullable private final String mId;
+    @NonNull private final Bundle mExtras;
 
     TextClassification(
             @Nullable String text,
             @NonNull List<RemoteActionCompat> actions,
             @NonNull EntityConfidence entityConfidence,
-            @Nullable String id) {
+            @Nullable String id,
+            @NonNull Bundle extras) {
         mText = text;
         mActions = actions;
         mEntityConfidence = entityConfidence;
         mId = id;
+        mExtras = extras;
     }
 
     /**
@@ -155,6 +159,19 @@
         return mId;
     }
 
+    /**
+     * Returns the extended, vendor specific data.
+     *
+     * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should
+     * prefer to hold a reference to the returned bundle rather than frequently calling this
+     * method. Avoid updating the content of this bundle. On pre-O devices, the values in the
+     * Bundle are not deep copied.
+     */
+    @NonNull
+    public Bundle getExtras() {
+        return BundleUtils.deepCopy(mExtras);
+    }
+
     @Override
     public String toString() {
         return String.format(Locale.US,
@@ -173,6 +190,7 @@
         BundleUtils.putRemoteActionList(bundle, EXTRA_ACTIONS, mActions);
         BundleUtils.putMap(bundle, EXTRA_ENTITY_CONFIDENCE, mEntityConfidence.getConfidenceMap());
         bundle.putString(EXTRA_ID, mId);
+        bundle.putBundle(EXTRA_EXTRAS, mExtras);
         return bundle;
     }
 
@@ -184,7 +202,8 @@
     public static TextClassification createFromBundle(@NonNull Bundle bundle) {
         final Builder builder = new Builder()
                 .setText(bundle.getString(EXTRA_TEXT))
-                .setId(bundle.getString(EXTRA_ID));
+                .setId(bundle.getString(EXTRA_ID))
+                .setExtras(bundle.getBundle(EXTRA_EXTRAS));
         for (Map.Entry<String, Float> entityConfidence : BundleUtils.getFloatStringMapOrThrow(
                 bundle, EXTRA_ENTITY_CONFIDENCE).entrySet()) {
             builder.setEntityType(entityConfidence.getKey(), entityConfidence.getValue());
@@ -339,6 +358,7 @@
         @NonNull private List<RemoteActionCompat> mActions = new ArrayList<>();
         @NonNull private final Map<String, Float> mEntityConfidence = new ArrayMap<>();
         @Nullable private String mId;
+        @Nullable private Bundle mExtras;
 
         /**
          * Sets the classified text.
@@ -386,12 +406,22 @@
         }
 
         /**
+         * Sets the extended, vendor specific data.
+         */
+        @NonNull
+        public Builder setExtras(@Nullable Bundle extras) {
+            mExtras = extras;
+            return this;
+        }
+
+        /**
          * Builds and returns a {@link TextClassification} object.
          */
         @NonNull
         public TextClassification build() {
             return new TextClassification(
-                    mText, mActions, new EntityConfidence(mEntityConfidence), mId);
+                    mText, mActions, new EntityConfidence(mEntityConfidence), mId,
+                    mExtras == null ? Bundle.EMPTY : BundleUtils.deepCopy(mExtras));
         }
     }
 
@@ -411,18 +441,21 @@
         private final int mEndIndex;
         @Nullable private final LocaleListCompat mDefaultLocales;
         @Nullable private final Long mReferenceTime;
+        @NonNull private final Bundle mExtras;
 
         Request(
                 CharSequence text,
                 int startIndex,
                 int endIndex,
                 LocaleListCompat defaultLocales,
-                Long referenceTime) {
+                Long referenceTime,
+                Bundle extras) {
             mText = text;
             mStartIndex = startIndex;
             mEndIndex = endIndex;
             mDefaultLocales = defaultLocales;
             mReferenceTime = referenceTime;
+            mExtras = extras;
         }
 
         /**
@@ -470,6 +503,19 @@
         }
 
         /**
+         * Returns the extended, vendor specific data.
+         *
+         * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should
+         * prefer to hold a reference to the returned bundle rather than frequently calling this
+         * method. Avoid updating the content of this bundle. On pre-O devices, the values in the
+         * Bundle are not deep copied.
+         */
+        @NonNull
+        public Bundle getExtras() {
+            return BundleUtils.deepCopy(mExtras);
+        }
+
+        /**
          * @hide
          */
         @RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -506,6 +552,7 @@
             private final CharSequence mText;
             private final int mStartIndex;
             private final int mEndIndex;
+            private Bundle mExtras;
 
             @Nullable private LocaleListCompat mDefaultLocales;
             @Nullable private Long mReferenceTime = null;
@@ -560,11 +607,23 @@
             }
 
             /**
+             * Sets the extended, vendor specific data.
+             *
+             * @return this builder
+             */
+            @NonNull
+            public Builder setExtras(@Nullable Bundle extras) {
+                mExtras = extras;
+                return this;
+            }
+
+            /**
              * Builds and returns the request object.
              */
             @NonNull
             public Request build() {
-                return new Request(mText, mStartIndex, mEndIndex, mDefaultLocales, mReferenceTime);
+                return new Request(mText, mStartIndex, mEndIndex, mDefaultLocales, mReferenceTime,
+                        mExtras == null ? Bundle.EMPTY : BundleUtils.deepCopy(mExtras));
             }
         }
 
@@ -580,6 +639,7 @@
             bundle.putInt(EXTRA_END_INDEX, mEndIndex);
             BundleUtils.putLocaleList(bundle, EXTRA_DEFAULT_LOCALES, mDefaultLocales);
             BundleUtils.putLong(bundle, EXTRA_REFERENCE_TIME, mReferenceTime);
+            bundle.putBundle(EXTRA_EXTRAS, mExtras);
             return bundle;
         }
 
@@ -592,7 +652,8 @@
                     bundle.getInt(EXTRA_START_INDEX),
                     bundle.getInt(EXTRA_END_INDEX))
                     .setDefaultLocales(BundleUtils.getLocaleList(bundle, EXTRA_DEFAULT_LOCALES))
-                    .setReferenceTime(BundleUtils.getLong(bundle, EXTRA_REFERENCE_TIME));
+                    .setReferenceTime(BundleUtils.getLong(bundle, EXTRA_REFERENCE_TIME))
+                    .setExtras(bundle.getBundle(EXTRA_EXTRAS));
             return builder.build();
         }
     }
diff --git a/textclassifier/src/main/java/androidx/textclassifier/TextLinks.java b/textclassifier/src/main/java/androidx/textclassifier/TextLinks.java
index 389110d..349dfa1 100644
--- a/textclassifier/src/main/java/androidx/textclassifier/TextLinks.java
+++ b/textclassifier/src/main/java/androidx/textclassifier/TextLinks.java
@@ -27,7 +27,6 @@
 import android.text.Spanned;
 import android.text.method.MovementMethod;
 import android.text.style.ClickableSpan;
-import android.text.style.URLSpan;
 import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
@@ -69,9 +68,11 @@
     private static final String LOG_TAG = "TextLinks";
     private static final String EXTRA_FULL_TEXT = "text";
     private static final String EXTRA_LINKS = "links";
+    private static final String EXTRA_EXTRAS = "extras";
 
     private final CharSequence mFullText;
     private final List<TextLink> mLinks;
+    private final Bundle mExtras;
 
     static final Executor sWorkerExecutor = Executors.newFixedThreadPool(1);
     static final MainThreadExecutor sMainThreadExecutor = new MainThreadExecutor();
@@ -112,9 +113,10 @@
     @IntDef({APPLY_STRATEGY_IGNORE, APPLY_STRATEGY_REPLACE})
     public @interface ApplyStrategy {}
 
-    TextLinks(CharSequence fullText, List<TextLink> links) {
+    TextLinks(CharSequence fullText, List<TextLink> links, Bundle extras) {
         mFullText = fullText;
         mLinks = Collections.unmodifiableList(links);
+        mExtras = extras;
     }
 
     /**
@@ -135,6 +137,19 @@
         return mLinks;
     }
 
+    /**
+     * Returns the extended, vendor specific data.
+     *
+     * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should
+     * prefer to hold a reference to the returned bundle rather than frequently calling this
+     * method. Avoid updating the content of this bundle. On pre-O devices, the values in the
+     * Bundle are not deep copied.
+     */
+    @NonNull
+    public Bundle getExtras() {
+        return BundleUtils.deepCopy(mExtras);
+    }
+
     @Override
     @NonNull
     public String toString() {
@@ -150,17 +165,22 @@
         final Bundle bundle = new Bundle();
         bundle.putString(EXTRA_FULL_TEXT, mFullText.toString());
         BundleUtils.putTextLinkList(bundle, EXTRA_LINKS, mLinks);
+        bundle.putBundle(EXTRA_EXTRAS, mExtras);
         return bundle;
     }
 
     /**
      * Extracts an TextLinks object from a bundle that was added using {@link #toBundle()}.
+     *
+     * @throws IllegalArgumentException if the bundle is malformed.
      */
     @NonNull
     public static TextLinks createFromBundle(@NonNull Bundle bundle) {
+        Bundle extras = bundle.getBundle(EXTRA_EXTRAS);
         return new TextLinks(
                 bundle.getString(EXTRA_FULL_TEXT),
-                BundleUtils.getTextLinkListOrThrow(bundle, EXTRA_LINKS));
+                BundleUtils.getTextLinkListOrThrow(bundle, EXTRA_LINKS),
+                extras == null ? Bundle.EMPTY : extras);
     }
 
     /**
@@ -200,8 +220,6 @@
         private final EntityConfidence mEntityScores;
         private final int mStart;
         private final int mEnd;
-        // Allows us to fallback to legacy Linkify if necessary. Not parcelled.
-        @Nullable private final URLSpan mUrlSpan;
 
         /**
          * Create a new TextLink.
@@ -211,16 +229,13 @@
          */
         @VisibleForTesting
         @RestrictTo(RestrictTo.Scope.LIBRARY)
-        TextLink(
-                int start, int end,
-                @NonNull Map<String, Float> entityScores, @Nullable URLSpan urlSpan) {
+        TextLink(int start, int end, @NonNull Map<String, Float> entityScores) {
             Preconditions.checkNotNull(entityScores);
             Preconditions.checkArgument(!entityScores.isEmpty());
             Preconditions.checkArgument(start <= end);
             mStart = start;
             mEnd = end;
             mEntityScores = new EntityConfidence(entityScores);
-            mUrlSpan = urlSpan;
         }
 
         /**
@@ -269,21 +284,12 @@
             return mEntityScores.getConfidenceScore(entityType);
         }
 
-        /**
-         * @hide
-         */
-        @Nullable
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        public URLSpan getUrlSpan() {
-            return mUrlSpan;
-        }
-
         @Override
         @NonNull
         public String toString() {
             return String.format(Locale.US,
-                    "TextLink{start=%s, end=%s, entityScores=%s, urlSpan=%s}",
-                    mStart, mEnd, mEntityScores, mUrlSpan);
+                    "TextLink{start=%s, end=%s, entityScores=%s}",
+                    mStart, mEnd, mEntityScores);
         }
 
         /**
@@ -307,8 +313,7 @@
             return new TextLink(
                     bundle.getInt(EXTRA_START),
                     bundle.getInt(EXTRA_END),
-                    BundleUtils.getFloatStringMapOrThrow(bundle, EXTRA_ENTITY_SCORES),
-                    null /* urlSpan */);
+                    BundleUtils.getFloatStringMapOrThrow(bundle, EXTRA_ENTITY_SCORES));
         }
     }
 
@@ -326,18 +331,21 @@
         @Nullable private final LocaleListCompat mDefaultLocales;
         @NonNull private final EntityConfig mEntityConfig;
         @Nullable private Long mReferenceTime = null;
+        @NonNull private final Bundle mExtras;
 
         Request(
                 @NonNull CharSequence text,
                 @Nullable LocaleListCompat defaultLocales,
                 @Nullable EntityConfig entityConfig,
-                @Nullable Long referenceTime) {
+                @Nullable Long referenceTime,
+                @NonNull Bundle extras) {
             mText = text;
             mDefaultLocales = defaultLocales;
             mEntityConfig = entityConfig == null
                     ? new TextClassifier.EntityConfig.Builder().build()
                     : entityConfig;
             mReferenceTime = referenceTime;
+            mExtras = extras;
         }
 
         /**
@@ -377,6 +385,19 @@
         }
 
         /**
+         * Returns the extended, vendor specific data.
+         *
+         * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should
+         * prefer to hold a reference to the returned bundle rather than frequently calling this
+         * method. Avoid updating the content of this bundle. On pre-O devices, the values in the
+         * Bundle are not deep copied.
+         */
+        @NonNull
+        public Bundle getExtras() {
+            return BundleUtils.deepCopy(mExtras);
+        }
+
+        /**
          * A builder for building TextLinks requests.
          */
         public static final class Builder {
@@ -386,6 +407,7 @@
             @Nullable private LocaleListCompat mDefaultLocales;
             @Nullable private EntityConfig mEntityConfig;
             @Nullable private Long mReferenceTime = null;
+            @Nullable private Bundle mExtras;
 
             public Builder(@NonNull CharSequence text) {
                 mText = Preconditions.checkNotNull(text);
@@ -434,12 +456,23 @@
                 mReferenceTime = referenceTime;
                 return this;
             }
+
+            /**
+             * Sets the extended, vendor specific data.
+             */
+            @NonNull
+            public Builder setExtras(@Nullable Bundle extras) {
+                mExtras = extras;
+                return this;
+            }
+
             /**
              * Builds and returns the request object.
              */
             @NonNull
             public Request build() {
-                return new Request(mText, mDefaultLocales, mEntityConfig, mReferenceTime);
+                return new Request(mText, mDefaultLocales, mEntityConfig, mReferenceTime,
+                        mExtras == null ? Bundle.EMPTY : mExtras);
             }
 
         }
@@ -455,6 +488,7 @@
             bundle.putBundle(EXTRA_ENTITY_CONFIG, mEntityConfig.toBundle());
             BundleUtils.putLocaleList(bundle, EXTRA_DEFAULT_LOCALES, mDefaultLocales);
             BundleUtils.putLong(bundle, EXTRA_REFERENCE_TIME, mReferenceTime);
+            bundle.putBundle(EXTRA_EXTRAS, mExtras);
             return bundle;
         }
 
@@ -468,6 +502,7 @@
                     .setEntityConfig(
                             EntityConfig.createFromBundle(bundle.getBundle(EXTRA_ENTITY_CONFIG)))
                     .setReferenceTime(BundleUtils.getLong(bundle, EXTRA_REFERENCE_TIME))
+                    .setExtras(bundle.getBundle(EXTRA_EXTRAS))
                     .build();
         }
 
@@ -708,6 +743,7 @@
     public static final class Builder {
         private final CharSequence mFullText;
         private final ArrayList<TextLink> mLinks;
+        @Nullable private Bundle mExtras;
 
         /**
          * Create a new TextLinks.Builder.
@@ -728,7 +764,7 @@
          */
         @NonNull
         public Builder addLink(int start, int end, @NonNull Map<String, Float> entityScores) {
-            mLinks.add(new TextLink(start, end, Preconditions.checkNotNull(entityScores), null));
+            mLinks.add(new TextLink(start, end, Preconditions.checkNotNull(entityScores)));
             return this;
         }
 
@@ -736,17 +772,17 @@
          * @hide
          */
         @NonNull
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        public Builder addLink(
-                int start, int end, @NonNull Map<String, Float> entityScores,
-                @Nullable URLSpan urlSpan) {
-            mLinks.add(new TextLink(start, end, Preconditions.checkNotNull(entityScores), urlSpan));
+        Builder addLink(TextLink link) {
+            mLinks.add(Preconditions.checkNotNull(link));
             return this;
         }
 
+        /**
+         * Sets the extended, vendor specific data.
+         */
         @NonNull
-        Builder addLink(TextLink link) {
-            mLinks.add(Preconditions.checkNotNull(link));
+        public Builder setExtras(@Nullable Bundle extras) {
+            mExtras = extras;
             return this;
         }
 
@@ -767,7 +803,8 @@
          */
         @NonNull
         public TextLinks build() {
-            return new TextLinks(mFullText, mLinks);
+            return new TextLinks(mFullText, mLinks,
+                    mExtras == null ? Bundle.EMPTY : BundleUtils.deepCopy(mExtras));
         }
     }
 
diff --git a/textclassifier/src/main/java/androidx/textclassifier/TextSelection.java b/textclassifier/src/main/java/androidx/textclassifier/TextSelection.java
index 0098831..c1291d6 100644
--- a/textclassifier/src/main/java/androidx/textclassifier/TextSelection.java
+++ b/textclassifier/src/main/java/androidx/textclassifier/TextSelection.java
@@ -43,21 +43,25 @@
     private static final String EXTRA_END_INDEX = "end";
     private static final String EXTRA_ENTITY_CONFIDENCE = "entity_conf";
     private static final String EXTRA_ID = "id";
+    private static final String EXTRA_EXTRAS = "extras";
 
     private final int mStartIndex;
     private final int mEndIndex;
     @NonNull private final EntityConfidence mEntityConfidence;
     @Nullable private final String mId;
+    @NonNull private final Bundle mExtras;
 
     TextSelection(
             int startIndex,
             int endIndex,
             @NonNull EntityConfidence entityConfidence,
-            @Nullable String id) {
+            @Nullable String id,
+            @NonNull Bundle extras) {
         mStartIndex = startIndex;
         mEndIndex = endIndex;
         mEntityConfidence = entityConfidence;
         mId = id;
+        mExtras = extras;
     }
 
     /**
@@ -112,6 +116,19 @@
         return mId;
     }
 
+    /**
+     * Returns the extended, vendor specific data.
+     *
+     * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should
+     * prefer to hold a reference to the returned bundle rather than frequently calling this
+     * method. Avoid updating the content of this bundle. On pre-O devices, the values in the
+     * Bundle are not deep copied.
+     */
+    @NonNull
+    public Bundle getExtras() {
+        return BundleUtils.deepCopy(mExtras);
+    }
+
     @Override
     public String toString() {
         return String.format(
@@ -131,6 +148,7 @@
         bundle.putInt(EXTRA_END_INDEX, mEndIndex);
         BundleUtils.putMap(bundle, EXTRA_ENTITY_CONFIDENCE, mEntityConfidence.getConfidenceMap());
         bundle.putString(EXTRA_ID, mId);
+        bundle.putBundle(EXTRA_EXTRAS, mExtras);
         return bundle;
     }
 
@@ -142,7 +160,8 @@
         final Builder builder = new Builder(
                 bundle.getInt(EXTRA_START_INDEX),
                 bundle.getInt(EXTRA_END_INDEX))
-                .setId(bundle.getString(EXTRA_ID));
+                .setId(bundle.getString(EXTRA_ID))
+                .setExtras(bundle.getBundle(EXTRA_EXTRAS));
         for (Map.Entry<String, Float> entityConfidence : BundleUtils.getFloatStringMapOrThrow(
                 bundle, EXTRA_ENTITY_CONFIDENCE).entrySet()) {
             builder.setEntityType(entityConfidence.getKey(), entityConfidence.getValue());
@@ -209,6 +228,7 @@
         private final int mEndIndex;
         @NonNull private final Map<String, Float> mEntityConfidence = new ArrayMap<>();
         @Nullable private String mId;
+        @Nullable private Bundle mExtras;
 
         /**
          * Creates a builder used to build {@link TextSelection} objects.
@@ -248,12 +268,22 @@
         }
 
         /**
+         * Sets the extended, vendor specific data.
+         */
+        @NonNull
+        public Builder setExtras(@Nullable Bundle extras) {
+            mExtras = extras;
+            return this;
+        }
+
+        /**
          * Builds and returns {@link TextSelection} object.
          */
         @NonNull
         public TextSelection build() {
             return new TextSelection(
-                    mStartIndex, mEndIndex, new EntityConfidence(mEntityConfidence), mId);
+                    mStartIndex, mEndIndex, new EntityConfidence(mEntityConfidence), mId,
+                    mExtras == null ? Bundle.EMPTY : BundleUtils.deepCopy(mExtras));
         }
     }
 
@@ -272,16 +302,19 @@
         private final int mStartIndex;
         private final int mEndIndex;
         @Nullable private final LocaleListCompat mDefaultLocales;
+        @NonNull private final Bundle mExtras;
 
         Request(
                 CharSequence text,
                 int startIndex,
                 int endIndex,
-                LocaleListCompat defaultLocales) {
+                LocaleListCompat defaultLocales,
+                Bundle extras) {
             mText = text;
             mStartIndex = startIndex;
             mEndIndex = endIndex;
             mDefaultLocales = defaultLocales;
+            mExtras = extras;
         }
 
         /**
@@ -319,6 +352,19 @@
         }
 
         /**
+         * Returns the extended, vendor specific data.
+         *
+         * <p><b>NOTE: </b>Each call to this method returns a new bundle copy so clients should
+         * prefer to hold a reference to the returned bundle rather than frequently calling this
+         * method. Avoid updating the content of this bundle. On pre-O devices, the values in the
+         * Bundle are not deep copied.
+         */
+        @NonNull
+        public Bundle getExtras() {
+            return BundleUtils.deepCopy(mExtras);
+        }
+
+        /**
          * @hide
          */
         @RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -353,6 +399,7 @@
             private final CharSequence mText;
             private final int mStartIndex;
             private final int mEndIndex;
+            private Bundle mExtras;
 
             @Nullable private LocaleListCompat mDefaultLocales;
 
@@ -389,11 +436,23 @@
             }
 
             /**
+             * Sets the extended, vendor specific data.
+             *
+             * @return this builder
+             */
+            @NonNull
+            public Builder setExtras(@Nullable Bundle extras) {
+                mExtras = extras;
+                return this;
+            }
+
+            /**
              * Builds and returns the request object.
              */
             @NonNull
             public Request build() {
-                return new Request(mText, mStartIndex, mEndIndex, mDefaultLocales);
+                return new Request(mText, mStartIndex, mEndIndex, mDefaultLocales,
+                        mExtras == null ? Bundle.EMPTY : BundleUtils.deepCopy(mExtras));
             }
         }
 
@@ -408,6 +467,7 @@
             bundle.putInt(EXTRA_START_INDEX, mStartIndex);
             bundle.putInt(EXTRA_END_INDEX, mEndIndex);
             BundleUtils.putLocaleList(bundle, EXTRA_DEFAULT_LOCALES, mDefaultLocales);
+            bundle.putBundle(EXTRA_EXTRAS, mExtras);
             return bundle;
         }
 
@@ -420,7 +480,8 @@
                     bundle.getString(EXTRA_TEXT),
                     bundle.getInt(EXTRA_START_INDEX),
                     bundle.getInt(EXTRA_END_INDEX))
-                    .setDefaultLocales(BundleUtils.getLocaleList(bundle, EXTRA_DEFAULT_LOCALES));
+                    .setDefaultLocales(BundleUtils.getLocaleList(bundle, EXTRA_DEFAULT_LOCALES))
+                    .setExtras(bundle.getBundle(EXTRA_EXTRAS));
             final Request request = builder.build();
             return request;
         }
diff --git a/textclassifier/src/main/res/values-de/strings.xml b/textclassifier/src/main/res/values-de/strings.xml
index e2f7d8d..373ba36 100644
--- a/textclassifier/src/main/res/values-de/strings.xml
+++ b/textclassifier/src/main/res/values-de/strings.xml
@@ -27,6 +27,6 @@
     <string name="add_contact" msgid="9005634177208282449">"Hinzufügen"</string>
     <string name="add_contact_desc" msgid="2475604767309086575">"Zu Kontakten hinzufügen"</string>
     <string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Weitere Optionen"</string>
-    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Überlauf schließen"</string>
+    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Dreipunkt-Menü schließen"</string>
     <string name="abc_share" msgid="7091841667818715717">"Teilen"</string>
 </resources>
diff --git a/textclassifier/src/main/res/values-or/strings.xml b/textclassifier/src/main/res/values-or/strings.xml
new file mode 100644
index 0000000..3454944
--- /dev/null
+++ b/textclassifier/src/main/res/values-or/strings.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2018 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email" msgid="5568050657313893478">"ଇମେଲ୍"</string>
+    <string name="email_desc" msgid="6941280589171810022">"ଚୟନିତ ଠିକଣାକୁ ଇମେଲ୍‌ ପଠାନ୍ତୁ"</string>
+    <string name="dial" msgid="7317293545368448453">"କଲ୍ କରନ୍ତୁ"</string>
+    <string name="dial_desc" msgid="5129451396208040332">"ଚୟନିତ ଫୋନ୍‌ ନମ୍ବର୍‌କୁ କଲ୍‌ କରନ୍ତୁ"</string>
+    <string name="browse" msgid="3733970143542020945">"ଖୋଲନ୍ତୁ"</string>
+    <string name="browse_desc" msgid="3898254913938219011">"ଚୟନିତ URL ଖୋଲନ୍ତୁ"</string>
+    <string name="sms" msgid="5495416906312064886">"ମେସେଜ୍"</string>
+    <string name="sms_desc" msgid="8293660783374489324">"ଚୟନିତ ଫୋନ୍‌ ନମ୍ବର୍‌କୁ ମେସେଜ୍‌ ପଠାନ୍ତୁ"</string>
+    <string name="add_contact" msgid="9005634177208282449">"ଯୋଡ଼ନ୍ତୁ"</string>
+    <string name="add_contact_desc" msgid="2475604767309086575">"ଯୋଗାଯୋଗରେ ଯୋଡ଼ନ୍ତୁ"</string>
+    <string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"ଅଧିକ ବିକଳ୍ପ"</string>
+    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"ଓଭରଫ୍ଲୋ ବନ୍ଦ କରନ୍ତୁ"</string>
+    <string name="abc_share" msgid="7091841667818715717">"ଶେୟାର୍ କରନ୍ତୁ"</string>
+</resources>
diff --git a/textclassifier/src/main/res/values-pt-rBR/strings.xml b/textclassifier/src/main/res/values-pt-rBR/strings.xml
index 40a2102..11396b6 100644
--- a/textclassifier/src/main/res/values-pt-rBR/strings.xml
+++ b/textclassifier/src/main/res/values-pt-rBR/strings.xml
@@ -27,6 +27,6 @@
     <string name="add_contact" msgid="9005634177208282449">"Adicionar"</string>
     <string name="add_contact_desc" msgid="2475604767309086575">"Adicionar aos contatos"</string>
     <string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Mais opções"</string>
-    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Fechar barra flutuante"</string>
+    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Fechar menu flutuante"</string>
     <string name="abc_share" msgid="7091841667818715717">"Compart."</string>
 </resources>
diff --git a/textclassifier/src/main/res/values-pt/strings.xml b/textclassifier/src/main/res/values-pt/strings.xml
index 40a2102..11396b6 100644
--- a/textclassifier/src/main/res/values-pt/strings.xml
+++ b/textclassifier/src/main/res/values-pt/strings.xml
@@ -27,6 +27,6 @@
     <string name="add_contact" msgid="9005634177208282449">"Adicionar"</string>
     <string name="add_contact_desc" msgid="2475604767309086575">"Adicionar aos contatos"</string>
     <string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Mais opções"</string>
-    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Fechar barra flutuante"</string>
+    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Fechar menu flutuante"</string>
     <string name="abc_share" msgid="7091841667818715717">"Compart."</string>
 </resources>
diff --git a/textclassifier/src/main/res/values-ur/strings.xml b/textclassifier/src/main/res/values-ur/strings.xml
new file mode 100644
index 0000000..55b2e6d
--- /dev/null
+++ b/textclassifier/src/main/res/values-ur/strings.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2018 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email" msgid="5568050657313893478">"ای میل"</string>
+    <string name="email_desc" msgid="6941280589171810022">"منتخب کردہ پتے پر ای میل کریں"</string>
+    <string name="dial" msgid="7317293545368448453">"کال"</string>
+    <string name="dial_desc" msgid="5129451396208040332">"منتخب کردہ فون نمبر پر کال کریں"</string>
+    <string name="browse" msgid="3733970143542020945">"کھولیں"</string>
+    <string name="browse_desc" msgid="3898254913938219011">"‏منتخب کردہ URL کھولیں"</string>
+    <string name="sms" msgid="5495416906312064886">"پیغام"</string>
+    <string name="sms_desc" msgid="8293660783374489324">"منتخب کردہ فون نمبر پر پیغام بھیجیں"</string>
+    <string name="add_contact" msgid="9005634177208282449">"شامل کریں"</string>
+    <string name="add_contact_desc" msgid="2475604767309086575">"رابطوں میں شامل کریں"</string>
+    <string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"مزید اختیارات"</string>
+    <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"اوورفلو بند کریں"</string>
+    <string name="abc_share" msgid="7091841667818715717">"شیئر کریں"</string>
+</resources>
diff --git a/transition/build.gradle b/transition/build.gradle
index b606e6b..24d758c 100644
--- a/transition/build.gradle
+++ b/transition/build.gradle
@@ -7,7 +7,7 @@
 }
 
 dependencies {
-    api(project(":annotation"))
+    api("androidx.annotation:annotation:1.0.0")
     api(project(":core"))
     compileOnly project(':fragment')
 
diff --git a/webkit/api/1.0.0.txt b/webkit/api/1.0.0.txt
index 9ca5514..641d2eee 100644
--- a/webkit/api/1.0.0.txt
+++ b/webkit/api/1.0.0.txt
@@ -1,123 +1,129 @@
+// Signature format: 2.0
 package androidx.webkit {
 
   public abstract class SafeBrowsingResponseCompat {
-    method public abstract void backToSafety(boolean);
-    method public abstract void proceed(boolean);
-    method public abstract void showInterstitial(boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void backToSafety(boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_RESPONSE_PROCEED, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void proceed(boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void showInterstitial(boolean);
   }
 
   public abstract class ServiceWorkerClientCompat {
     ctor public ServiceWorkerClientCompat();
-    method public abstract android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
+    method public abstract android.webkit.WebResourceResponse! shouldInterceptRequest(android.webkit.WebResourceRequest);
   }
 
   public abstract class ServiceWorkerControllerCompat {
-    method public static androidx.webkit.ServiceWorkerControllerCompat getInstance();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static androidx.webkit.ServiceWorkerControllerCompat getInstance();
     method public abstract androidx.webkit.ServiceWorkerWebSettingsCompat getServiceWorkerWebSettings();
-    method public abstract void setServiceWorkerClient(androidx.webkit.ServiceWorkerClientCompat);
+    method public abstract void setServiceWorkerClient(androidx.webkit.ServiceWorkerClientCompat?);
   }
 
   public abstract class ServiceWorkerWebSettingsCompat {
-    method public abstract boolean getAllowContentAccess();
-    method public abstract boolean getAllowFileAccess();
-    method public abstract boolean getBlockNetworkLoads();
-    method public abstract int getCacheMode();
-    method public abstract void setAllowContentAccess(boolean);
-    method public abstract void setAllowFileAccess(boolean);
-    method public abstract void setBlockNetworkLoads(boolean);
-    method public abstract void setCacheMode(int);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_CONTENT_ACCESS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract boolean getAllowContentAccess();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_FILE_ACCESS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract boolean getAllowFileAccess();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_BLOCK_NETWORK_LOADS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract boolean getBlockNetworkLoads();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_CACHE_MODE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract int getCacheMode();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_CONTENT_ACCESS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setAllowContentAccess(boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_FILE_ACCESS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setAllowFileAccess(boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_BLOCK_NETWORK_LOADS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setBlockNetworkLoads(boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SERVICE_WORKER_CACHE_MODE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setCacheMode(int);
   }
 
   public class WebMessageCompat {
-    ctor public WebMessageCompat(java.lang.String);
-    ctor public WebMessageCompat(java.lang.String, androidx.webkit.WebMessagePortCompat[]);
-    method public java.lang.String getData();
-    method public androidx.webkit.WebMessagePortCompat[] getPorts();
+    ctor public WebMessageCompat(String?);
+    ctor public WebMessageCompat(String?, androidx.webkit.WebMessagePortCompat[]?);
+    method public String? getData();
+    method public androidx.webkit.WebMessagePortCompat[]? getPorts();
   }
 
   public abstract class WebMessagePortCompat {
-    method public abstract void close();
-    method public abstract void postMessage(androidx.webkit.WebMessageCompat);
-    method public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
-    method public abstract void setWebMessageCallback(android.os.Handler, androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_CLOSE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void close();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_POST_MESSAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void postMessage(androidx.webkit.WebMessageCompat);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(android.os.Handler?, androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
   }
 
-  public static abstract class WebMessagePortCompat.WebMessageCallbackCompat {
+  public abstract static class WebMessagePortCompat.WebMessageCallbackCompat {
     ctor public WebMessagePortCompat.WebMessageCallbackCompat();
-    method public void onMessage(androidx.webkit.WebMessagePortCompat, androidx.webkit.WebMessageCompat);
+    method public void onMessage(androidx.webkit.WebMessagePortCompat, androidx.webkit.WebMessageCompat?);
   }
 
   public abstract class WebResourceErrorCompat {
-    method public abstract java.lang.CharSequence getDescription();
-    method public abstract int getErrorCode();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_RESOURCE_ERROR_GET_DESCRIPTION, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract CharSequence getDescription();
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_RESOURCE_ERROR_GET_CODE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract int getErrorCode();
   }
 
   public class WebResourceRequestCompat {
-    method public static boolean isRedirect(android.webkit.WebResourceRequest);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_RESOURCE_REQUEST_IS_REDIRECT, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static boolean isRedirect(android.webkit.WebResourceRequest);
   }
 
   public class WebSettingsCompat {
-    method public static int getDisabledActionModeMenuItems(android.webkit.WebSettings);
-    method public static boolean getOffscreenPreRaster(android.webkit.WebSettings);
-    method public static boolean getSafeBrowsingEnabled(android.webkit.WebSettings);
-    method public static void setDisabledActionModeMenuItems(android.webkit.WebSettings, int);
-    method public static void setOffscreenPreRaster(android.webkit.WebSettings, boolean);
-    method public static void setSafeBrowsingEnabled(android.webkit.WebSettings, boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.DISABLED_ACTION_MODE_MENU_ITEMS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static int getDisabledActionModeMenuItems(android.webkit.WebSettings!);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.OFF_SCREEN_PRERASTER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static boolean getOffscreenPreRaster(android.webkit.WebSettings!);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ENABLE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static boolean getSafeBrowsingEnabled(android.webkit.WebSettings!);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.DISABLED_ACTION_MODE_MENU_ITEMS, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setDisabledActionModeMenuItems(android.webkit.WebSettings!, int);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.OFF_SCREEN_PRERASTER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setOffscreenPreRaster(android.webkit.WebSettings!, boolean);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ENABLE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingEnabled(android.webkit.WebSettings!, boolean);
   }
 
   public class WebViewClientCompat extends android.webkit.WebViewClient {
     ctor public WebViewClientCompat();
-    method public final void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError);
-    method public void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, androidx.webkit.WebResourceErrorCompat);
-    method public final void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, android.webkit.SafeBrowsingResponse);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RequiresApi(23) public final void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError);
+    method @RequiresApi(21) public void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, androidx.webkit.WebResourceErrorCompat);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RequiresApi(27) public final void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, android.webkit.SafeBrowsingResponse);
     method public void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, androidx.webkit.SafeBrowsingResponseCompat);
   }
 
   public class WebViewCompat {
-    method public static androidx.webkit.WebMessagePortCompat[] createWebMessageChannel(android.webkit.WebView);
-    method public static android.content.pm.PackageInfo getCurrentWebViewPackage(android.content.Context);
-    method public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
-    method public static void postVisualStateCallback(android.webkit.WebView, long, androidx.webkit.WebViewCompat.VisualStateCallback);
-    method public static void postWebMessage(android.webkit.WebView, androidx.webkit.WebMessageCompat, android.net.Uri);
-    method public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>);
-    method public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.CREATE_WEB_MESSAGE_CHANNEL, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static androidx.webkit.WebMessagePortCompat[] createWebMessageChannel(android.webkit.WebView);
+    method public static android.content.pm.PackageInfo? getCurrentWebViewPackage(android.content.Context);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_PRIVACY_POLICY_URL, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public static android.webkit.WebViewClient getWebViewClient(android.webkit.WebView);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.VISUAL_STATE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void postVisualStateCallback(android.webkit.WebView, long, androidx.webkit.WebViewCompat.VisualStateCallback);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.POST_WEB_MESSAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void postWebMessage(android.webkit.WebView, androidx.webkit.WebMessageCompat, android.net.Uri);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_WHITELIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>?);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.START_SAFE_BROWSING, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>?);
   }
 
-  public static abstract interface WebViewCompat.VisualStateCallback {
-    method public abstract void onComplete(long);
+  public static interface WebViewCompat.VisualStateCallback {
+    method public void onComplete(long);
   }
 
   public class WebViewFeature {
-    method public static boolean isFeatureSupported(java.lang.String);
-    field public static final java.lang.String CREATE_WEB_MESSAGE_CHANNEL = "CREATE_WEB_MESSAGE_CHANNEL";
-    field public static final java.lang.String DISABLED_ACTION_MODE_MENU_ITEMS = "DISABLED_ACTION_MODE_MENU_ITEMS";
-    field public static final java.lang.String OFF_SCREEN_PRERASTER = "OFF_SCREEN_PRERASTER";
-    field public static final java.lang.String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
-    field public static final java.lang.String RECEIVE_HTTP_ERROR = "RECEIVE_HTTP_ERROR";
-    field public static final java.lang.String RECEIVE_WEB_RESOURCE_ERROR = "RECEIVE_WEB_RESOURCE_ERROR";
-    field public static final java.lang.String SAFE_BROWSING_ENABLE = "SAFE_BROWSING_ENABLE";
-    field public static final java.lang.String SAFE_BROWSING_HIT = "SAFE_BROWSING_HIT";
-    field public static final java.lang.String SAFE_BROWSING_PRIVACY_POLICY_URL = "SAFE_BROWSING_PRIVACY_POLICY_URL";
-    field public static final java.lang.String SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY = "SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY";
-    field public static final java.lang.String SAFE_BROWSING_RESPONSE_PROCEED = "SAFE_BROWSING_RESPONSE_PROCEED";
-    field public static final java.lang.String SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL = "SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL";
-    field public static final java.lang.String SAFE_BROWSING_WHITELIST = "SAFE_BROWSING_WHITELIST";
-    field public static final java.lang.String SERVICE_WORKER_BASIC_USAGE = "SERVICE_WORKER_BASIC_USAGE";
-    field public static final java.lang.String SERVICE_WORKER_BLOCK_NETWORK_LOADS = "SERVICE_WORKER_BLOCK_NETWORK_LOADS";
-    field public static final java.lang.String SERVICE_WORKER_CACHE_MODE = "SERVICE_WORKER_CACHE_MODE";
-    field public static final java.lang.String SERVICE_WORKER_CONTENT_ACCESS = "SERVICE_WORKER_CONTENT_ACCESS";
-    field public static final java.lang.String SERVICE_WORKER_FILE_ACCESS = "SERVICE_WORKER_FILE_ACCESS";
-    field public static final java.lang.String SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST = "SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST";
-    field public static final java.lang.String SHOULD_OVERRIDE_WITH_REDIRECTS = "SHOULD_OVERRIDE_WITH_REDIRECTS";
-    field public static final java.lang.String START_SAFE_BROWSING = "START_SAFE_BROWSING";
-    field public static final java.lang.String VISUAL_STATE_CALLBACK = "VISUAL_STATE_CALLBACK";
-    field public static final java.lang.String WEB_MESSAGE_CALLBACK_ON_MESSAGE = "WEB_MESSAGE_CALLBACK_ON_MESSAGE";
-    field public static final java.lang.String WEB_MESSAGE_PORT_CLOSE = "WEB_MESSAGE_PORT_CLOSE";
-    field public static final java.lang.String WEB_MESSAGE_PORT_POST_MESSAGE = "WEB_MESSAGE_PORT_POST_MESSAGE";
-    field public static final java.lang.String WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK = "WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK";
-    field public static final java.lang.String WEB_RESOURCE_ERROR_GET_CODE = "WEB_RESOURCE_ERROR_GET_CODE";
-    field public static final java.lang.String WEB_RESOURCE_ERROR_GET_DESCRIPTION = "WEB_RESOURCE_ERROR_GET_DESCRIPTION";
-    field public static final java.lang.String WEB_RESOURCE_REQUEST_IS_REDIRECT = "WEB_RESOURCE_REQUEST_IS_REDIRECT";
+    method public static boolean isFeatureSupported(String);
+    field public static final String CREATE_WEB_MESSAGE_CHANNEL = "CREATE_WEB_MESSAGE_CHANNEL";
+    field public static final String DISABLED_ACTION_MODE_MENU_ITEMS = "DISABLED_ACTION_MODE_MENU_ITEMS";
+    field public static final String OFF_SCREEN_PRERASTER = "OFF_SCREEN_PRERASTER";
+    field public static final String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
+    field public static final String RECEIVE_HTTP_ERROR = "RECEIVE_HTTP_ERROR";
+    field public static final String RECEIVE_WEB_RESOURCE_ERROR = "RECEIVE_WEB_RESOURCE_ERROR";
+    field public static final String SAFE_BROWSING_ENABLE = "SAFE_BROWSING_ENABLE";
+    field public static final String SAFE_BROWSING_HIT = "SAFE_BROWSING_HIT";
+    field public static final String SAFE_BROWSING_PRIVACY_POLICY_URL = "SAFE_BROWSING_PRIVACY_POLICY_URL";
+    field public static final String SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY = "SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY";
+    field public static final String SAFE_BROWSING_RESPONSE_PROCEED = "SAFE_BROWSING_RESPONSE_PROCEED";
+    field public static final String SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL = "SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL";
+    field public static final String SAFE_BROWSING_WHITELIST = "SAFE_BROWSING_WHITELIST";
+    field public static final String SERVICE_WORKER_BASIC_USAGE = "SERVICE_WORKER_BASIC_USAGE";
+    field public static final String SERVICE_WORKER_BLOCK_NETWORK_LOADS = "SERVICE_WORKER_BLOCK_NETWORK_LOADS";
+    field public static final String SERVICE_WORKER_CACHE_MODE = "SERVICE_WORKER_CACHE_MODE";
+    field public static final String SERVICE_WORKER_CONTENT_ACCESS = "SERVICE_WORKER_CONTENT_ACCESS";
+    field public static final String SERVICE_WORKER_FILE_ACCESS = "SERVICE_WORKER_FILE_ACCESS";
+    field public static final String SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST = "SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST";
+    field public static final String SHOULD_OVERRIDE_WITH_REDIRECTS = "SHOULD_OVERRIDE_WITH_REDIRECTS";
+    field public static final String START_SAFE_BROWSING = "START_SAFE_BROWSING";
+    field public static final String VISUAL_STATE_CALLBACK = "VISUAL_STATE_CALLBACK";
+    field public static final String WEB_MESSAGE_CALLBACK_ON_MESSAGE = "WEB_MESSAGE_CALLBACK_ON_MESSAGE";
+    field public static final String WEB_MESSAGE_PORT_CLOSE = "WEB_MESSAGE_PORT_CLOSE";
+    field public static final String WEB_MESSAGE_PORT_POST_MESSAGE = "WEB_MESSAGE_PORT_POST_MESSAGE";
+    field public static final String WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK = "WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK";
+    field public static final String WEB_RESOURCE_ERROR_GET_CODE = "WEB_RESOURCE_ERROR_GET_CODE";
+    field public static final String WEB_RESOURCE_ERROR_GET_DESCRIPTION = "WEB_RESOURCE_ERROR_GET_DESCRIPTION";
+    field public static final String WEB_RESOURCE_REQUEST_IS_REDIRECT = "WEB_RESOURCE_REQUEST_IS_REDIRECT";
+  }
+
+  public abstract class WebViewRenderer {
+    method public abstract boolean terminate();
   }
 
 }
diff --git a/work/workmanager-firebase/api/1.0.0-alpha12.txt b/work/workmanager-firebase/api/1.0.0-alpha12.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/work/workmanager-firebase/api/1.0.0-alpha12.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/work/workmanager-ktx/api/1.0.0-alpha12.txt b/work/workmanager-ktx/api/1.0.0-alpha12.txt
new file mode 100644
index 0000000..0640e2d
--- /dev/null
+++ b/work/workmanager-ktx/api/1.0.0-alpha12.txt
@@ -0,0 +1,28 @@
+// Signature format: 2.0
+package androidx.work {
+
+  public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+    ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+    method public abstract Object? doWork(kotlin.coroutines.experimental.Continuation<? super androidx.work.ListenableWorker.Payload> p);
+    method public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+    method public final void onStopped();
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Payload> startWork();
+    property public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+  }
+
+  public final class DataKt {
+    ctor public DataKt();
+    method public static androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class OneTimeWorkRequestKt {
+    ctor public OneTimeWorkRequestKt();
+    method public static androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+  }
+
+  public final class PeriodicWorkRequestKt {
+    ctor public PeriodicWorkRequestKt();
+  }
+
+}
+
diff --git a/work/workmanager-testing/api/1.0.0-alpha12.txt b/work/workmanager-testing/api/1.0.0-alpha12.txt
new file mode 100644
index 0000000..5645c13
--- /dev/null
+++ b/work/workmanager-testing/api/1.0.0-alpha12.txt
@@ -0,0 +1,22 @@
+// Signature format: 2.0
+package androidx.work.testing {
+
+  public class SynchronousExecutor implements java.util.concurrent.Executor {
+    ctor public SynchronousExecutor();
+    method public void execute(Runnable);
+  }
+
+  public interface TestDriver {
+    method public void setAllConstraintsMet(java.util.UUID);
+    method public void setInitialDelayMet(java.util.UUID);
+    method public void setPeriodDelayMet(java.util.UUID);
+  }
+
+  public final class WorkManagerTestInitHelper {
+    method public static androidx.work.testing.TestDriver! getTestDriver();
+    method public static void initializeTestWorkManager(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+  }
+
+}
+
diff --git a/work/workmanager/api/1.0.0-alpha12.txt b/work/workmanager/api/1.0.0-alpha12.txt
new file mode 100644
index 0000000..c0e4fac
--- /dev/null
+++ b/work/workmanager/api/1.0.0-alpha12.txt
@@ -0,0 +1,302 @@
+// Signature format: 2.0
+package androidx.work {
+
+  public final class ArrayCreatingInputMerger extends androidx.work.InputMerger {
+    ctor public ArrayCreatingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data>);
+  }
+
+  public enum BackoffPolicy {
+    enum_constant public static final androidx.work.BackoffPolicy EXPONENTIAL;
+    enum_constant public static final androidx.work.BackoffPolicy LINEAR;
+  }
+
+  public final class Configuration {
+    method public java.util.concurrent.Executor getExecutor();
+    method public int getMaxJobSchedulerId();
+    method public int getMinJobSchedulerId();
+    method public androidx.work.WorkerFactory getWorkerFactory();
+    field public static final int MIN_SCHEDULER_LIMIT = 20; // 0x14
+  }
+
+  public static final class Configuration.Builder {
+    ctor public Configuration.Builder();
+    method public androidx.work.Configuration build();
+    method public androidx.work.Configuration.Builder setExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setJobSchedulerJobIdRange(int, int);
+    method public androidx.work.Configuration.Builder setMaxSchedulerLimit(int);
+    method public androidx.work.Configuration.Builder setMinimumLoggingLevel(int);
+    method public androidx.work.Configuration.Builder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public final class Constraints {
+    ctor public Constraints(androidx.work.Constraints);
+    method @RequiresApi(24) public androidx.work.ContentUriTriggers? getContentUriTriggers();
+    method public androidx.work.NetworkType getRequiredNetworkType();
+    method @RequiresApi(24) public boolean hasContentUriTriggers();
+    method public boolean requiresBatteryNotLow();
+    method public boolean requiresCharging();
+    method @RequiresApi(23) public boolean requiresDeviceIdle();
+    method public boolean requiresStorageNotLow();
+    field public static final androidx.work.Constraints! NONE;
+  }
+
+  public static final class Constraints.Builder {
+    ctor public Constraints.Builder();
+    method @RequiresApi(24) public androidx.work.Constraints.Builder addContentUriTrigger(android.net.Uri!, boolean);
+    method public androidx.work.Constraints build();
+    method public androidx.work.Constraints.Builder setRequiredNetworkType(androidx.work.NetworkType);
+    method public androidx.work.Constraints.Builder setRequiresBatteryNotLow(boolean);
+    method public androidx.work.Constraints.Builder setRequiresCharging(boolean);
+    method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean);
+    method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean);
+  }
+
+  public final class ContentUriTriggers {
+    ctor public ContentUriTriggers();
+    method public void add(android.net.Uri, boolean);
+    method public int size();
+  }
+
+  public static final class ContentUriTriggers.Trigger {
+    method public android.net.Uri getUri();
+    method public boolean shouldTriggerForDescendants();
+  }
+
+  public final class Data {
+    ctor public Data(androidx.work.Data);
+    method public boolean getBoolean(String, boolean);
+    method public boolean[]? getBooleanArray(String);
+    method public double getDouble(String, double);
+    method public double[]? getDoubleArray(String);
+    method public float getFloat(String, float);
+    method public float[]? getFloatArray(String);
+    method public int getInt(String, int);
+    method public int[]? getIntArray(String);
+    method public java.util.Map<java.lang.String,java.lang.Object> getKeyValueMap();
+    method public long getLong(String, long);
+    method public long[]? getLongArray(String);
+    method public String? getString(String);
+    method public String[]? getStringArray(String);
+    field public static final androidx.work.Data! EMPTY;
+    field public static final int MAX_DATA_BYTES = 10240; // 0x2800
+  }
+
+  public static final class Data.Builder {
+    ctor public Data.Builder();
+    method public androidx.work.Data build();
+    method public androidx.work.Data.Builder putAll(androidx.work.Data);
+    method public androidx.work.Data.Builder putAll(java.util.Map<java.lang.String,java.lang.Object>);
+    method public androidx.work.Data.Builder putBoolean(String, boolean);
+    method public androidx.work.Data.Builder putBooleanArray(String, boolean[]);
+    method public androidx.work.Data.Builder putDouble(String, double);
+    method public androidx.work.Data.Builder putDoubleArray(String, double[]);
+    method public androidx.work.Data.Builder putFloat(String, float);
+    method public androidx.work.Data.Builder putFloatArray(String, float[]);
+    method public androidx.work.Data.Builder putInt(String, int);
+    method public androidx.work.Data.Builder putIntArray(String, int[]);
+    method public androidx.work.Data.Builder putLong(String, long);
+    method public androidx.work.Data.Builder putLongArray(String, long[]);
+    method public androidx.work.Data.Builder putString(String, String?);
+    method public androidx.work.Data.Builder putStringArray(String, String[]);
+  }
+
+  public enum ExistingPeriodicWorkPolicy {
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy REPLACE;
+  }
+
+  public enum ExistingWorkPolicy {
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND;
+    enum_constant public static final androidx.work.ExistingWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
+  }
+
+  public abstract class InputMerger {
+    ctor public InputMerger();
+    method public abstract androidx.work.Data merge(java.util.List<androidx.work.Data>);
+  }
+
+  public abstract class ListenableWorker {
+    ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
+    method public final android.content.Context getApplicationContext();
+    method public final java.util.UUID getId();
+    method public final androidx.work.Data getInputData();
+    method @RequiresApi(28) public final android.net.Network? getNetwork();
+    method public final int getRunAttemptCount();
+    method public final java.util.Set<java.lang.String> getTags();
+    method @RequiresApi(24) public final java.util.List<java.lang.String>? getTriggeredContentAuthorities();
+    method @RequiresApi(24) public final java.util.List<android.net.Uri>? getTriggeredContentUris();
+    method public final boolean isStopped();
+    method public void onStopped();
+    method @MainThread public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Payload> startWork();
+  }
+
+  public static final class ListenableWorker.Payload {
+    ctor public ListenableWorker.Payload(androidx.work.ListenableWorker.Result);
+    ctor public ListenableWorker.Payload(androidx.work.ListenableWorker.Result, androidx.work.Data);
+    method public androidx.work.Data getOutputData();
+    method public androidx.work.ListenableWorker.Result getResult();
+  }
+
+  public static enum ListenableWorker.Result {
+    enum_constant public static final androidx.work.ListenableWorker.Result FAILURE;
+    enum_constant public static final androidx.work.ListenableWorker.Result RETRY;
+    enum_constant public static final androidx.work.ListenableWorker.Result SUCCESS;
+  }
+
+  public enum NetworkType {
+    enum_constant public static final androidx.work.NetworkType CONNECTED;
+    enum_constant public static final androidx.work.NetworkType METERED;
+    enum_constant public static final androidx.work.NetworkType NOT_REQUIRED;
+    enum_constant public static final androidx.work.NetworkType NOT_ROAMING;
+    enum_constant public static final androidx.work.NetworkType UNMETERED;
+  }
+
+  public final class OneTimeWorkRequest extends androidx.work.WorkRequest {
+    method @java.lang.SafeVarargs public static java.util.List<androidx.work.OneTimeWorkRequest> from(Class<? extends androidx.work.ListenableWorker>...);
+    method public static java.util.List<androidx.work.OneTimeWorkRequest> from(java.util.List<java.lang.Class<? extends androidx.work.ListenableWorker>>);
+  }
+
+  public static final class OneTimeWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.OneTimeWorkRequest.Builder,androidx.work.OneTimeWorkRequest> {
+    ctor public OneTimeWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>);
+    method public androidx.work.OneTimeWorkRequest.Builder setInitialDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.OneTimeWorkRequest.Builder setInitialDelay(java.time.Duration);
+    method public androidx.work.OneTimeWorkRequest.Builder setInputMerger(Class<? extends androidx.work.InputMerger>);
+  }
+
+  public interface Operation {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS> getResult();
+    method public android.arch.lifecycle.LiveData<androidx.work.Operation.State> getState();
+  }
+
+  public abstract static class Operation.State {
+  }
+
+  public static final class Operation.State.FAILURE extends androidx.work.Operation.State {
+    ctor public Operation.State.FAILURE(Throwable);
+    method public Throwable getException();
+  }
+
+  public static final class Operation.State.IN_PROGRESS extends androidx.work.Operation.State {
+  }
+
+  public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
+  }
+
+  public final class OverwritingInputMerger extends androidx.work.InputMerger {
+    ctor public OverwritingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data>);
+  }
+
+  public final class PeriodicWorkRequest extends androidx.work.WorkRequest {
+    field public static final long MIN_PERIODIC_FLEX_MILLIS = 300000L; // 0x493e0L
+    field public static final long MIN_PERIODIC_INTERVAL_MILLIS = 900000L; // 0xdbba0L
+  }
+
+  public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration);
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration, java.time.Duration);
+  }
+
+  public abstract class WorkContinuation {
+    ctor public WorkContinuation();
+    method public static androidx.work.WorkContinuation combine(androidx.work.WorkContinuation...);
+    method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation>);
+    method public static androidx.work.WorkContinuation combine(androidx.work.OneTimeWorkRequest, androidx.work.WorkContinuation...);
+    method public static androidx.work.WorkContinuation combine(androidx.work.OneTimeWorkRequest, java.util.List<androidx.work.WorkContinuation>);
+    method public abstract androidx.work.Operation enqueue();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfos();
+    method public abstract android.arch.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosLiveData();
+    method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest>);
+  }
+
+  public final class WorkInfo {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getOutputData();
+    method public androidx.work.WorkInfo.State getState();
+    method public java.util.Set<java.lang.String> getTags();
+  }
+
+  public static enum WorkInfo.State {
+    method public boolean isFinished();
+    enum_constant public static final androidx.work.WorkInfo.State BLOCKED;
+    enum_constant public static final androidx.work.WorkInfo.State CANCELLED;
+    enum_constant public static final androidx.work.WorkInfo.State ENQUEUED;
+    enum_constant public static final androidx.work.WorkInfo.State FAILED;
+    enum_constant public static final androidx.work.WorkInfo.State RUNNING;
+    enum_constant public static final androidx.work.WorkInfo.State SUCCEEDED;
+  }
+
+  public abstract class WorkManager {
+    method public final androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest...);
+    method public abstract androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest>);
+    method public final androidx.work.WorkContinuation beginWith(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginWith(java.util.List<androidx.work.OneTimeWorkRequest>);
+    method public abstract androidx.work.Operation cancelAllWork();
+    method public abstract androidx.work.Operation cancelAllWorkByTag(String);
+    method public abstract androidx.work.Operation cancelUniqueWork(String);
+    method public abstract androidx.work.Operation cancelWorkById(java.util.UUID);
+    method public final androidx.work.Operation enqueue(androidx.work.WorkRequest);
+    method public abstract androidx.work.Operation enqueue(java.util.List<? extends androidx.work.WorkRequest>);
+    method public abstract androidx.work.Operation enqueueUniquePeriodicWork(String, androidx.work.ExistingPeriodicWorkPolicy, androidx.work.PeriodicWorkRequest);
+    method public androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest...);
+    method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest>);
+    method public static androidx.work.WorkManager getInstance();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long> getLastCancelAllTimeMillis();
+    method public abstract android.arch.lifecycle.LiveData<java.lang.Long> getLastCancelAllTimeMillisLiveData();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo> getWorkInfoById(java.util.UUID);
+    method public abstract android.arch.lifecycle.LiveData<androidx.work.WorkInfo> getWorkInfoByIdLiveData(java.util.UUID);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfosByTag(String);
+    method public abstract android.arch.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosByTagLiveData(String);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfosForUniqueWork(String);
+    method public abstract android.arch.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosForUniqueWorkLiveData(String);
+    method public static void initialize(android.content.Context, androidx.work.Configuration);
+    method public abstract androidx.work.Operation pruneWork();
+  }
+
+  public abstract class WorkRequest {
+    method public java.util.UUID getId();
+    field public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; // 0x7530L
+    field public static final long MAX_BACKOFF_MILLIS = 18000000L; // 0x112a880L
+    field public static final long MIN_BACKOFF_MILLIS = 10000L; // 0x2710L
+  }
+
+  public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder, W extends androidx.work.WorkRequest> {
+    method public final B addTag(String);
+    method public final W build();
+    method public final B keepResultsForAtLeast(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration);
+    method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
+    method public final B setConstraints(androidx.work.Constraints);
+    method public final B setInputData(androidx.work.Data);
+  }
+
+  public abstract class Worker extends androidx.work.ListenableWorker {
+    ctor @Keep public Worker(android.content.Context, androidx.work.WorkerParameters);
+    method @WorkerThread public abstract androidx.work.ListenableWorker.Result doWork();
+    method public final androidx.work.Data getOutputData();
+    method public final void setOutputData(androidx.work.Data);
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Payload> startWork();
+  }
+
+  public abstract class WorkerFactory {
+    ctor public WorkerFactory();
+    method public abstract androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public final class WorkerParameters {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getInputData();
+    method @RequiresApi(28) public android.net.Network? getNetwork();
+    method public int getRunAttemptCount();
+    method public java.util.Set<java.lang.String> getTags();
+    method @RequiresApi(24) public java.util.List<java.lang.String>? getTriggeredContentAuthorities();
+    method @RequiresApi(24) public java.util.List<android.net.Uri>? getTriggeredContentUris();
+  }
+
+}
+