/** Override the onReceive method of the BroadcastReceiver to include our GV Callback code. */
  @Override
  public void onReceive(Context context, Intent outgoing) {
    // Set up settings, and don't do anything if not enabled
    mySettings = SettingsProvider.getInstance(context);

    if (!mySettings.getUseCallback()) return;

    // don't do anything because Google Voice doesn't support numbers
    // less than 10 digits anyway. Also, it might be an emergency.
    String number = outgoing.getStringExtra(Intent.EXTRA_PHONE_NUMBER).replaceAll("[^0-9]", "");
    if (number.length() < 10) {
      return;
    }

    // don't mess with voicemail numbers
    TelephonyManager tmgr = (TelephonyManager) context.getSystemService(Activity.TELEPHONY_SERVICE);
    String voicemailNumber = tmgr.getVoiceMailNumber();
    if (voicemailNumber != null && voicemailNumber.equals(number)) {
      return;
    }

    // TODO don't try and call our own GV number from GV

    // Set up GV call
    GVCommunicator.insertPlaceholderCall(context.getContentResolver(), number);

    myContext = context;
    cancel();
    myTask = new CallTask();
    myTask.execute(number);

    GVPhoneStateListener phoneListener = new GVPhoneStateListener(context);

    TelephonyManager telephony =
        (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

    setResultData(null);
  }
 public static void cancel() {
   if (myTask != null) {
     myTask.cancel(true);
   }
 }