boolean onKeyDown(int keyCode, KeyEvent event) {
    /* ****************************************************************************
     * HOW TO DECIDE WHERE YOUR KEY HANDLING GOES.
     * See the comment in PhoneWindow.onKeyDown
     * ****************************************************************************/
    final KeyEvent.DispatcherState dispatcher = mView.getKeyDispatcherState();

    switch (keyCode) {
      case KeyEvent.KEYCODE_VOLUME_UP:
      case KeyEvent.KEYCODE_VOLUME_DOWN:
      case KeyEvent.KEYCODE_VOLUME_MUTE:
        {
          MediaSessionLegacyHelper.getHelper(mContext).sendVolumeKeyEvent(event, false);
          return true;
        }

      case KeyEvent.KEYCODE_MEDIA_PLAY:
      case KeyEvent.KEYCODE_MEDIA_PAUSE:
      case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
        /* Suppress PLAY/PAUSE toggle when phone is ringing or in-call
         * to avoid music playback */
        if (getTelephonyManager().getCallState() != TelephonyManager.CALL_STATE_IDLE) {
          return true; // suppress key event
        }
      case KeyEvent.KEYCODE_MUTE:
      case KeyEvent.KEYCODE_HEADSETHOOK:
      case KeyEvent.KEYCODE_MEDIA_STOP:
      case KeyEvent.KEYCODE_MEDIA_NEXT:
      case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
      case KeyEvent.KEYCODE_MEDIA_REWIND:
      case KeyEvent.KEYCODE_MEDIA_RECORD:
      case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
      case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK:
        {
          handleMediaKeyEvent(event);
          return true;
        }

      case KeyEvent.KEYCODE_CALL:
        {
          if (getKeyguardManager().inKeyguardRestrictedInputMode() || dispatcher == null) {
            break;
          }
          if (event.getRepeatCount() == 0) {
            dispatcher.startTracking(event, this);
          } else if (event.isLongPress() && dispatcher.isTracking(event)) {
            dispatcher.performedLongPress(event);
            if (isUserSetupComplete()) {
              mView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
              // launch the VoiceDialer
              Intent intent = new Intent(Intent.ACTION_VOICE_COMMAND);
              intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              try {
                sendCloseSystemWindows();
                mContext.startActivity(intent);
              } catch (ActivityNotFoundException e) {
                startCallActivity();
              }
            } else {
              Log.i(TAG, "Not starting call activity because user " + "setup is in progress.");
            }
          }
          return true;
        }

      case KeyEvent.KEYCODE_CAMERA:
        {
          if (getKeyguardManager().inKeyguardRestrictedInputMode() || dispatcher == null) {
            break;
          }
          if (event.getRepeatCount() == 0) {
            dispatcher.startTracking(event, this);
          } else if (event.isLongPress() && dispatcher.isTracking(event)) {
            dispatcher.performedLongPress(event);
            if (isUserSetupComplete()) {
              mView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
              sendCloseSystemWindows();
              // Broadcast an intent that the Camera button was longpressed
              Intent intent = new Intent(Intent.ACTION_CAMERA_BUTTON, null);
              intent.putExtra(Intent.EXTRA_KEY_EVENT, event);
              mContext.sendOrderedBroadcastAsUser(
                  intent, UserHandle.CURRENT_OR_SELF, null, null, null, 0, null, null);
            } else {
              Log.i(
                  TAG, "Not dispatching CAMERA long press because user " + "setup is in progress.");
            }
          }
          return true;
        }

      case KeyEvent.KEYCODE_SEARCH:
        {
          if (getKeyguardManager().inKeyguardRestrictedInputMode() || dispatcher == null) {
            break;
          }
          if (event.getRepeatCount() == 0) {
            dispatcher.startTracking(event, this);
          } else if (event.isLongPress() && dispatcher.isTracking(event)) {
            Configuration config = mContext.getResources().getConfiguration();
            if (config.keyboard == Configuration.KEYBOARD_NOKEYS
                || config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
              if (isUserSetupComplete()) {
                // launch the search activity
                Intent intent = new Intent(Intent.ACTION_SEARCH_LONG_PRESS);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                try {
                  mView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
                  sendCloseSystemWindows();
                  getSearchManager().stopSearch();
                  mContext.startActivity(intent);
                  // Only clear this if we successfully start the
                  // activity; otherwise we will allow the normal short
                  // press action to be performed.
                  dispatcher.performedLongPress(event);
                  return true;
                } catch (ActivityNotFoundException e) {
                  // Ignore
                }
              } else {
                Log.i(
                    TAG,
                    "Not dispatching SEARCH long press because user " + "setup is in progress.");
              }
            }
          }
          break;
        }
    }
    return false;
  }