Cleaned up dialButtonPressed.
Made the hard button match the behaviour of the soft button.
In dialButtonPressed:
Moved the comment in the method commen.
Added couple of comments.
Removed the sendflash local parameter, in the case the dial string
is empty we never finish.
Intents are created in block they are used (flash and regular dial)
Added helpers to biuld regular/VM/flash intents.
tested:
On passion:
Last dialed number works even in an add call scenario.
Regular dial works.
On sholes:
Regular dial works.
Last dialed number works when not in call.
Flash is sent when trying to add a call.
Change-Id: I736b108aef90b87f043e68604ffb9b1adbc03f96
diff --git a/src/com/android/contacts/TwelveKeyDialer.java b/src/com/android/contacts/TwelveKeyDialer.java
index 07927de..bb4f496 100644
--- a/src/com/android/contacts/TwelveKeyDialer.java
+++ b/src/com/android/contacts/TwelveKeyDialer.java
@@ -606,25 +606,6 @@
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_CALL: {
- // TODO: In dialButtonPressed we do some of these
- // tests again. We should try to consolidate them in
- // one place.
- if (!phoneIsCdma() && mIsAddCallMode && isDigitsEmpty()) {
- // For CDMA phones, we always call
- // dialButtonPressed() because we may need to send
- // an empty flash command to the network.
- // Otherwise, if we are adding a call from the
- // InCallScreen and the phone number entered is
- // empty, we just close the dialer to expose the
- // InCallScreen under it.
- finish();
- }
-
- // If we're CDMA, regardless of where we are adding a call from (either
- // InCallScreen or Dialtacts), the user may need to send an empty
- // flash command to the network. So let's call dialButtonPressed() regardless
- // and dialButtonPressed will handle this functionality for us.
- // otherwise, we place the call.
dialButtonPressed();
return true;
}
@@ -763,52 +744,55 @@
}
void callVoicemail() {
- Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("voicemail", EMPTY_NUMBER, null));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- mDigits.getText().clear();
+ startActivity(newVoicemailIntent());
+ mDigits.getText().clear(); // TODO: Fix bug 1745781
finish();
}
+ /**
+ * In most cases, when the dial button is pressed, there is a
+ * number in digits area. Pack it in the intent, start the
+ * outgoing call broadcast as a separate task and finish this
+ * activity.
+ *
+ * When there is no digit and the phone is CDMA and off hook,
+ * we're sending a blank flash for CDMA. CDMA networks use Flash
+ * messages when special processing needs to be done, mainly for
+ * 3-way or call waiting scenarios. Presumably, here we're in a
+ * special 3-way scenario where the network needs a blank flash
+ * before being able to add the new participant. (This is not the
+ * case with all 3-way calls, just certain CDMA infrastructures.)
+ *
+ * Otherwise, there is no digit, display the last dialed
+ * number. Don't finish since the user may want to edit it. The
+ * user needs to press the dial button again, to dial it (general
+ * case described above).
+ */
void dialButtonPressed() {
- final String number = mDigits.getText().toString();
- boolean sendEmptyFlash = false;
- Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED);
-
- if (isDigitsEmpty()) { // There is no number entered.
+ if (isDigitsEmpty()) { // No number entered.
if (phoneIsCdma() && phoneIsOffhook()) {
- // On CDMA phones, if we're already on a call, pressing
- // the Dial button without entering any digits means "send
- // an empty flash."
- intent.setData(Uri.fromParts("tel", EMPTY_NUMBER, null));
- intent.putExtra(EXTRA_SEND_EMPTY_FLASH, true);
- sendEmptyFlash = true;
- } else if (!TextUtils.isEmpty(mLastNumberDialed)) {
- // Otherwise, pressing the Dial button without entering
- // any digits means "recall the last number dialed".
- mDigits.setText(mLastNumberDialed);
- return;
+ // This is really CDMA specific. On GSM is it possible
+ // to be off hook and wanted to add a 3rd party using
+ // the redial feature.
+ startActivity(newFlashIntent());
} else {
- // Rare case: there's no "last number dialed". There's
- // nothing useful for the Dial button to do in this case.
- playTone(ToneGenerator.TONE_PROP_NACK);
- return;
+ if (!TextUtils.isEmpty(mLastNumberDialed)) {
+ mDigits.setText(mLastNumberDialed);
+ } else {
+ // There's no "last number dialed" or the
+ // background query is still running. There's
+ // nothing useful for the Dial button to do in
+ // this case. Note: with a soft dial button, this
+ // can never happens since the dial button is
+ // disabled under these conditons.
+ playTone(ToneGenerator.TONE_PROP_NACK);
+ }
}
- } else { // There is a number.
- intent.setData(Uri.fromParts("tel", number, null));
- }
+ } else {
+ final String number = mDigits.getText().toString();
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- mDigits.getText().clear();
-
- // Don't finish TwelveKeyDialer yet if we're sending a blank flash for CDMA. CDMA
- // networks use Flash messages when special processing needs to be done, mainly for
- // 3-way or call waiting scenarios. Presumably, here we're in a special 3-way scenario
- // where the network needs a blank flash before being able to add the new participant.
- // (This is not the case with all 3-way calls, just certain CDMA infrastructures.)
- if (!sendEmptyFlash) {
+ startActivity(newDialNumberIntent(number));
+ mDigits.getText().clear(); // TODO: Fix bug 1745781
finish();
}
}
@@ -1256,4 +1240,25 @@
ContactsSearchManager.startSearch(this, initialQuery);
}
}
+
+ // Helpers for the call intents.
+ private Intent newVoicemailIntent() {
+ final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+ Uri.fromParts("voicemail", EMPTY_NUMBER, null));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ return intent;
+ }
+
+ private Intent newFlashIntent() {
+ final Intent intent = newDialNumberIntent(EMPTY_NUMBER);
+ intent.putExtra(EXTRA_SEND_EMPTY_FLASH, true);
+ return intent;
+ }
+
+ private Intent newDialNumberIntent(String number) {
+ final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+ Uri.fromParts("tel", number, null));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ return intent;
+ }
}