Loading services/core/java/com/android/server/media/MediaSessionService.java +34 −12 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.view.KeyEvent; import android.view.ViewConfiguration; import com.android.server.LocalServices; import com.android.server.SystemService; Loading Loading @@ -99,6 +100,7 @@ public class MediaSessionService extends SystemService implements Monitor { private final Object mLock = new Object(); private final MessageHandler mHandler = new MessageHandler(); private final PowerManager.WakeLock mMediaEventWakeLock; private final int mLongPressTimeout; private KeyguardManager mKeyguardManager; private IAudioService mAudioService; Loading @@ -120,6 +122,7 @@ public class MediaSessionService extends SystemService implements Monitor { mPriorityStack = new MediaSessionStack(); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mMediaEventWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "handleMediaEvent"); mLongPressTimeout = ViewConfiguration.getLongPressTimeout(); } @Override Loading Loading @@ -536,6 +539,16 @@ public class MediaSessionService extends SystemService implements Monitor { return ""; } private void dispatchVolumeKeyLongPressLocked(KeyEvent keyEvent) { // Only consider full user. UserRecord user = mUserRecords.get(mCurrentUserIdList.get(0)); try { user.mOnVolumeKeyLongPressListener.onVolumeKeyLongPress(keyEvent); } catch (RemoteException e) { Log.w(TAG, "Failed to send " + keyEvent + " to volume key long-press listener"); } } /** * Information about a particular user. The contents of this object is * guarded by mLock. Loading Loading @@ -944,7 +957,8 @@ public class MediaSessionService extends SystemService implements Monitor { try { synchronized (mLock) { // Only consider full user. UserRecord user = mUserRecords.get(mCurrentUserIdList.get(0)); int userId = mCurrentUserIdList.get(0); UserRecord user = mUserRecords.get(userId); if (mPriorityStack.isGlobalPriorityActive() || user.mOnVolumeKeyLongPressListener == null) { Loading @@ -954,11 +968,17 @@ public class MediaSessionService extends SystemService implements Monitor { // at the same time. if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { if (keyEvent.getRepeatCount() == 0) { user.mInitialDownVolumeKeyEvent = keyEvent; // Keeps the copy of the KeyEvent because it can be reused. user.mInitialDownVolumeKeyEvent = KeyEvent.obtain(keyEvent); user.mInitialDownVolumeStream = stream; user.mInitialDownMusicOnly = musicOnly; mHandler.sendMessageDelayed( mHandler.obtainMessage( MessageHandler.MSG_VOLUME_INITIAL_DOWN, userId, 0), mLongPressTimeout); } if (keyEvent.getRepeatCount() > 0 || keyEvent.isLongPress()) { mHandler.removeMessages(MessageHandler.MSG_VOLUME_INITIAL_DOWN); if (user.mInitialDownVolumeKeyEvent != null) { dispatchVolumeKeyLongPressLocked( user.mInitialDownVolumeKeyEvent); Loading @@ -968,6 +988,7 @@ public class MediaSessionService extends SystemService implements Monitor { dispatchVolumeKeyLongPressLocked(keyEvent); } } else { // if up mHandler.removeMessages(MessageHandler.MSG_VOLUME_INITIAL_DOWN); if (user.mInitialDownVolumeKeyEvent != null && user.mInitialDownVolumeKeyEvent.getDownTime() == keyEvent.getDownTime()) { Loading @@ -988,16 +1009,6 @@ public class MediaSessionService extends SystemService implements Monitor { } } private void dispatchVolumeKeyLongPressLocked(KeyEvent keyEvent) { // Only consider full user. UserRecord user = mUserRecords.get(mCurrentUserIdList.get(0)); try { user.mOnVolumeKeyLongPressListener.onVolumeKeyLongPress(keyEvent); } catch (RemoteException e) { Log.w(TAG, "Failed to send " + keyEvent + " to volume key long-press listener"); } } private void dispatchVolumeKeyEventLocked( KeyEvent keyEvent, int stream, boolean musicOnly) { boolean down = keyEvent.getAction() == KeyEvent.ACTION_DOWN; Loading Loading @@ -1480,6 +1491,7 @@ public class MediaSessionService extends SystemService implements Monitor { final class MessageHandler extends Handler { private static final int MSG_SESSIONS_CHANGED = 1; private static final int MSG_VOLUME_INITIAL_DOWN = 2; @Override public void handleMessage(Message msg) { Loading @@ -1487,6 +1499,16 @@ public class MediaSessionService extends SystemService implements Monitor { case MSG_SESSIONS_CHANGED: pushSessionsChanged(msg.arg1); break; case MSG_VOLUME_INITIAL_DOWN: synchronized (mLock) { UserRecord user = mUserRecords.get((int) msg.arg1); if (user != null && user.mInitialDownVolumeKeyEvent != null) { dispatchVolumeKeyLongPressLocked(user.mInitialDownVolumeKeyEvent); // Mark that the key is already handled. user.mInitialDownVolumeKeyEvent = null; } } break; } } Loading Loading
services/core/java/com/android/server/media/MediaSessionService.java +34 −12 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.view.KeyEvent; import android.view.ViewConfiguration; import com.android.server.LocalServices; import com.android.server.SystemService; Loading Loading @@ -99,6 +100,7 @@ public class MediaSessionService extends SystemService implements Monitor { private final Object mLock = new Object(); private final MessageHandler mHandler = new MessageHandler(); private final PowerManager.WakeLock mMediaEventWakeLock; private final int mLongPressTimeout; private KeyguardManager mKeyguardManager; private IAudioService mAudioService; Loading @@ -120,6 +122,7 @@ public class MediaSessionService extends SystemService implements Monitor { mPriorityStack = new MediaSessionStack(); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mMediaEventWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "handleMediaEvent"); mLongPressTimeout = ViewConfiguration.getLongPressTimeout(); } @Override Loading Loading @@ -536,6 +539,16 @@ public class MediaSessionService extends SystemService implements Monitor { return ""; } private void dispatchVolumeKeyLongPressLocked(KeyEvent keyEvent) { // Only consider full user. UserRecord user = mUserRecords.get(mCurrentUserIdList.get(0)); try { user.mOnVolumeKeyLongPressListener.onVolumeKeyLongPress(keyEvent); } catch (RemoteException e) { Log.w(TAG, "Failed to send " + keyEvent + " to volume key long-press listener"); } } /** * Information about a particular user. The contents of this object is * guarded by mLock. Loading Loading @@ -944,7 +957,8 @@ public class MediaSessionService extends SystemService implements Monitor { try { synchronized (mLock) { // Only consider full user. UserRecord user = mUserRecords.get(mCurrentUserIdList.get(0)); int userId = mCurrentUserIdList.get(0); UserRecord user = mUserRecords.get(userId); if (mPriorityStack.isGlobalPriorityActive() || user.mOnVolumeKeyLongPressListener == null) { Loading @@ -954,11 +968,17 @@ public class MediaSessionService extends SystemService implements Monitor { // at the same time. if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { if (keyEvent.getRepeatCount() == 0) { user.mInitialDownVolumeKeyEvent = keyEvent; // Keeps the copy of the KeyEvent because it can be reused. user.mInitialDownVolumeKeyEvent = KeyEvent.obtain(keyEvent); user.mInitialDownVolumeStream = stream; user.mInitialDownMusicOnly = musicOnly; mHandler.sendMessageDelayed( mHandler.obtainMessage( MessageHandler.MSG_VOLUME_INITIAL_DOWN, userId, 0), mLongPressTimeout); } if (keyEvent.getRepeatCount() > 0 || keyEvent.isLongPress()) { mHandler.removeMessages(MessageHandler.MSG_VOLUME_INITIAL_DOWN); if (user.mInitialDownVolumeKeyEvent != null) { dispatchVolumeKeyLongPressLocked( user.mInitialDownVolumeKeyEvent); Loading @@ -968,6 +988,7 @@ public class MediaSessionService extends SystemService implements Monitor { dispatchVolumeKeyLongPressLocked(keyEvent); } } else { // if up mHandler.removeMessages(MessageHandler.MSG_VOLUME_INITIAL_DOWN); if (user.mInitialDownVolumeKeyEvent != null && user.mInitialDownVolumeKeyEvent.getDownTime() == keyEvent.getDownTime()) { Loading @@ -988,16 +1009,6 @@ public class MediaSessionService extends SystemService implements Monitor { } } private void dispatchVolumeKeyLongPressLocked(KeyEvent keyEvent) { // Only consider full user. UserRecord user = mUserRecords.get(mCurrentUserIdList.get(0)); try { user.mOnVolumeKeyLongPressListener.onVolumeKeyLongPress(keyEvent); } catch (RemoteException e) { Log.w(TAG, "Failed to send " + keyEvent + " to volume key long-press listener"); } } private void dispatchVolumeKeyEventLocked( KeyEvent keyEvent, int stream, boolean musicOnly) { boolean down = keyEvent.getAction() == KeyEvent.ACTION_DOWN; Loading Loading @@ -1480,6 +1491,7 @@ public class MediaSessionService extends SystemService implements Monitor { final class MessageHandler extends Handler { private static final int MSG_SESSIONS_CHANGED = 1; private static final int MSG_VOLUME_INITIAL_DOWN = 2; @Override public void handleMessage(Message msg) { Loading @@ -1487,6 +1499,16 @@ public class MediaSessionService extends SystemService implements Monitor { case MSG_SESSIONS_CHANGED: pushSessionsChanged(msg.arg1); break; case MSG_VOLUME_INITIAL_DOWN: synchronized (mLock) { UserRecord user = mUserRecords.get((int) msg.arg1); if (user != null && user.mInitialDownVolumeKeyEvent != null) { dispatchVolumeKeyLongPressLocked(user.mInitialDownVolumeKeyEvent); // Mark that the key is already handled. user.mInitialDownVolumeKeyEvent = null; } } break; } } Loading