summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2010-08-20 15:22:04 +0800
committerHung-ying Tyan <tyanh@google.com>2010-08-20 17:24:20 +0800
commitdba514c6d8e8263d4b8f31cb2fdebfc1d4f84c35 (patch)
treee78e03b651a0603f288f8d7fb3bda87897419264 /services
parent271c1bfd60eaa20c3f37e685864d992e0770ac00 (diff)
downloadframeworks_base-dba514c6d8e8263d4b8f31cb2fdebfc1d4f84c35.zip
frameworks_base-dba514c6d8e8263d4b8f31cb2fdebfc1d4f84c35.tar.gz
frameworks_base-dba514c6d8e8263d4b8f31cb2fdebfc1d4f84c35.tar.bz2
SipSession: make potential time-consuming ops run on background thread
http://b/issue?id=2933071 Change-Id: I0467cb5fc41bc2d6e010d20c99b7f0392fb0889e
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/sip/SipSessionGroup.java53
1 files changed, 26 insertions, 27 deletions
diff --git a/services/java/com/android/server/sip/SipSessionGroup.java b/services/java/com/android/server/sip/SipSessionGroup.java
index db3f536..d33558b 100644
--- a/services/java/com/android/server/sip/SipSessionGroup.java
+++ b/services/java/com/android/server/sip/SipSessionGroup.java
@@ -381,14 +381,29 @@ class SipSessionGroup implements SipListener {
: listener);
}
+ // process the command in a new thread
+ private void doCommandAsync(final EventObject command) {
+ new Thread(new Runnable() {
+ public void run() {
+ try {
+ processCommand(command);
+ } catch (SipException e) {
+ // TODO: find a better way to do this
+ if ((command instanceof RegisterCommand)
+ || (command == DEREGISTER)) {
+ onRegistrationFailed(e);
+ } else {
+ onError(e);
+ }
+ }
+ }
+ }).start();
+ }
+
public void makeCall(SipProfile peerProfile,
SessionDescription sessionDescription) {
- try {
- processCommand(
- new MakeCallCommand(peerProfile, sessionDescription));
- } catch (SipException e) {
- onError(e);
- }
+ doCommandAsync(
+ new MakeCallCommand(peerProfile, sessionDescription));
}
public void answerCall(SessionDescription sessionDescription) {
@@ -401,36 +416,20 @@ class SipSessionGroup implements SipListener {
}
public void endCall() {
- try {
- processCommand(END_CALL);
- } catch (SipException e) {
- onError(e);
- }
+ doCommandAsync(END_CALL);
}
public void changeCall(SessionDescription sessionDescription) {
- try {
- processCommand(
- new MakeCallCommand(mPeerProfile, sessionDescription));
- } catch (SipException e) {
- onError(e);
- }
+ doCommandAsync(
+ new MakeCallCommand(mPeerProfile, sessionDescription));
}
public void register(int duration) {
- try {
- processCommand(new RegisterCommand(duration));
- } catch (SipException e) {
- onRegistrationFailed(e);
- }
+ doCommandAsync(new RegisterCommand(duration));
}
public void unregister() {
- try {
- processCommand(DEREGISTER);
- } catch (SipException e) {
- onRegistrationFailed(e);
- }
+ doCommandAsync(DEREGISTER);
}
public boolean isReRegisterRequired() {