diff options
| author | Hung-ying Tyan <tyanh@google.com> | 2011-01-24 19:41:42 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-01-24 19:41:42 -0800 |
| commit | 6f65c36a9e93166c2614f0709aa46a9aa46348a9 (patch) | |
| tree | 6844c97d00547c49df6e9c29f82469f96b7b5352 /java | |
| parent | 2d6c1e2628fd8e090cc9fe6c59141ae5caf117bd (diff) | |
| parent | 5e90e3f24fb5b1e19e31b07f4c6602ad263f4e52 (diff) | |
| download | android_frameworks_opt_net_voip-6f65c36a9e93166c2614f0709aa46a9aa46348a9.tar.gz android_frameworks_opt_net_voip-6f65c36a9e93166c2614f0709aa46a9aa46348a9.tar.bz2 android_frameworks_opt_net_voip-6f65c36a9e93166c2614f0709aa46a9aa46348a9.zip | |
Merge changes Ib70e0cf2,I0691cd70 into gingerbread
* changes:
SipService: registers broadcast receivers on demand.
SipService: release wake lock for cancelled tasks.
Diffstat (limited to 'java')
| -rw-r--r-- | java/com/android/server/sip/SipService.java | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/java/com/android/server/sip/SipService.java b/java/com/android/server/sip/SipService.java index 3af6e78..dc66989 100644 --- a/java/com/android/server/sip/SipService.java +++ b/java/com/android/server/sip/SipService.java @@ -105,7 +105,7 @@ public final class SipService extends ISipService.Stub { if (SipManager.isApiSupported(context)) { ServiceManager.addService("sip", new SipService(context)); context.sendBroadcast(new Intent(SipManager.ACTION_SIP_SERVICE_UP)); - if (DEBUG) Log.i(TAG, "SIP service started"); + if (DEBUG) Log.d(TAG, "SIP service started"); } } @@ -113,10 +113,6 @@ public final class SipService extends ISipService.Stub { if (DEBUG) Log.d(TAG, " service started!"); mContext = context; mConnectivityReceiver = new ConnectivityReceiver(); - context.registerReceiver(mConnectivityReceiver, - new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - context.registerReceiver(mWifiStateReceiver, - new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)); mMyWakeLock = new SipWakeLock((PowerManager) context.getSystemService(Context.POWER_SERVICE)); @@ -124,7 +120,7 @@ public final class SipService extends ISipService.Stub { mWifiOnly = SipManager.isSipWifiOnly(context); } - BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() { + private BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); @@ -147,6 +143,20 @@ public final class SipService extends ISipService.Stub { } }; + private void registerReceivers() { + mContext.registerReceiver(mConnectivityReceiver, + new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + mContext.registerReceiver(mWifiStateReceiver, + new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)); + if (DEBUG) Log.d(TAG, " +++ register receivers"); + } + + private void unregisterReceivers() { + mContext.unregisterReceiver(mConnectivityReceiver); + mContext.unregisterReceiver(mWifiStateReceiver); + if (DEBUG) Log.d(TAG, " --- unregister receivers"); + } + private MyExecutor getExecutor() { // create mExecutor lazily if (mExecutor == null) mExecutor = new MyExecutor(); @@ -166,12 +176,14 @@ public final class SipService extends ISipService.Stub { return profiles.toArray(new SipProfile[profiles.size()]); } - public void open(SipProfile localProfile) { + public synchronized void open(SipProfile localProfile) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.USE_SIP, null); localProfile.setCallingUid(Binder.getCallingUid()); try { + boolean addingFirstProfile = mSipGroups.isEmpty(); createGroup(localProfile); + if (addingFirstProfile && !mSipGroups.isEmpty()) registerReceivers(); } catch (SipException e) { Log.e(TAG, "openToMakeCalls()", e); // TODO: how to send the exception back @@ -192,8 +204,10 @@ public final class SipService extends ISipService.Stub { if (DEBUG) Log.d(TAG, "open3: " + localProfile.getUriString() + ": " + incomingCallPendingIntent + ": " + listener); try { + boolean addingFirstProfile = mSipGroups.isEmpty(); SipSessionGroupExt group = createGroup(localProfile, incomingCallPendingIntent, listener); + if (addingFirstProfile && !mSipGroups.isEmpty()) registerReceivers(); if (localProfile.getAutoRegistration()) { group.openToReceiveCalls(); if (mWifiEnabled) grabWifiLock(); @@ -235,6 +249,7 @@ public final class SipService extends ISipService.Stub { releaseWifiLock(); mMyWakeLock.reset(); // in case there's leak } + if (mSipGroups.isEmpty()) unregisterReceivers(); } public synchronized boolean isOpened(String localProfileUri) { @@ -1055,7 +1070,10 @@ public final class SipService extends ISipService.Stub { // we want to skip the interim ones) but deliver bad news // immediately if (connected) { - if (mTask != null) mTask.cancel(); + if (mTask != null) { + mTask.cancel(); + mMyWakeLock.release(mTask); + } mTask = new MyTimerTask(type, connected); mTimer.schedule(mTask, 2 * 1000L); // hold wakup lock so that we can finish changes before the @@ -1096,6 +1114,7 @@ public final class SipService extends ISipService.Stub { if (mTask != this) { Log.w(TAG, " unexpected task: " + mNetworkType + (mConnected ? " CONNECTED" : "DISCONNECTED")); + mMyWakeLock.release(this); return; } mTask = null; |
