James
---
Index: src/org/sipdroid/sipua/SipdroidEngine.java
===================================================================
--- src/org/sipdroid/sipua/SipdroidEngine.java (revision 331)
+++ src/org/sipdroid/sipua/SipdroidEngine.java (working copy)
@@ -313,6 +313,10 @@
public void togglehold() {
ua.reInvite(null, 0);
}
+
+ public void transfer(String number) {
+ ua.transfer(number);
+ }
public void togglemute() {
if (ua.muteMediaApplication())
Index: src/org/sipdroid/sipua/ui/CallScreen.java
===================================================================
--- src/org/sipdroid/sipua/ui/CallScreen.java (revision 330)
+++ src/org/sipdroid/sipua/ui/CallScreen.java (working copy)
@@ -3,17 +3,22 @@
import org.sipdroid.media.RtpStreamReceiver;
import org.sipdroid.sipua.R;
import org.sipdroid.sipua.UserAgent;
+import org.sipdroid.sipua.ui.InstantAutoCompleteTextView;
import android.app.Activity;
+import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.content.ActivityNotFoundException;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.os.SystemClock;
+import android.text.InputType;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
+import android.widget.EditText;
/*
* Copyright (C) 2009 The Sipdroid Open Source Project
@@ -35,14 +40,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-public class CallScreen extends Activity {
+public class CallScreen extends Activity implements DialogInterface.OnClickListener {
public static final int FIRST_MENU_ID = Menu.FIRST;
public static final int HANG_UP_MENU_ITEM = FIRST_MENU_ID + 1;
public static final int HOLD_MENU_ITEM = FIRST_MENU_ID + 2;
public static final int MUTE_MENU_ITEM = FIRST_MENU_ID + 3;
public static final int VIDEO_MENU_ITEM = FIRST_MENU_ID + 5;
public static final int SPEAKER_MENU_ITEM = FIRST_MENU_ID + 6;
+ public static final int TRANSFER_MENU_ITEM = FIRST_MENU_ID + 7;
+ private static EditText transferText;
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
@@ -57,10 +65,29 @@
m.setIcon(android.R.drawable.stat_sys_speakerphone);
m = menu.add(0, VIDEO_MENU_ITEM, 0, R.string.menu_video);
m.setIcon(android.R.drawable.ic_menu_camera);
+ m = menu.add(0, TRANSFER_MENU_ITEM, 0, R.string.menu_transfer);
+ m.setIcon(android.R.drawable.ic_menu_call);
return result;
}
+ public void onClick(DialogInterface dialog, int which)
+ {
+ Receiver.engine(this).transfer(transferText.getText().toString());
+ }
+
+ private void transfer() {
+ transferText = new InstantAutoCompleteTextView(Receiver.mContext,null);
+ transferText.setInputType(InputType.TYPE_CLASS_TEXT |
+ InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+
+ new AlertDialog.Builder(this)
+ .setTitle(Receiver.mContext.getString(R.string.transfer_title))
+ .setView(transferText)
+ .setPositiveButton(Receiver.mContext.getString(android.R.string.ok), this)
+ .show();
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean result = super.onOptionsItemSelected(item);
@@ -74,6 +101,10 @@
case HOLD_MENU_ITEM:
Receiver.engine(this).togglehold();
break;
+
+ case TRANSFER_MENU_ITEM:
+ transfer();
+ break;
case MUTE_MENU_ITEM:
Receiver.engine(this).togglemute();
Index: src/org/sipdroid/sipua/UserAgent.java
===================================================================
--- src/org/sipdroid/sipua/UserAgent.java (revision 330)
+++ src/org/sipdroid/sipua/UserAgent.java (working copy)
@@ -830,6 +830,10 @@
}
}
+ void transfer(String transfer_to) {
+ call.transfer(transfer_to);
+ }
+
/** Schedules an automatic answer event after <i>delay_time</i> secs. */
void automaticAccept(final int delay_time) {
(new Thread() {
Index: res/values/strings.xml
===================================================================
--- res/values/strings.xml (revision 331)
+++ res/values/strings.xml (working copy)
@@ -148,9 +148,12 @@
<string name="menu_call">Dial</string>
<string name="menu_mute">Mute</string>
<string name="menu_hold">Hold</string>
+<string name="menu_transfer">Transfer</string>
<string name="menu_speaker">Speaker</string>
<string name="menu_endCall">End call</string>
+<string name="transfer_title">Transfer Call to</string>
+
<string name="card_title_dialing">Dialing</string>
<string name="card_title_in_progress">Call in progress</string>
<string name="card_title_incoming_call">Incoming call</string>
Isn't the standard paradigm for modal windows that cancel is the back
button? However, adding one is easy enough, see below.
> I have already improved your MWI code. There were still some bugs in
> it.
Thanks,
James
---
Index: src/org/sipdroid/sipua/SipdroidEngine.java
===================================================================
--- src/org/sipdroid/sipua/SipdroidEngine.java (revision 332)
+++ src/org/sipdroid/sipua/SipdroidEngine.java (working copy)
@@ -312,6 +312,10 @@
public void togglehold() {
ua.reInvite(null, 0);
}
+
+ public void transfer(String number) {
+ ua.transfer(number);
+ }
public void togglemute() {
if (ua.muteMediaApplication())
Index: src/org/sipdroid/sipua/ui/CallScreen.java
===================================================================
--- src/org/sipdroid/sipua/ui/CallScreen.java (revision 332)
@@ -57,10 +65,31 @@
m.setIcon(android.R.drawable.stat_sys_speakerphone);
m = menu.add(0, VIDEO_MENU_ITEM, 0, R.string.menu_video);
m.setIcon(android.R.drawable.ic_menu_camera);
+ m = menu.add(0, TRANSFER_MENU_ITEM, 0, R.string.menu_transfer);
+ m.setIcon(android.R.drawable.ic_menu_call);
return result;
}
+ public void onClick(DialogInterface dialog, int which)
+ {
+ if (which == DialogInterface.BUTTON_POSITIVE)
+ Receiver.engine(this).transfer(transferText.getText().toString());
+ }
+
+ private void transfer() {
+ transferText = new InstantAutoCompleteTextView(Receiver.mContext,null);
+ transferText.setInputType(InputType.TYPE_CLASS_TEXT |
+ InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+
+ new AlertDialog.Builder(this)
+ .setTitle(Receiver.mContext.getString(R.string.transfer_title))
+ .setView(transferText)
+ .setPositiveButton(android.R.string.ok, this)
+ .setNegativeButton(android.R.string.cancel, this)
+ .show();
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean result = super.onOptionsItemSelected(item);
@@ -74,6 +103,10 @@
case HOLD_MENU_ITEM:
Receiver.engine(this).togglehold();
break;
+
+ case TRANSFER_MENU_ITEM:
+ transfer();
+ break;
case MUTE_MENU_ITEM:
Receiver.engine(this).togglemute();
Index: src/org/sipdroid/sipua/UserAgent.java
===================================================================
--- src/org/sipdroid/sipua/UserAgent.java (revision 332)
+++ src/org/sipdroid/sipua/UserAgent.java (working copy)
@@ -827,6 +827,10 @@
}
}
+ void transfer(String transfer_to) {
+ call.transfer(transfer_to);
+ }
+
/** Schedules an automatic answer event after <i>delay_time</i> secs. */
void automaticAccept(final int delay_time) {
(new Thread() {
Index: res/values/strings.xml
===================================================================
--- res/values/strings.xml (revision 332)
+++ res/values/strings.xml (working copy)
@@ -149,9 +149,12 @@
OK, should be checked in.
James