Add context to customization class constructors
Context may be needed to obtain extra information.
Also fix bug where exception is thrown when
MediaKeyDispatcher#getOverriddenKeyEvents is not overridden in the
custom MediaKeyDispatcher class.
Bug: 168579449
Test: build and manually check that custom classes are being
instantiated through reflection.
Change-Id: I248c5842dc8675d3fbe5699cfc7174d10a4d7188
This commit is contained in:
@@ -20,6 +20,7 @@ import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.media.session.ISessionManager;
|
||||
import android.media.session.MediaSession;
|
||||
import android.os.Binder;
|
||||
@@ -60,7 +61,7 @@ public abstract class MediaKeyDispatcher {
|
||||
|
||||
private Map<Integer, Integer> mOverriddenKeyEvents;
|
||||
|
||||
public MediaKeyDispatcher() {
|
||||
public MediaKeyDispatcher(Context context) {
|
||||
// Constructor used for reflection
|
||||
mOverriddenKeyEvents = new HashMap<>();
|
||||
mOverriddenKeyEvents.put(KeyEvent.KEYCODE_MEDIA_PLAY, 0);
|
||||
|
||||
@@ -96,7 +96,6 @@ import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* System implementation of MediaSessionManager
|
||||
@@ -152,7 +151,6 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
|
||||
private SessionPolicyProvider mCustomSessionPolicyProvider;
|
||||
private MediaKeyDispatcher mCustomMediaKeyDispatcher;
|
||||
private Map<Integer, Integer> mOverriddenKeyEventsMap;
|
||||
|
||||
public MediaSessionService(Context context) {
|
||||
super(context);
|
||||
@@ -771,7 +769,6 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
private void instantiateCustomDispatcher(String nameFromTesting) {
|
||||
synchronized (mLock) {
|
||||
mCustomMediaKeyDispatcher = null;
|
||||
mOverriddenKeyEventsMap = null;
|
||||
|
||||
String customDispatcherClassName = (nameFromTesting == null)
|
||||
? mContext.getResources().getString(R.string.config_customMediaKeyDispatcher)
|
||||
@@ -779,9 +776,10 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
try {
|
||||
if (!TextUtils.isEmpty(customDispatcherClassName)) {
|
||||
Class customDispatcherClass = Class.forName(customDispatcherClassName);
|
||||
Constructor constructor = customDispatcherClass.getDeclaredConstructor();
|
||||
mCustomMediaKeyDispatcher = (MediaKeyDispatcher) constructor.newInstance();
|
||||
mOverriddenKeyEventsMap = mCustomMediaKeyDispatcher.getOverriddenKeyEvents();
|
||||
Constructor constructor =
|
||||
customDispatcherClass.getDeclaredConstructor(Context.class);
|
||||
mCustomMediaKeyDispatcher =
|
||||
(MediaKeyDispatcher) constructor.newInstance(mContext);
|
||||
}
|
||||
} catch (ClassNotFoundException | InstantiationException | InvocationTargetException
|
||||
| IllegalAccessException | NoSuchMethodException e) {
|
||||
@@ -801,9 +799,10 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
try {
|
||||
if (!TextUtils.isEmpty(customProviderClassName)) {
|
||||
Class customProviderClass = Class.forName(customProviderClassName);
|
||||
Constructor constructor = customProviderClass.getDeclaredConstructor();
|
||||
Constructor constructor =
|
||||
customProviderClass.getDeclaredConstructor(Context.class);
|
||||
mCustomSessionPolicyProvider =
|
||||
(SessionPolicyProvider) constructor.newInstance();
|
||||
(SessionPolicyProvider) constructor.newInstance(mContext);
|
||||
}
|
||||
} catch (ClassNotFoundException | InstantiationException | InvocationTargetException
|
||||
| IllegalAccessException | NoSuchMethodException e) {
|
||||
@@ -2398,9 +2397,12 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
return;
|
||||
}
|
||||
|
||||
int overriddenKeyEvents = (mCustomMediaKeyDispatcher == null) ? 0
|
||||
: mCustomMediaKeyDispatcher.getOverriddenKeyEvents()
|
||||
.get(keyEvent.getKeyCode());
|
||||
int overriddenKeyEvents = 0;
|
||||
if (mCustomMediaKeyDispatcher == null
|
||||
&& mCustomMediaKeyDispatcher.getOverriddenKeyEvents() != null) {
|
||||
overriddenKeyEvents = mCustomMediaKeyDispatcher.getOverriddenKeyEvents()
|
||||
.get(keyEvent.getKeyCode());
|
||||
}
|
||||
cancelTrackingIfNeeded(packageName, pid, uid, asSystemService, keyEvent,
|
||||
needWakeLock, opPackageName, stream, musicOnly, overriddenKeyEvents);
|
||||
if (!needTracking(keyEvent, overriddenKeyEvents)) {
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.server.media;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.media.session.MediaSession;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
@@ -54,7 +55,7 @@ public abstract class SessionPolicyProvider {
|
||||
*/
|
||||
static final int SESSION_POLICY_IGNORE_BUTTON_SESSION = 1 << 1;
|
||||
|
||||
public SessionPolicyProvider() {
|
||||
public SessionPolicyProvider(Context context) {
|
||||
// Constructor used for reflection
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user