List of usage examples for android.view KeyEvent KEYCODE_MEDIA_PAUSE
int KEYCODE_MEDIA_PAUSE
To view the source code for android.view KeyEvent KEYCODE_MEDIA_PAUSE.
Click Source Link
From source file:com.bluros.music.helpers.MediaButtonIntentReceiver.java
@Override public void onReceive(final Context context, final Intent intent) { final String intentAction = intent.getAction(); if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intentAction)) { if (PreferencesUtility.getInstance(context).pauseEnabledOnDetach()) startService(context, MusicService.CMDPAUSE); } else if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { final KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event == null) { return; }/*from ww w .j av a 2 s . c o m*/ final int keycode = event.getKeyCode(); final int action = event.getAction(); final long eventtime = event.getEventTime(); String command = null; switch (keycode) { case KeyEvent.KEYCODE_MEDIA_STOP: command = MusicService.CMDSTOP; break; case KeyEvent.KEYCODE_HEADSETHOOK: case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: command = MusicService.CMDTOGGLEPAUSE; break; case KeyEvent.KEYCODE_MEDIA_NEXT: command = MusicService.CMDNEXT; break; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: command = MusicService.CMDPREVIOUS; break; case KeyEvent.KEYCODE_MEDIA_PAUSE: command = MusicService.CMDPAUSE; break; case KeyEvent.KEYCODE_MEDIA_PLAY: command = MusicService.CMDPLAY; break; } if (command != null) { if (action == KeyEvent.ACTION_DOWN) { if (mDown) { if (MusicService.CMDTOGGLEPAUSE.equals(command) || MusicService.CMDPLAY.equals(command)) { if (mLastClickTime != 0 && eventtime - mLastClickTime > LONG_PRESS_DELAY) { acquireWakeLockAndSendMessage(context, mHandler.obtainMessage(MSG_LONGPRESS_TIMEOUT, context), 0); } } } else if (event.getRepeatCount() == 0) { if (keycode == KeyEvent.KEYCODE_HEADSETHOOK) { if (eventtime - mLastClickTime >= DOUBLE_CLICK) { mClickCounter = 0; } mClickCounter++; if (DEBUG) Log.v(TAG, "Got headset click, count = " + mClickCounter); mHandler.removeMessages(MSG_HEADSET_DOUBLE_CLICK_TIMEOUT); Message msg = mHandler.obtainMessage(MSG_HEADSET_DOUBLE_CLICK_TIMEOUT, mClickCounter, 0, context); long delay = mClickCounter < 3 ? DOUBLE_CLICK : 0; if (mClickCounter >= 3) { mClickCounter = 0; } mLastClickTime = eventtime; acquireWakeLockAndSendMessage(context, msg, delay); } else { startService(context, command); } mLaunched = false; mDown = true; } } else { mHandler.removeMessages(MSG_LONGPRESS_TIMEOUT); mDown = false; } if (isOrderedBroadcast()) { abortBroadcast(); } releaseWakeLockIfHandlerIdle(); } } }
From source file:com.cw.litenote.note.Note.java
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { int newPos;//from ww w .ja v a 2 s . c o m System.out.println("Note / _onKeyDown / keyCode = " + keyCode); switch (keyCode) { case KeyEvent.KEYCODE_MEDIA_PREVIOUS: //88 if (viewPager.getCurrentItem() == 0) newPos = mPagerAdapter.getCount() - 1;//back to last one else newPos = NoteUi.getFocus_notePos() - 1; NoteUi.setFocus_notePos(newPos); viewPager.setCurrentItem(newPos); BackgroundAudioService.mIsPrepared = false; BackgroundAudioService.mMediaPlayer = null; Audio_manager.isRunnableOn_page = false; findViewById(R.id.pager_btn_audio_play).performClick(); return true; case KeyEvent.KEYCODE_MEDIA_NEXT: //87 if (viewPager.getCurrentItem() == (mPagerAdapter.getCount() - 1)) newPos = 0; else newPos = NoteUi.getFocus_notePos() + 1; NoteUi.setFocus_notePos(newPos); viewPager.setCurrentItem(newPos); BackgroundAudioService.mIsPrepared = false; BackgroundAudioService.mMediaPlayer = null; Audio_manager.isRunnableOn_page = false; AudioUi_note.mPager_audio_play_button.performClick(); return true; case KeyEvent.KEYCODE_MEDIA_PLAY: //126 AudioUi_note.mPager_audio_play_button.performClick(); return true; case KeyEvent.KEYCODE_MEDIA_PAUSE: //127 AudioUi_note.mPager_audio_play_button.performClick(); return true; case KeyEvent.KEYCODE_BACK: onBackPressed(); return true; case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: return true; case KeyEvent.KEYCODE_MEDIA_REWIND: return true; case KeyEvent.KEYCODE_MEDIA_STOP: return true; } return false; }
From source file:com.example.android.mediarouter.player.MainActivity.java
public boolean handleMediaKey(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: { Log.d(TAG, "Received Play/Pause event from RemoteControlClient"); mPaused = !mPaused;// w ww . j ava2 s .c om if (mPaused) { mSessionManager.pause(); } else { mSessionManager.resume(); } return true; } case KeyEvent.KEYCODE_MEDIA_PLAY: { Log.d(TAG, "Received Play event from RemoteControlClient"); if (mPaused) { mPaused = false; mSessionManager.resume(); } return true; } case KeyEvent.KEYCODE_MEDIA_PAUSE: { Log.d(TAG, "Received Pause event from RemoteControlClient"); if (!mPaused) { mPaused = true; mSessionManager.pause(); } return true; } case KeyEvent.KEYCODE_MEDIA_STOP: { Log.d(TAG, "Received Stop event from RemoteControlClient"); mPaused = false; mSessionManager.stop(); return true; } default: break; } } return false; }
From source file:com.google.android.apps.iosched.ui.gtv.GoogleTVSessionLivestreamActivity.java
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_MEDIA_PAUSE: mYouTubePlayer.pause();/*from w w w . ja v a 2 s. com*/ return true; case KeyEvent.KEYCODE_MEDIA_PLAY: mYouTubePlayer.play(); return true; case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: mYouTubePlayer.seekRelativeMillis(20000); return true; case KeyEvent.KEYCODE_MEDIA_REWIND: mYouTubePlayer.seekRelativeMillis(-20000); return true; default: return super.onKeyDown(keyCode, event); } }
From source file:com.mobilevue.vod.VideoControllerView.java
@Override public boolean dispatchKeyEvent(KeyEvent event) { if (mPlayer == null) { return true; }//from w w w . j av a 2 s . co m int keyCode = event.getKeyCode(); final boolean uniqueDown = event.getRepeatCount() == 0 && event.getAction() == KeyEvent.ACTION_DOWN; if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || keyCode == KeyEvent.KEYCODE_SPACE) { if (uniqueDown) { doPauseResume(); show(sDefaultTimeout); if (mPauseButton != null) { mPauseButton.requestFocus(); } } return true; } else if (keyCode == KeyEvent.KEYCODE_MEDIA_PLAY) { if (uniqueDown && !mPlayer.isPlaying()) { mPlayer.start(); updatePausePlay(); show(sDefaultTimeout); } return true; } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP || keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE) { if (uniqueDown && mPlayer.isPlaying()) { mPlayer.pause(); updatePausePlay(); show(sDefaultTimeout); } return true; } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) { // don't show the controls for volume adjustment return super.dispatchKeyEvent(event); } else if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU) { if (uniqueDown) { hide(); } return true; } show(sDefaultTimeout); return super.dispatchKeyEvent(event); }
From source file:CookieVideoView.java
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { boolean isKeyCodeSupported = keyCode != KeyEvent.KEYCODE_BACK && keyCode != KeyEvent.KEYCODE_VOLUME_UP && keyCode != KeyEvent.KEYCODE_VOLUME_DOWN && keyCode != KeyEvent.KEYCODE_VOLUME_MUTE && keyCode != KeyEvent.KEYCODE_MENU && keyCode != KeyEvent.KEYCODE_CALL && keyCode != KeyEvent.KEYCODE_ENDCALL; if (isInPlaybackState() && isKeyCodeSupported && mMediaController != null) { if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) { if (mMediaPlayer.isPlaying()) { pause();// w w w . j av a 2s . c o m mMediaController.show(); } else { start(); mMediaController.hide(); } return true; } else if (keyCode == KeyEvent.KEYCODE_MEDIA_PLAY) { if (!mMediaPlayer.isPlaying()) { start(); mMediaController.hide(); } return true; } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP || keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE) { if (mMediaPlayer.isPlaying()) { pause(); mMediaController.show(); } return true; } else { toggleMediaControlsVisiblity(); } } return super.onKeyDown(keyCode, event); }
From source file:com.cw.litenote.main.MainAct.java
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // System.out.println("MainAct / _onKeyDown / keyCode = " + keyCode); switch (keyCode) { case KeyEvent.KEYCODE_MEDIA_PREVIOUS: //88 if (TabsHost.audioUi_page != null) TabsHost.audioUi_page.audioPanel_previous_btn.performClick(); return true; case KeyEvent.KEYCODE_MEDIA_NEXT: //87 if (TabsHost.audioUi_page != null) TabsHost.audioUi_page.audioPanel_next_btn.performClick(); return true; case KeyEvent.KEYCODE_MEDIA_PLAY: //126 if (TabsHost.audioUi_page != null) TabsHost.audioUi_page.audioPanel_play_button.performClick(); else//from w ww . j a v a2s. c o m playFirstAudio(); return true; case KeyEvent.KEYCODE_MEDIA_PAUSE: //127 if (TabsHost.audioUi_page != null) TabsHost.audioUi_page.audioPanel_play_button.performClick(); return true; case KeyEvent.KEYCODE_BACK: onBackPressed(); return true; case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: return true; case KeyEvent.KEYCODE_MEDIA_REWIND: return true; case KeyEvent.KEYCODE_MEDIA_STOP: return true; } return false; }
From source file:com.ll.myapplication.vitamio.widget.VideoView.java
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { boolean isKeyCodeSupported = keyCode != KeyEvent.KEYCODE_BACK && keyCode != KeyEvent.KEYCODE_VOLUME_UP && keyCode != KeyEvent.KEYCODE_VOLUME_DOWN && keyCode != KeyEvent.KEYCODE_MENU && keyCode != KeyEvent.KEYCODE_CALL && keyCode != KeyEvent.KEYCODE_ENDCALL; if (isInPlaybackState() && isKeyCodeSupported && mMediaController != null) { if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || keyCode == KeyEvent.KEYCODE_SPACE) { if (mMediaPlayer.isPlaying()) { pause();//from w w w . j av a 2s . com mMediaController.show(); } else { start(); mMediaController.hide(); } return true; } else if (keyCode == KeyEvent.KEYCODE_MEDIA_PLAY) { if (!mMediaPlayer.isPlaying()) { start(); mMediaController.hide(); } return true; } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP || keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE) { if (mMediaPlayer.isPlaying()) { pause(); mMediaController.show(); } return true; } else { toggleMediaControlsVisiblity(); } } return super.onKeyDown(keyCode, event); }
From source file:com.android.tv.ui.TvOverlayManager.java
/** * Handles the onKeyUp event of the {@link MainActivity}. *//*from w w w .j av a2 s .c o m*/ @KeyHandlerResultType public int onKeyUp(int keyCode, KeyEvent event) { // Handle media key here because it is related to the menu. if (isMediaStartKey(keyCode)) { // The media key should not be passed up to the system in any cases. if (mCurrentDialog != null || mProgramGuide.isActive() || mSideFragmentManager.isActive() || mSearchFragment.isVisible() || mTransitionManager.isKeypadChannelSwitchActive() || mTransitionManager.isSelectInputActive() || mSetupFragmentActive || mNewSourcesFragmentActive) { // Do not handle media key when any pop-ups which can handle keys are active. return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } TimeShiftManager timeShiftManager = mMainActivity.getTimeShiftManager(); if (!timeShiftManager.isAvailable()) { return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } switch (keyCode) { case KeyEvent.KEYCODE_MEDIA_PLAY: timeShiftManager.play(); showMenu(Menu.REASON_PLAY_CONTROLS_PLAY); break; case KeyEvent.KEYCODE_MEDIA_PAUSE: timeShiftManager.pause(); showMenu(Menu.REASON_PLAY_CONTROLS_PAUSE); break; case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: timeShiftManager.togglePlayPause(); showMenu(Menu.REASON_PLAY_CONTROLS_PLAY_PAUSE); break; case KeyEvent.KEYCODE_MEDIA_REWIND: timeShiftManager.rewind(); showMenu(Menu.REASON_PLAY_CONTROLS_REWIND); break; case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: timeShiftManager.fastForward(); showMenu(Menu.REASON_PLAY_CONTROLS_FAST_FORWARD); break; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: timeShiftManager.jumpToPrevious(); showMenu(Menu.REASON_PLAY_CONTROLS_JUMP_TO_PREVIOUS); break; case KeyEvent.KEYCODE_MEDIA_NEXT: timeShiftManager.jumpToNext(); showMenu(Menu.REASON_PLAY_CONTROLS_JUMP_TO_NEXT); break; default: // Does nothing. break; } return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } if (keyCode == KeyEvent.KEYCODE_I || keyCode == KeyEvent.KEYCODE_TV_INPUT) { if (mTransitionManager.isSelectInputActive()) { mSelectInputView.onKeyUp(keyCode, event); } else { showSelectInputView(); } return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } if (mCurrentDialog != null) { // Consumes the keys while a Dialog is showing. // This can be happen while a Dialog isn't created yet. return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } if (mProgramGuide.isActive()) { if (keyCode == KeyEvent.KEYCODE_BACK) { mProgramGuide.onBackPressed(); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } return MainActivity.KEY_EVENT_HANDLER_RESULT_DISPATCH_TO_OVERLAY; } if (mSideFragmentManager.isActive()) { if (keyCode == KeyEvent.KEYCODE_BACK || mSideFragmentManager.isHideKeyForCurrentPanel(keyCode)) { mSideFragmentManager.popSideFragment(); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } return MainActivity.KEY_EVENT_HANDLER_RESULT_DISPATCH_TO_OVERLAY; } if (mMenu.isActive() || mTransitionManager.isSceneActive()) { if (keyCode == KeyEvent.KEYCODE_BACK) { TimeShiftManager timeShiftManager = mMainActivity.getTimeShiftManager(); if (timeShiftManager.isPaused()) { timeShiftManager.play(); } hideOverlays(TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_DIALOG | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } if (mMenu.isActive()) { if (KeypadChannelSwitchView.isChannelNumberKey(keyCode)) { mMainActivity.showKeypadChannelSwitchView(keyCode); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } return MainActivity.KEY_EVENT_HANDLER_RESULT_DISPATCH_TO_OVERLAY; } } if (mTransitionManager.isKeypadChannelSwitchActive()) { if (keyCode == KeyEvent.KEYCODE_BACK) { mTransitionManager.goToEmptyScene(true); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } return mKeypadChannelSwitchView.onKeyUp(keyCode, event) ? MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED : MainActivity.KEY_EVENT_HANDLER_RESULT_NOT_HANDLED; } if (mTransitionManager.isSelectInputActive()) { if (keyCode == KeyEvent.KEYCODE_BACK) { mTransitionManager.goToEmptyScene(true); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } return mSelectInputView.onKeyUp(keyCode, event) ? MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED : MainActivity.KEY_EVENT_HANDLER_RESULT_NOT_HANDLED; } if (mSetupFragmentActive) { if (keyCode == KeyEvent.KEYCODE_BACK) { closeSetupFragment(true); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } return MainActivity.KEY_EVENT_HANDLER_RESULT_DISPATCH_TO_OVERLAY; } if (mNewSourcesFragmentActive) { if (keyCode == KeyEvent.KEYCODE_BACK) { closeNewSourcesFragment(true); return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED; } return MainActivity.KEY_EVENT_HANDLER_RESULT_DISPATCH_TO_OVERLAY; } return MainActivity.KEY_EVENT_HANDLER_RESULT_PASSTHROUGH; }
From source file:me.spadival.podmode.PodModeService.java
public void run() { podCommand pCommand = null;// w w w .j a va 2 s . co m podResponse pResponse = null; byte[] respBytes = null; long eventtime; Intent downIntent = null; KeyEvent downEvent = null; Intent upIntent = null; KeyEvent upEvent = null; // serialWrite(new byte[] { (byte) 0xFF, 0x55, 0x02, 0x00, 0x00, // (byte) 0xFE }); while (mPodRunning) { pCommand = readCommand(); if (pCommand == null) continue; if (pCommand.mode == 0x03) mPodStatus = podStat.DISPLAYREMOTE; if (mAccessoryName != null && (mPodStatus == podStat.SIMPLEREMOTE || mPodStatus == podStat.DISPLAYREMOTE || mPodStatus == podStat.ADVANCEDREMOTE || mPodStatus == podStat.ADVANCEDHACK) && mHTTPsend) { mHTTPsend = false; mHttpThread.start(); } if (mLaunchFirstTime && (pCommand.mode == 02 || (pCommand.mode == 04 && !mAdvancedRemoteApp.equals(PACKAGENAME)))) { String launchApp = null; if (pCommand.mode == 02) { mBanner = getString(R.string.simple_remote); launchApp = mSimpleRemoteApp; } if (pCommand.mode == 04) { mPodStatus = podStat.ADVANCEDREMOTE; if (!mAdvancedRemoteApp.equals(PACKAGENAME)) mPodStatus = podStat.ADVANCEDHACK; mBanner = getString(R.string.advanced_remote); launchApp = mAdvancedRemoteApp; } if (launchApp != null) { PackageManager pm = getPackageManager(); Intent LaunchIntent = pm.getLaunchIntentForPackage(launchApp); startActivity(LaunchIntent); ResolveInfo info = pm.resolveActivity(LaunchIntent, PackageManager.MATCH_DEFAULT_ONLY); mSongTitle = (String) info.loadLabel(pm); mElapsedTime = 0; if (pCommand.mode == 04) mRetriever.changeApp(false, mSongTitle, getString(R.string.advanced_remote), 999); mAlbumArtUri = "android.resource://" + launchApp + "/" + String.valueOf(info.getIconResource()); setUpAsForeground(mBanner); localBroadcast(false); } mLaunchFirstTime = false; } if (pCommand.mode == 02) { mPodStatus = podStat.SIMPLEREMOTE; switch (pCommand.command) { case RemoteRelease: respBytes = new byte[] { (byte) 0x01, 0x00, 0x00 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case RemotePlayPause: eventtime = SystemClock.uptimeMillis(); downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(downIntent, null); break; case RemoteJustPlay: eventtime = SystemClock.uptimeMillis(); downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(downIntent, null); break; case RemoteJustPause: eventtime = SystemClock.uptimeMillis(); downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PAUSE, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(downIntent, null); break; case RemoteSkipFwd: eventtime = SystemClock.uptimeMillis(); if (downEvent != null) { if (downEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_NEXT || downEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD) { if ((eventtime - downEvent.getEventTime()) > 1000) { downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(downIntent, null); upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, 0); upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); if (mSimpleRemoteApp != null) upIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(upIntent, null); } } } else { downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); } break; case RemoteSkipRwd: eventtime = SystemClock.uptimeMillis(); if (downEvent != null) { if (downEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PREVIOUS || downEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_REWIND) { if ((eventtime - downEvent.getEventTime()) > 1000) { downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_REWIND, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(downIntent, null); upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_REWIND, 0); upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); if (mSimpleRemoteApp != null) upIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(upIntent, null); } } } else { downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); } break; case RemoteStop: eventtime = SystemClock.uptimeMillis(); downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_STOP, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); if (mSimpleRemoteApp != null) downIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(downIntent, null); break; case RemoteButtonRel: eventtime = SystemClock.uptimeMillis(); if (downIntent != null) { if (downEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_NEXT || downEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PREVIOUS) sendOrderedBroadcast(downIntent, null); if (downEvent.getKeyCode() != KeyEvent.KEYCODE_MEDIA_FAST_FORWARD && downEvent.getKeyCode() != KeyEvent.KEYCODE_MEDIA_REWIND) { upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); upEvent = new KeyEvent(downEvent.getDownTime(), eventtime, KeyEvent.ACTION_UP, downEvent.getKeyCode(), 0); upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); if (mSimpleRemoteApp != null) upIntent.setPackage(mSimpleRemoteApp); sendOrderedBroadcast(upIntent, null); } } downIntent = null; downEvent = null; upIntent = null; upEvent = null; break; default: break; } } else { switch (pCommand.command) { case AppCmd: byte[] appNameBytes = new byte[pCommand.params.length - 3]; System.arraycopy(pCommand.params, 2, appNameBytes, 0, appNameBytes.length); String appName = ""; try { appName = new String(appNameBytes, "UTF8"); Log.d("PodMode", "AppCmd " + appName); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } break; case AppAck: break; case GetUpdateFlag: respBytes = new byte[] { 0x00, 0x0A, mUpdateFlag }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case SetUpdateFlag: mUpdateFlag = pCommand.params[0]; respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case SwitchToMainPlaylist: if (mPodStatus == podStat.ADVANCEDHACK) { mNowPlaying = 0; mPrevPlaying = 0; } else mNowPlaying = 0; mRetriever.switchToMainPlaylist(); respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case SwitchToItem: int itemNo = 0; itemNo = pCommand.params[4] & 0xFF; itemNo += ((pCommand.params[3] & 0xFF) << 8); itemNo += ((pCommand.params[2] & 0xFF) << 16); itemNo += ((pCommand.params[1] & 0xFF) << 24); if ((mPodStatus == podStat.ADVANCEDHACK && mNotifyHack)) { mNotifyHack = false; } else { if (mRetriever.switchToItem((int) pCommand.params[0], itemNo)) { if (pCommand.params[0] == (byte) 0x05) { mNowPlaying = itemNo; tryToGetAudioFocus(); playNextSong(null); } } } respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetCountForType: respBytes = new byte[] { 0x00, 0x19, 0x00, 0x00, 0x00, 0x00 }; int num = mRetriever.getCountForType((int) pCommand.params[0]); respBytes[5] = (byte) (num & 0xFF); respBytes[4] = (byte) ((num >> 8) & 0xFF); respBytes[3] = (byte) ((num >> 16) & 0xFF); respBytes[2] = (byte) ((num >> 24) & 0xFF); pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetItemNames: int startPos = 0; int count = 0; startPos = pCommand.params[4] & 0xFF; startPos += ((pCommand.params[3] & 0xFF) << 8); startPos += ((pCommand.params[2] & 0xFF) << 16); startPos += ((pCommand.params[1] & 0xFF) << 24); count = pCommand.params[8] & 0xFF; count += ((pCommand.params[7] & 0xFF) << 8); count += ((pCommand.params[6] & 0xFF) << 16); count += ((pCommand.params[5] & 0xFF) << 24); String[] itemNames = mRetriever.GetItemNames((int) pCommand.params[0], startPos, count); if (itemNames != null) { for (int i = 0; i < itemNames.length; i++) { byte[] part1 = { (byte) 0x00, (byte) 0x1B, (byte) (startPos >>> 24), (byte) (startPos >>> 16), (byte) (startPos >>> 8), (byte) startPos }; startPos++; respBytes = new String(new String(part1) + itemNames[i] + '\0').getBytes(); pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); } } break; case GetTimeStatus: respBytes = new byte[] { 0x00, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; if (mState != State.Preparing && mState != State.Retrieving) { int trackLen = 0; if (mPlayer != null) trackLen = mPlayer.getDuration(); respBytes[2] = (byte) (trackLen >>> 24); respBytes[3] = (byte) (trackLen >>> 16); respBytes[4] = (byte) (trackLen >>> 8); respBytes[5] = (byte) trackLen; int elapsedTime = 0; if (mPlayer != null) elapsedTime = mPlayer.getCurrentPosition(); respBytes[6] = (byte) (elapsedTime >>> 24); respBytes[7] = (byte) (elapsedTime >>> 16); respBytes[8] = (byte) (elapsedTime >>> 8); respBytes[9] = (byte) elapsedTime; switch (mState) { case Stopped: respBytes[10] = (byte) 0x00; break; case Playing: respBytes[10] = (byte) 0x01; break; case Paused: respBytes[10] = (byte) 0x02; break; case Preparing: respBytes[10] = (byte) 0x01; break; case Retrieving: respBytes[10] = (byte) 0x01; break; } } pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetPlaylistPos: respBytes = new byte[] { 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00 }; respBytes[2] = (byte) ((mNowPlaying) >>> 24); respBytes[3] = (byte) ((mNowPlaying) >>> 16); respBytes[4] = (byte) ((mNowPlaying) >>> 8); respBytes[5] = (byte) mNowPlaying; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetSongTitle: byte[] part1 = new byte[] { 0x00, 0x21 }; int index; index = pCommand.params[3] & 0xFF; index += ((pCommand.params[2] & 0xFF) << 8); index += ((pCommand.params[1] & 0xFF) << 16); index += ((pCommand.params[0] & 0xFF) << 24); if (index == -1) index = 0; respBytes = new String(new String(part1) + mRetriever.getTrack(index).title + '\0').getBytes(); pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetSongArtist: part1 = new byte[] { 0x00, 0x23 }; index = pCommand.params[3] & 0xFF; index += ((pCommand.params[2] & 0xFF) << 8); index += ((pCommand.params[1] & 0xFF) << 16); index += ((pCommand.params[0] & 0xFF) << 24); if (index == -1) index = 0; respBytes = new String(new String(part1) + mRetriever.getTrack(index).artist + '\0').getBytes(); pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetSongAlbum: part1 = new byte[] { 0x00, 0x25 }; index = pCommand.params[3] & 0xFF; index += ((pCommand.params[2] & 0xFF) << 8); index += ((pCommand.params[1] & 0xFF) << 16); index += ((pCommand.params[0] & 0xFF) << 24); if (index == -1) index = 0; respBytes = new String(new String(part1) + mRetriever.getTrack(index).album + '\0').getBytes(); pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case PollingMode: respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); mPollSpeed = (byte) pCommand.params[0]; if (pCommand.params[0] == (byte) 0x01 && mUpdateFlag != (byte) 0x01) { mUpdateFlag = pCommand.params[0]; if (mMediaChangeTimer == null) mMediaChangeTimer = new Timer(); mMediaChangeTimer.scheduleAtFixedRate(mMediaChangeTask, 0, 500); } else if (pCommand.params[0] == (byte) 0x00 && mUpdateFlag != (byte) 0x00) { mUpdateFlag = pCommand.params[0]; if (mMediaChangeTimer != null) mMediaChangeTimer.cancel(); } break; case ExecPlaylist: itemNo = pCommand.params[3] & 0xFF; itemNo += ((pCommand.params[2] & 0xFF) << 8); itemNo += ((pCommand.params[1] & 0xFF) << 16); itemNo += ((pCommand.params[0] & 0xFF) << 24); if (itemNo == -1) itemNo = 0; mRetriever.ExecPlaylist(); if (mPodShuffleMode == modeStat.Songs) mRetriever.shuffleTracks(); mNowPlaying = itemNo; tryToGetAudioFocus(); playNextSong(null); respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case PlaybackControl: switch (pCommand.params[0]) { case 0x01: // processStopRequest(); processTogglePlaybackRequest(); break; case 0x02: processStopRequest(); break; case 0x03: processPauseRequest(); processSkipRequest(); break; case 0x04: processPauseRequest(); processSkipRwdRequest(); break; case 0x05: // processSkipRequest(); break; case 0x06: // processRewindRequest(); break; case 0x07: // TODO Add Stop FF/RR function break; } respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetPlayListSongNum: respBytes = new byte[] { 0x00, 0x36, 0x00, 0x00, 0x00, 0x00 }; num = mRetriever.getCount(); respBytes[5] = (byte) (num & 0xFF); respBytes[4] = (byte) ((num >> 8) & 0xFF); respBytes[3] = (byte) ((num >> 16) & 0xFF); respBytes[2] = (byte) ((num >> 24) & 0xFF); pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case JumpToSong: itemNo = pCommand.params[3] & 0xFF; itemNo += ((pCommand.params[2] & 0xFF) << 8); itemNo += ((pCommand.params[1] & 0xFF) << 16); itemNo += ((pCommand.params[0] & 0xFF) << 24); mNowPlaying = itemNo; tryToGetAudioFocus(); playNextSong(null); respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case FrankPlaylist: respBytes = new byte[] { 0x00, 0x4F, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }; num = mRetriever.getPlaylistNum(); if (num != -1) { respBytes[5] = (byte) (num & 0xFF); respBytes[4] = (byte) ((num >> 8) & 0xFF); respBytes[3] = (byte) ((num >> 16) & 0xFF); respBytes[2] = (byte) ((num >> 24) & 0xFF); } pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case StartID: respBytes = new byte[] { 0x02 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetPodProtocols: // start respBytes = new byte[] { 0x02 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); if (pCommand.rawBytes[13] == (byte) 0x00 && pCommand.rawBytes[14] == (byte) 0x00 && pCommand.rawBytes[15] == (byte) 0x00 && pCommand.rawBytes[16] == (byte) 0x00) { // respBytes = new byte[] { 0x00 }; // pResponse = new podResponse(pCommand, respBytes); // serialWrite(pResponse.getBytes()); } else { respBytes = new byte[] { 0x14 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); } break; case DeviceAuthInfo: if (pCommand.length == 4) { respBytes = new byte[] { 0x16 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); respBytes = new byte[] { 0x17, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); } else { if (pCommand.rawBytes[7] != pCommand.rawBytes[8]) { respBytes = new byte[] { 0x02 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); } else { respBytes = new byte[] { 0x16 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); respBytes = new byte[] { 0x17, 0x02 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); } } break; case DeviceAuthSig: respBytes = new byte[] { 0x19 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetPodOptions: // start if (pCommand.rawBytes[5] == 0x00) respBytes = new byte[] { 0x4C }; else respBytes = new byte[] { (byte) 0x02, 0x04 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetPodOption: // start respBytes = new byte[] { 0x25 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case SetIdTokens: respBytes = new byte[] { 0x3A }; pResponse = new podResponse(pCommand, respBytes); if (mAccessoryName == null) { mAccessoryName = pResponse.accessoryName; mAccessoryMnf = pResponse.accessoryMnf; mAccessoryModel = pResponse.accessoryModel; mHTTPsend = true; } serialWrite(pResponse.getBytes()); break; case EndID: respBytes = new byte[] { 0x3C }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); respBytes = new byte[] { 0x14 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetProtoVersion: respBytes = new byte[] { 0x0F }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case DeviceDetails: respBytes = new byte[] { 0x02 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case DevName: respBytes = new byte[] { 0x00, 0x15, 0x50, 0x6F, 0x64, 0x4D, 0x6F, 0x64, 0x65, 0x00 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case DevTypeSize: pResponse = new podResponse(pCommand, DEVTYPESIZE); serialWrite(pResponse.getBytes()); break; case StateInfo: respBytes = new byte[] { 0x0D }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case RemoteNotify: respBytes = new byte[] { 0x02 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case SwitchRemote: mPodStatus = podStat.SIMPLEREMOTE; break; case ReqAdvRemote: respBytes = new byte[] { 0x04, 0x00 }; if (mPodStatus == podStat.ADVANCEDREMOTE || mPodStatus == podStat.ADVANCEDHACK) respBytes[1] = 0x04; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case StartAdvRemote: mPodStatus = podStat.ADVANCEDREMOTE; if (!mAdvancedRemoteApp.equals(PACKAGENAME)) mPodStatus = podStat.ADVANCEDHACK; respBytes = new byte[] { 0x2 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case EndAdvRemote: mPodStatus = podStat.WAITING; respBytes = new byte[] { 0x2 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetSoftVersion: respBytes = new byte[] { 0x0A }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetSerialNum: respBytes = new byte[] { 0x0C }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case DevModel: respBytes = new byte[] { 0x0E }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case SwitchAdvanced: mPodStatus = podStat.ADVANCEDREMOTE; if (!mAdvancedRemoteApp.equals(PACKAGENAME)) mPodStatus = podStat.ADVANCEDHACK; break; case SetRepeatMode: if (pCommand.params[0] == (byte) 0x00) mPodRepeatMode = modeStat.Off; else if (pCommand.params[0] == (byte) 0x01) mPodRepeatMode = modeStat.Songs; else mPodRepeatMode = modeStat.Albums; respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetRepeatMode: respBytes = new byte[] { 0x00, 0x30, 0x00 }; if (mPodRepeatMode == modeStat.Songs) respBytes[2] = 0x01; if (mPodRepeatMode == modeStat.Albums) respBytes[2] = 0x02; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case SetShuffleMode: if (pCommand.params[0] == (byte) 0x00) mPodShuffleMode = modeStat.Off; else if (pCommand.params[0] == (byte) 0x01) mPodShuffleMode = modeStat.Songs; else mPodShuffleMode = modeStat.Albums; respBytes = new byte[] { 0x00, 0x01 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetShuffleMode: respBytes = new byte[] { 0x00, 0x2D, 0x00 }; if (mPodShuffleMode == modeStat.Songs) respBytes[2] = 0x01; if (mPodShuffleMode == modeStat.Albums) respBytes[2] = 0x02; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; case GetScreenSize: respBytes = new byte[] { 0x00, 0x34 }; pResponse = new podResponse(pCommand, respBytes); serialWrite(pResponse.getBytes()); break; default: break; } } } }