Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
c8089ead
authored
Jul 28, 2022
by
bachinger
Committed by
tonihei
Aug 08, 2022
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add interface version of MediaControllerStub
PiperOrigin-RevId: 463930162
parent
65a2a3a0
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
125 additions
and
19 deletions
libraries/session/src/main/aidl/androidx/media3/session/IMediaController.aidl
libraries/session/src/main/java/androidx/media3/session/ConnectionRequest.java
libraries/session/src/main/java/androidx/media3/session/MediaControllerStub.java
libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java
libraries/session/src/main/java/androidx/media3/session/MediaSession.java
libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java
libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java
libraries/session/src/main/java/androidx/media3/session/MediaSessionService.java
libraries/session/src/main/java/androidx/media3/session/MediaSessionServiceLegacyStub.java
libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java
libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackTest.java
libraries/session/src/main/aidl/androidx/media3/session/IMediaController.aidl
View file @
c8089ead
...
...
@@ -29,7 +29,6 @@ import androidx.media3.session.IMediaSession;
oneway interface IMediaController {
// Id < 3000 is reserved to avoid potential collision with media2 1.x.
void onConnected(int seq, in Bundle connectionResult) = 3000;
void onSessionResult(int seq, in Bundle sessionResult) = 3001;
void onLibraryResult(int seq, in Bundle libraryResult) = 3002;
...
...
libraries/session/src/main/java/androidx/media3/session/ConnectionRequest.java
View file @
c8089ead
...
...
@@ -35,7 +35,9 @@ import java.lang.annotation.Target;
*/
/* package */
class
ConnectionRequest
implements
Bundleable
{
public
final
int
version
;
public
final
int
libraryVersion
;
public
final
int
controllerInterfaceVersion
;
public
final
String
packageName
;
...
...
@@ -44,11 +46,22 @@ import java.lang.annotation.Target;
public
final
Bundle
connectionHints
;
public
ConnectionRequest
(
String
packageName
,
int
pid
,
Bundle
connectionHints
)
{
this
(
MediaLibraryInfo
.
VERSION_INT
,
packageName
,
pid
,
new
Bundle
(
connectionHints
));
this
(
MediaLibraryInfo
.
VERSION_INT
,
MediaControllerStub
.
VERSION_INT
,
packageName
,
pid
,
new
Bundle
(
connectionHints
));
}
private
ConnectionRequest
(
int
version
,
String
packageName
,
int
pid
,
Bundle
connectionHints
)
{
this
.
version
=
version
;
private
ConnectionRequest
(
int
libraryVersion
,
int
controllerInterfaceVersion
,
String
packageName
,
int
pid
,
Bundle
connectionHints
)
{
this
.
libraryVersion
=
libraryVersion
;
this
.
controllerInterfaceVersion
=
controllerInterfaceVersion
;
this
.
packageName
=
packageName
;
this
.
pid
=
pid
;
this
.
connectionHints
=
connectionHints
;
...
...
@@ -59,34 +72,50 @@ import java.lang.annotation.Target;
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
(
TYPE_USE
)
@IntDef
({
FIELD_VERSION
,
FIELD_PACKAGE_NAME
,
FIELD_PID
,
FIELD_CONNECTION_HINTS
})
@IntDef
({
FIELD_LIBRARY_VERSION
,
FIELD_PACKAGE_NAME
,
FIELD_PID
,
FIELD_CONNECTION_HINTS
,
FIELD_CONTROLLER_INTERFACE_VERSION
})
private
@interface
FieldNumber
{}
private
static
final
int
FIELD_VERSION
=
0
;
private
static
final
int
FIELD_
LIBRARY_
VERSION
=
0
;
private
static
final
int
FIELD_PACKAGE_NAME
=
1
;
private
static
final
int
FIELD_PID
=
2
;
private
static
final
int
FIELD_CONNECTION_HINTS
=
3
;
private
static
final
int
FIELD_CONTROLLER_INTERFACE_VERSION
=
4
;
// Next id: 5
@Override
public
Bundle
toBundle
()
{
Bundle
bundle
=
new
Bundle
();
bundle
.
putInt
(
keyForField
(
FIELD_
VERSION
),
v
ersion
);
bundle
.
putInt
(
keyForField
(
FIELD_
LIBRARY_VERSION
),
libraryV
ersion
);
bundle
.
putString
(
keyForField
(
FIELD_PACKAGE_NAME
),
packageName
);
bundle
.
putInt
(
keyForField
(
FIELD_PID
),
pid
);
bundle
.
putBundle
(
keyForField
(
FIELD_CONNECTION_HINTS
),
connectionHints
);
bundle
.
putInt
(
keyForField
(
FIELD_CONTROLLER_INTERFACE_VERSION
),
controllerInterfaceVersion
);
return
bundle
;
}
/** Object that can restore {@link ConnectionRequest} from a {@link Bundle}. */
public
static
final
Creator
<
ConnectionRequest
>
CREATOR
=
bundle
->
{
int
version
=
bundle
.
getInt
(
keyForField
(
FIELD_VERSION
),
/* defaultValue= */
0
);
int
libraryVersion
=
bundle
.
getInt
(
keyForField
(
FIELD_LIBRARY_VERSION
),
/* defaultValue= */
0
);
int
controllerInterfaceVersion
=
bundle
.
getInt
(
keyForField
(
FIELD_CONTROLLER_INTERFACE_VERSION
),
/* defaultValue= */
0
);
String
packageName
=
checkNotNull
(
bundle
.
getString
(
keyForField
(
FIELD_PACKAGE_NAME
)));
int
pid
=
bundle
.
getInt
(
keyForField
(
FIELD_PID
),
/* defaultValue= */
0
);
checkArgument
(
pid
!=
0
);
@Nullable
Bundle
connectionHints
=
bundle
.
getBundle
(
keyForField
(
FIELD_CONNECTION_HINTS
));
return
new
ConnectionRequest
(
version
,
packageName
,
pid
,
connectionHints
==
null
?
Bundle
.
EMPTY
:
connectionHints
);
libraryVersion
,
controllerInterfaceVersion
,
packageName
,
pid
,
connectionHints
==
null
?
Bundle
.
EMPTY
:
connectionHints
);
};
private
static
String
keyForField
(
@FieldNumber
int
field
)
{
...
...
libraries/session/src/main/java/androidx/media3/session/MediaControllerStub.java
View file @
c8089ead
...
...
@@ -35,6 +35,9 @@ import org.checkerframework.checker.nullness.qual.NonNull;
private
static
final
String
TAG
=
"MediaControllerStub"
;
/** The version of the IMediaController interface. */
public
static
final
int
VERSION_INT
=
1
;
private
final
WeakReference
<
MediaControllerImplBase
>
controller
;
public
MediaControllerStub
(
MediaControllerImplBase
controller
)
{
...
...
libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java
View file @
c8089ead
...
...
@@ -321,6 +321,7 @@ import java.util.concurrent.atomic.AtomicReference;
return
new
ControllerInfo
(
remoteUserInfo
,
ControllerInfo
.
LEGACY_CONTROLLER_VERSION
,
ControllerInfo
.
LEGACY_CONTROLLER_INTERFACE_VERSION
,
getMediaSessionManager
().
isTrustedForMediaControl
(
remoteUserInfo
),
new
BrowserLegacyCb
(
remoteUserInfo
),
/* connectionHints= */
Bundle
.
EMPTY
);
...
...
libraries/session/src/main/java/androidx/media3/session/MediaSession.java
View file @
c8089ead
...
...
@@ -325,9 +325,12 @@ public class MediaSession {
/** The {@linkplain #getControllerVersion() controller version} of legacy controllers. */
public
static
final
int
LEGACY_CONTROLLER_VERSION
=
0
;
/** The {@linkplain #getInterfaceVersion()} interface version} of legacy controllers. */
@UnstableApi
public
static
final
int
LEGACY_CONTROLLER_INTERFACE_VERSION
=
0
;
private
final
RemoteUserInfo
remoteUserInfo
;
private
final
int
controllerVersion
;
private
final
int
libraryVersion
;
private
final
int
interfaceVersion
;
private
final
boolean
isTrusted
;
@Nullable
private
final
ControllerCb
controllerCb
;
private
final
Bundle
connectionHints
;
...
...
@@ -344,12 +347,14 @@ public class MediaSession {
*/
/* package */
ControllerInfo
(
RemoteUserInfo
remoteUserInfo
,
int
controllerVersion
,
int
libraryVersion
,
int
interfaceVersion
,
boolean
trusted
,
@Nullable
ControllerCb
cb
,
Bundle
connectionHints
)
{
this
.
remoteUserInfo
=
remoteUserInfo
;
this
.
controllerVersion
=
controllerVersion
;
this
.
libraryVersion
=
libraryVersion
;
this
.
interfaceVersion
=
interfaceVersion
;
isTrusted
=
trusted
;
controllerCb
=
cb
;
this
.
connectionHints
=
connectionHints
;
...
...
@@ -366,7 +371,13 @@ public class MediaSession {
* than {@code 1000000} if the controller is a legacy controller.
*/
public
int
getControllerVersion
()
{
return
controllerVersion
;
return
libraryVersion
;
}
/** Returns the interface version of the controller, or 0 if it's a legacy controller. */
@UnstableApi
public
int
getInterfaceVersion
()
{
return
interfaceVersion
;
}
/**
...
...
@@ -459,6 +470,7 @@ public class MediaSession {
return
new
ControllerInfo
(
legacyRemoteUserInfo
,
ControllerInfo
.
LEGACY_CONTROLLER_VERSION
,
ControllerInfo
.
LEGACY_CONTROLLER_INTERFACE_VERSION
,
/* trusted= */
false
,
/* cb= */
null
,
/* connectionHints= */
Bundle
.
EMPTY
);
...
...
@@ -780,11 +792,19 @@ public class MediaSession {
/* package */
void
handleControllerConnectionFromService
(
IMediaController
controller
,
int
controllerVersion
,
int
controllerInterfaceVersion
,
String
packageName
,
int
pid
,
int
uid
,
Bundle
connectionHints
)
{
impl
.
connectFromService
(
controller
,
controllerVersion
,
packageName
,
pid
,
uid
,
connectionHints
);
impl
.
connectFromService
(
controller
,
controllerVersion
,
controllerInterfaceVersion
,
packageName
,
pid
,
uid
,
connectionHints
);
}
/* package */
IBinder
getLegacyBrowserServiceBinder
()
{
...
...
libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java
View file @
c8089ead
...
...
@@ -476,12 +476,19 @@ import org.checkerframework.checker.initialization.qual.Initialized;
public
void
connectFromService
(
IMediaController
caller
,
int
controllerVersion
,
int
controllerInterfaceVersion
,
String
packageName
,
int
pid
,
int
uid
,
Bundle
connectionHints
)
{
sessionStub
.
connect
(
caller
,
controllerVersion
,
packageName
,
pid
,
uid
,
checkStateNotNull
(
connectionHints
));
caller
,
controllerVersion
,
controllerInterfaceVersion
,
packageName
,
pid
,
uid
,
checkStateNotNull
(
connectionHints
));
}
public
MediaSessionCompat
getSessionCompat
()
{
...
...
libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java
View file @
c8089ead
...
...
@@ -650,6 +650,7 @@ import org.checkerframework.checker.initialization.qual.Initialized;
new
ControllerInfo
(
remoteUserInfo
,
ControllerInfo
.
LEGACY_CONTROLLER_VERSION
,
ControllerInfo
.
LEGACY_CONTROLLER_INTERFACE_VERSION
,
sessionManager
.
isTrustedForMediaControl
(
remoteUserInfo
),
controllerCb
,
/* connectionHints= */
Bundle
.
EMPTY
);
...
...
libraries/session/src/main/java/androidx/media3/session/MediaSessionService.java
View file @
c8089ead
...
...
@@ -516,7 +516,8 @@ public abstract class MediaSessionService extends Service {
ControllerInfo
controllerInfo
=
new
ControllerInfo
(
remoteUserInfo
,
/* controllerVersion= */
request
.
version
,
request
.
libraryVersion
,
request
.
controllerInterfaceVersion
,
isTrusted
,
/* cb= */
null
,
request
.
connectionHints
);
...
...
@@ -533,7 +534,8 @@ public abstract class MediaSessionService extends Service {
session
.
handleControllerConnectionFromService
(
caller
,
request
.
version
,
request
.
libraryVersion
,
request
.
controllerInterfaceVersion
,
request
.
packageName
,
pid
,
uid
,
...
...
libraries/session/src/main/java/androidx/media3/session/MediaSessionServiceLegacyStub.java
View file @
c8089ead
...
...
@@ -96,6 +96,7 @@ import java.util.concurrent.atomic.AtomicReference;
return
new
ControllerInfo
(
info
,
ControllerInfo
.
LEGACY_CONTROLLER_VERSION
,
ControllerInfo
.
LEGACY_CONTROLLER_INTERFACE_VERSION
,
manager
.
isTrustedForMediaControl
(
info
),
/* cb= */
null
,
/* connectionHints= */
Bundle
.
EMPTY
);
...
...
libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java
View file @
c8089ead
...
...
@@ -369,6 +369,7 @@ import java.util.concurrent.ExecutionException;
public
void
connect
(
IMediaController
caller
,
int
controllerVersion
,
int
controllerInterfaceVersion
,
String
callingPackage
,
int
pid
,
int
uid
,
...
...
@@ -379,6 +380,7 @@ import java.util.concurrent.ExecutionException;
new
ControllerInfo
(
remoteUserInfo
,
controllerVersion
,
controllerInterfaceVersion
,
sessionManager
.
isTrustedForMediaControl
(
remoteUserInfo
),
new
Controller2Cb
(
caller
),
connectionHints
);
...
...
@@ -529,7 +531,14 @@ import java.util.concurrent.ExecutionException;
// If it's the case, use PID from the ConnectionRequest.
int
pid
=
(
callingPid
!=
0
)
?
callingPid
:
request
.
pid
;
try
{
connect
(
caller
,
request
.
version
,
request
.
packageName
,
pid
,
uid
,
request
.
connectionHints
);
connect
(
caller
,
request
.
libraryVersion
,
request
.
controllerInterfaceVersion
,
request
.
packageName
,
pid
,
uid
,
request
.
connectionHints
);
}
finally
{
Binder
.
restoreCallingIdentity
(
token
);
}
...
...
libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackTest.java
View file @
c8089ead
...
...
@@ -30,6 +30,7 @@ import android.content.Context;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
androidx.media3.common.MediaItem
;
import
androidx.media3.common.MediaLibraryInfo
;
import
androidx.media3.common.Player
;
import
androidx.media3.common.Rating
;
import
androidx.media3.common.StarRating
;
...
...
@@ -50,6 +51,7 @@ import java.util.ArrayList;
import
java.util.List
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicReference
;
import
org.junit.After
;
import
org.junit.Before
;
...
...
@@ -95,6 +97,38 @@ public class MediaSessionCallbackTest {
}
@Test
public
void
onConnect_correctControllerVersions
()
throws
Exception
{
CountDownLatch
latch
=
new
CountDownLatch
(
1
);
final
AtomicInteger
controllerVersion
=
new
AtomicInteger
();
final
AtomicInteger
controllerInterfaceVersion
=
new
AtomicInteger
();
MediaSession
.
Callback
callback
=
new
MediaSession
.
Callback
()
{
@Override
public
MediaSession
.
ConnectionResult
onConnect
(
MediaSession
session
,
ControllerInfo
controller
)
{
controllerVersion
.
set
(
controller
.
getControllerVersion
());
controllerInterfaceVersion
.
set
(
controller
.
getInterfaceVersion
());
latch
.
countDown
();
return
MediaSession
.
ConnectionResult
.
accept
(
new
SessionCommands
.
Builder
().
addAllSessionCommands
().
build
(),
new
Player
.
Commands
.
Builder
().
addAllCommands
().
build
());
}
};
MediaSession
session
=
sessionTestRule
.
ensureReleaseAfterTest
(
new
MediaSession
.
Builder
(
context
,
player
)
.
setCallback
(
callback
)
.
setId
(
"testOnConnect_correctControllerVersions"
)
.
build
());
controllerTestRule
.
createRemoteController
(
session
.
getToken
());
assertThat
(
latch
.
await
(
TIMEOUT_MS
,
MILLISECONDS
)).
isTrue
();
assertThat
(
controllerVersion
.
get
()).
isEqualTo
(
MediaLibraryInfo
.
VERSION_INT
);
assertThat
(
controllerInterfaceVersion
.
get
()).
isEqualTo
(
MediaControllerStub
.
VERSION_INT
);
}
@Test
public
void
onPostConnect_afterConnected
()
throws
Exception
{
CountDownLatch
latch
=
new
CountDownLatch
(
1
);
MediaSession
.
Callback
callback
=
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment