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">">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">">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>
* <service android:name="component_name_of_your_implementation" >
* <intent-filter>
- * <action android:name="android.media.MediaLibraryService2" />
+ * <action android:name="androidx.media2.MediaLibraryService" />
* </intent-filter>
* </service></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>
* <service android:name="component_name_of_your_implementation" >
* <intent-filter>
- * <action android:name="android.media.MediaSessionService2" />
+ * <action android:name="androidx.media2.MediaSessionService" />
* </intent-filter>
* </service></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();
+ }
+
+}
+