diff options
author | RoboErik <epastern@google.com> | 2014-06-02 17:10:07 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-06-02 17:10:07 +0000 |
commit | e78755e180c4f29ccc324112286dd81ab2016c40 (patch) | |
tree | a414dfa20c73b816b375eb093e0d1f2e4cdbc54a /media | |
parent | ddc93ce3438618a15f30fc20d45634325f8ce84f (diff) | |
parent | b69ffd4dc2c8fa85e0064151141ebeee90de471e (diff) | |
download | frameworks_base-e78755e180c4f29ccc324112286dd81ab2016c40.zip frameworks_base-e78755e180c4f29ccc324112286dd81ab2016c40.tar.gz frameworks_base-e78755e180c4f29ccc324112286dd81ab2016c40.tar.bz2 |
Merge "Minimum work to make volume handling work with sessions" into lmp-preview-dev
Diffstat (limited to 'media')
7 files changed, 96 insertions, 8 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 249b116..8ca303b 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -644,7 +644,12 @@ public class AudioManager { if (mUseMasterVolume) { service.adjustMasterVolume(direction, flags, mContext.getOpPackageName()); } else { - service.adjustVolume(direction, flags, mContext.getOpPackageName()); + if (USE_SESSIONS) { + MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); + helper.sendAdjustVolumeBy(USE_DEFAULT_STREAM_TYPE, direction, flags); + } else { + service.adjustVolume(direction, flags, mContext.getOpPackageName()); + } } } catch (RemoteException e) { Log.e(TAG, "Dead object in adjustVolume", e); @@ -674,8 +679,13 @@ public class AudioManager { if (mUseMasterVolume) { service.adjustMasterVolume(direction, flags, mContext.getOpPackageName()); } else { - service.adjustSuggestedStreamVolume(direction, suggestedStreamType, flags, - mContext.getOpPackageName()); + if (USE_SESSIONS) { + MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); + helper.sendAdjustVolumeBy(suggestedStreamType, direction, flags); + } else { + service.adjustSuggestedStreamVolume(direction, suggestedStreamType, flags, + mContext.getOpPackageName()); + } } } catch (RemoteException e) { Log.e(TAG, "Dead object in adjustSuggestedStreamVolume", e); diff --git a/media/java/android/media/session/ISession.aidl b/media/java/android/media/session/ISession.aidl index c4233c3..1cfc5bc 100644 --- a/media/java/android/media/session/ISession.aidl +++ b/media/java/android/media/session/ISession.aidl @@ -47,4 +47,8 @@ interface ISession { void setMetadata(in MediaMetadata metadata); void setPlaybackState(in PlaybackState state); void setRatingType(int type); + + // These commands relate to volume handling + void configureVolumeHandling(int type, int arg1, int arg2); + void setCurrentVolume(int currentVolume); }
\ No newline at end of file diff --git a/media/java/android/media/session/ISessionCallback.aidl b/media/java/android/media/session/ISessionCallback.aidl index 103c3f1..0316d1f 100644 --- a/media/java/android/media/session/ISessionCallback.aidl +++ b/media/java/android/media/session/ISessionCallback.aidl @@ -45,4 +45,8 @@ oneway interface ISessionCallback { void onRewind(); void onSeekTo(long pos); void onRate(in Rating rating); + + // These callbacks are for volume handling + void onAdjustVolumeBy(int delta); + void onSetVolumeTo(int value); }
\ No newline at end of file diff --git a/media/java/android/media/session/ISessionManager.aidl b/media/java/android/media/session/ISessionManager.aidl index 38b9293..6d9888f 100644 --- a/media/java/android/media/session/ISessionManager.aidl +++ b/media/java/android/media/session/ISessionManager.aidl @@ -29,4 +29,5 @@ interface ISessionManager { ISession createSession(String packageName, in ISessionCallback cb, String tag, int userId); List<IBinder> getSessions(in ComponentName compName, int userId); void dispatchMediaKeyEvent(in KeyEvent keyEvent, boolean needWakeLock); + void dispatchAdjustVolumeBy(int suggestedStream, int delta, int flags); }
\ No newline at end of file diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index 90ccf68..7972639 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -124,9 +124,21 @@ public final class MediaSession { */ public static final int DISCONNECT_REASON_SESSION_DESTROYED = 5; - private static final String KEY_COMMAND = "command"; - private static final String KEY_EXTRAS = "extras"; - private static final String KEY_CALLBACK = "callback"; + /** + * The session uses local playback. Used for configuring volume handling + * with the system. + * + * @hide + */ + public static final int VOLUME_TYPE_LOCAL = 1; + + /** + * The session uses remote playback. Used for configuring volume handling + * with the system. + * + * @hide + */ + public static final int VOLUME_TYPE_REMOTE = 2; private final Object mLock = new Object(); @@ -143,6 +155,7 @@ public final class MediaSession { = new ArrayMap<String, RouteInterface.EventListener>(); private Route mRoute; + private RemoteVolumeProvider mVolumeProvider; private boolean mActive = false;; @@ -242,7 +255,11 @@ public final class MediaSession { * @param stream The {@link AudioManager} stream this session is playing on. */ public void setPlaybackToLocal(int stream) { - // TODO + try { + mBinder.configureVolumeHandling(VOLUME_TYPE_LOCAL, stream, 0); + } catch (RemoteException e) { + Log.wtf(TAG, "Failure in setPlaybackToLocal.", e); + } } /** @@ -259,7 +276,14 @@ public final class MediaSession { if (volumeProvider == null) { throw new IllegalArgumentException("volumeProvider may not be null!"); } - // TODO + mVolumeProvider = volumeProvider; + + try { + mBinder.configureVolumeHandling(VOLUME_TYPE_REMOTE, volumeProvider.getVolumeControl(), + volumeProvider.getMaxVolume()); + } catch (RemoteException e) { + Log.wtf(TAG, "Failure in setPlaybackToRemote.", e); + } } /** @@ -942,6 +966,26 @@ public final class MediaSession { } + /* + * (non-Javadoc) + * @see android.media.session.ISessionCallback#onAdjustVolumeBy(int) + */ + @Override + public void onAdjustVolumeBy(int delta) throws RemoteException { + // TODO(epastern): Auto-generated method stub + + } + + /* + * (non-Javadoc) + * @see android.media.session.ISessionCallback#onSetVolumeTo(int) + */ + @Override + public void onSetVolumeTo(int value) throws RemoteException { + // TODO(epastern): Auto-generated method stub + + } + } private class CallbackMessageHandler extends Handler { diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java index c303e77..099f601 100644 --- a/media/java/android/media/session/MediaSessionLegacyHelper.java +++ b/media/java/android/media/session/MediaSessionLegacyHelper.java @@ -76,6 +76,13 @@ public class MediaSessionLegacyHelper { } } + public void sendAdjustVolumeBy(int suggestedStream, int delta, int flags) { + mSessionManager.dispatchAdjustVolumeBy(suggestedStream, delta, flags); + if (DEBUG) { + Log.d(TAG, "dispatched volume adjustment"); + } + } + public void addRccListener(PendingIntent pi, MediaSession.TransportControlsCallback listener) { if (pi == null) { diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java index 8d5e338..9e8b0d3 100644 --- a/media/java/android/media/session/MediaSessionManager.java +++ b/media/java/android/media/session/MediaSessionManager.java @@ -166,4 +166,22 @@ public final class MediaSessionManager { Log.e(TAG, "Failed to send key event.", e); } } + + /** + * Dispatch an adjust volume request to the system. It will be routed to the + * most relevant stream/session. + * + * @param suggestedStream The stream to fall back to if there isn't a + * relevant stream + * @param delta The amount to adjust the volume by. + * @param flags Any flags to include with the volume change. + * @hide + */ + public void dispatchAdjustVolumeBy(int suggestedStream, int delta, int flags) { + try { + mService.dispatchAdjustVolumeBy(suggestedStream, delta, flags); + } catch (RemoteException e) { + Log.e(TAG, "Failed to send adjust volume.", e); + } + } } |