-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.music;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.media.AudioManager;
-import android.os.Handler;
-import android.os.Message;
-import android.view.KeyEvent;
-
-/**
- *
- */
-public class MediaButtonIntentReceiver extends BroadcastReceiver {
-
- private static final int MSG_LONGPRESS_TIMEOUT = 1;
-
- private static final int LONG_PRESS_DELAY = 1000;
-
- private static long mLastClickTime = 0;
- private static boolean mDown = false;
- private static boolean mLaunched = false;
-
- private static Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_LONGPRESS_TIMEOUT:
- if (!mLaunched) {
- Context context = (Context) msg.obj;
- Intent i = new Intent();
- i.putExtra("autoshuffle", "true");
- i.setClass(context, MusicBrowserActivity.class);
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- context.startActivity(i);
- mLaunched = true;
- }
- break;
- }
- }
- };
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String intentAction = intent.getAction();
-
- if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intentAction)) {
- Intent i = new Intent(context, MediaPlaybackService.class);
- i.setAction(MediaPlaybackService.SERVICECMD);
- i.putExtra(MediaPlaybackService.CMDNAME,
- MediaPlaybackService.CMDPAUSE);
- context.startService(i);
- } else if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
- KeyEvent event = (KeyEvent) intent
- .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
-
- if (event == null) {
- return;
- }
-
- int keycode = event.getKeyCode();
- int action = event.getAction();
- long eventtime = event.getEventTime();
- int buttonId = intent.getIntExtra(MediaPlaybackService.CMDNOTIF, 0);
-
- // single quick press: pause/resume.
- // double press: next track
- // long press: start auto-shuffle mode.
-
- String command = null;
- switch (keycode) {
- case KeyEvent.KEYCODE_MEDIA_STOP:
- command = MediaPlaybackService.CMDSTOP;
- break;
- case KeyEvent.KEYCODE_HEADSETHOOK:
- case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
- command = MediaPlaybackService.CMDTOGGLEPAUSE;
-
- break;
- case KeyEvent.KEYCODE_MEDIA_NEXT:
- command = MediaPlaybackService.CMDNEXT;
-
- break;
- case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
- command = MediaPlaybackService.CMDPREVIOUS;
-
- break;
-
- }
-
- if (command != null) {
- if (action == KeyEvent.ACTION_DOWN) {
- if (mDown && (buttonId == 0)) {
- if ((MediaPlaybackService.CMDTOGGLEPAUSE
- .equals(command) || MediaPlaybackService.CMDPLAY
- .equals(command))
- && mLastClickTime != 0
- && eventtime - mLastClickTime > LONG_PRESS_DELAY) {
- mHandler.sendMessage(mHandler.obtainMessage(
- MSG_LONGPRESS_TIMEOUT, context));
-
- }
- } else if (event.getRepeatCount() == 0) {
-
- // only consider the first event in a sequence, not the
- // repeat events,
- // so that we don't trigger in cases where the first
- // event went to
- // a different app (e.g. when the user ends a phone call
- // by
- // long pressing the headset button)
-
- // The service may or may not be running, but we need to
- // send it
-
- // a command.
- Intent i = new Intent(context,
- MediaPlaybackService.class);
-
- i.setAction(MediaPlaybackService.SERVICECMD);
- if (keycode == KeyEvent.KEYCODE_HEADSETHOOK
- && eventtime - mLastClickTime < 300) {
- i.putExtra(MediaPlaybackService.CMDNAME,
- MediaPlaybackService.CMDNEXT);
-
- context.startService(i);
- mLastClickTime = 0;
- } else {
- i.putExtra(MediaPlaybackService.CMDNAME, command);
- context.startService(i);
- mLastClickTime = eventtime;
-
- }
-
- mLaunched = false;
- if (buttonId == 0) {
- mDown = true;
-
- }
- }
- } else {
- mHandler.removeMessages(MSG_LONGPRESS_TIMEOUT);
- mDown = false;
-
- }
- if (isOrderedBroadcast()) {
- abortBroadcast();
-
- }
- }
- }
- }
-}
+/*\r
+ * Copyright (C) 2007 The Android Open Source Project\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package com.android.music;\r
+\r
+import android.content.BroadcastReceiver;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.media.AudioManager;\r
+import android.os.Handler;\r
+import android.os.Message;\r
+import android.view.KeyEvent;\r
+\r
+/**\r
+ * \r
+ */\r
+public class MediaButtonIntentReceiver extends BroadcastReceiver {\r
+\r
+ private static final int MSG_LONGPRESS_TIMEOUT = 1;\r
+\r
+ private static final int LONG_PRESS_DELAY = 1000;\r
+\r
+ private static long mLastClickTime = 0;\r
+ private static boolean mDown = false;\r
+ private static boolean mLaunched = false;\r
+\r
+ private static Handler mHandler = new Handler() {\r
+ @Override\r
+ public void handleMessage(Message msg) {\r
+ switch (msg.what) {\r
+ case MSG_LONGPRESS_TIMEOUT:\r
+ if (!mLaunched) {\r
+ Context context = (Context) msg.obj;\r
+ Intent i = new Intent();\r
+ i.putExtra("autoshuffle", "true");\r
+ i.setClass(context, MusicBrowserActivity.class);\r
+ i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK\r
+ | Intent.FLAG_ACTIVITY_CLEAR_TOP);\r
+ context.startActivity(i);\r
+ mLaunched = true;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ };\r
+\r
+ @Override\r
+ public void onReceive(Context context, Intent intent) {\r
+ String intentAction = intent.getAction();\r
+\r
+ if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intentAction)) {\r
+ Intent i = new Intent(context, MediaPlaybackService.class);\r
+ i.setAction(MediaPlaybackService.SERVICECMD);\r
+ i.putExtra(MediaPlaybackService.CMDNAME,\r
+ MediaPlaybackService.CMDPAUSE);\r
+ context.startService(i);\r
+ } else if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {\r
+ KeyEvent event = (KeyEvent) intent\r
+ .getParcelableExtra(Intent.EXTRA_KEY_EVENT);\r
+\r
+ if (event == null) {\r
+ return;\r
+ }\r
+\r
+ int keycode = event.getKeyCode();\r
+ int action = event.getAction();\r
+ long eventtime = event.getEventTime();\r
+ int buttonId = intent.getIntExtra(MediaPlaybackService.CMDNOTIF, 0);\r
+\r
+ // single quick press: pause/resume.\r
+ // double press: next track\r
+ // long press: start auto-shuffle mode.\r
+\r
+ String command = null;\r
+ switch (keycode) {\r
+ case KeyEvent.KEYCODE_MEDIA_STOP:\r
+ command = MediaPlaybackService.CMDSTOP;\r
+ break;\r
+ case KeyEvent.KEYCODE_HEADSETHOOK:\r
+ case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:\r
+ command = MediaPlaybackService.CMDTOGGLEPAUSE;\r
+\r
+ break;\r
+ case KeyEvent.KEYCODE_MEDIA_NEXT:\r
+ command = MediaPlaybackService.CMDNEXT;\r
+\r
+ break;\r
+ case KeyEvent.KEYCODE_MEDIA_PREVIOUS:\r
+ command = MediaPlaybackService.CMDPREVIOUS;\r
+\r
+ break;\r
+\r
+ }\r
+\r
+ if (command != null) {\r
+ if (action == KeyEvent.ACTION_DOWN) {\r
+ if (mDown && (buttonId == 0)) {\r
+ if ((MediaPlaybackService.CMDTOGGLEPAUSE\r
+ .equals(command) || MediaPlaybackService.CMDPLAY\r
+ .equals(command))\r
+ && mLastClickTime != 0\r
+ && eventtime - mLastClickTime > LONG_PRESS_DELAY) {\r
+ mHandler.sendMessage(mHandler.obtainMessage(\r
+ MSG_LONGPRESS_TIMEOUT, context));\r
+\r
+ }\r
+ } else if (event.getRepeatCount() == 0) {\r
+\r
+ // only consider the first event in a sequence, not the\r
+ // repeat events,\r
+ // so that we don't trigger in cases where the first\r
+ // event went to\r
+ // a different app (e.g. when the user ends a phone call\r
+ // by\r
+ // long pressing the headset button)\r
+\r
+ // The service may or may not be running, but we need to\r
+ // send it\r
+\r
+ // a command.\r
+ Intent i = new Intent(context,\r
+ MediaPlaybackService.class);\r
+\r
+ i.setAction(MediaPlaybackService.SERVICECMD);\r
+ if (keycode == KeyEvent.KEYCODE_HEADSETHOOK\r
+ && eventtime - mLastClickTime < 300) {\r
+ i.putExtra(MediaPlaybackService.CMDNAME,\r
+ MediaPlaybackService.CMDNEXT);\r
+\r
+ context.startService(i);\r
+ mLastClickTime = 0;\r
+ } else {\r
+ i.putExtra(MediaPlaybackService.CMDNAME, command);\r
+ context.startService(i);\r
+ mLastClickTime = eventtime;\r
+\r
+ }\r
+\r
+ mLaunched = false;\r
+ if (buttonId == 0) {\r
+ mDown = true;\r
+\r
+ }\r
+ }\r
+ } else {\r
+ mHandler.removeMessages(MSG_LONGPRESS_TIMEOUT);\r
+ mDown = false;\r
+\r
+ }\r
+ if (isOrderedBroadcast()) {\r
+ abortBroadcast();\r
+\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r