diff options
author | Hung-ying Tyan <tyanh@google.com> | 2010-08-20 15:22:04 +0800 |
---|---|---|
committer | Hung-ying Tyan <tyanh@google.com> | 2010-08-20 17:24:20 +0800 |
commit | dba514c6d8e8263d4b8f31cb2fdebfc1d4f84c35 (patch) | |
tree | e78e03b651a0603f288f8d7fb3bda87897419264 /services | |
parent | 271c1bfd60eaa20c3f37e685864d992e0770ac00 (diff) | |
download | frameworks_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.java | 53 |
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() { |