Loading android/app/src/com/android/bluetooth/pbapclient/PbapClientService.java +36 −0 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ package com.android.bluetooth.pbapclient; import android.accounts.Account; import android.accounts.AccountManager; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadsetClient; import android.bluetooth.BluetoothProfile; import android.bluetooth.IBluetoothPbapClient; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; Loading @@ -31,6 +33,7 @@ import android.util.Log; import com.android.bluetooth.R; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.ProfileService; import com.android.bluetooth.hfpclient.connserv.HfpClientConnectionService; import com.android.bluetooth.sdp.SdpManager; import java.util.ArrayList; Loading Loading @@ -71,6 +74,9 @@ public class PbapClientService extends ProfileService { filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); // delay initial download until after the user is unlocked to add an account. filter.addAction(Intent.ACTION_USER_UNLOCKED); // To remove call logs when PBAP was never connected while calls were made, // we also listen for HFP to become disconnected. filter.addAction(BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED); try { registerReceiver(mPbapBroadcastReceiver, filter); } catch (Exception e) { Loading Loading @@ -128,6 +134,21 @@ public class PbapClientService extends ProfileService { } } private void removeHfpCallLog(String accountName, Context context) { if (DBG) Log.d(TAG, "Removing call logs from " + accountName); // Delete call logs belonging to accountName==BD_ADDR that also match // component name "hfpclient". ComponentName componentName = new ComponentName(context, HfpClientConnectionService.class); String selectionFilter = CallLog.Calls.PHONE_ACCOUNT_ID + "=? AND " + CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME + "=?"; String[] selectionArgs = new String[]{accountName, componentName.flattenToString()}; try { getContentResolver().delete(CallLog.Calls.CONTENT_URI, selectionFilter, selectionArgs); } catch (IllegalArgumentException e) { Log.w(TAG, "Call Logs could not be deleted, they may not exist yet."); } } private void registerSdpRecord() { SdpManager sdpManager = SdpManager.getDefaultManager(); if (sdpManager == null) { Loading Loading @@ -171,6 +192,21 @@ public class PbapClientService extends ProfileService { for (PbapClientStateMachine stateMachine : mPbapClientStateMachineMap.values()) { stateMachine.resumeDownload(); } } else if (action.equals(BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED)) { // PbapClientConnectionHandler has code to remove calllogs when PBAP disconnects. // However, if PBAP was never connected/enabled in the first place, and calls are // made over HFP, these calllogs will not be removed when the device disconnects. // This code ensures callogs are still removed in this case. BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); int newState = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1); if (newState == BluetoothProfile.STATE_DISCONNECTED) { if (DBG) { Log.d(TAG, "Received intent to disconnect HFP with " + device); } // HFP client stores entries in calllog.db by BD_ADDR and component name removeHfpCallLog(device.getAddress(), context); } } } } Loading Loading
android/app/src/com/android/bluetooth/pbapclient/PbapClientService.java +36 −0 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ package com.android.bluetooth.pbapclient; import android.accounts.Account; import android.accounts.AccountManager; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadsetClient; import android.bluetooth.BluetoothProfile; import android.bluetooth.IBluetoothPbapClient; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; Loading @@ -31,6 +33,7 @@ import android.util.Log; import com.android.bluetooth.R; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.ProfileService; import com.android.bluetooth.hfpclient.connserv.HfpClientConnectionService; import com.android.bluetooth.sdp.SdpManager; import java.util.ArrayList; Loading Loading @@ -71,6 +74,9 @@ public class PbapClientService extends ProfileService { filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); // delay initial download until after the user is unlocked to add an account. filter.addAction(Intent.ACTION_USER_UNLOCKED); // To remove call logs when PBAP was never connected while calls were made, // we also listen for HFP to become disconnected. filter.addAction(BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED); try { registerReceiver(mPbapBroadcastReceiver, filter); } catch (Exception e) { Loading Loading @@ -128,6 +134,21 @@ public class PbapClientService extends ProfileService { } } private void removeHfpCallLog(String accountName, Context context) { if (DBG) Log.d(TAG, "Removing call logs from " + accountName); // Delete call logs belonging to accountName==BD_ADDR that also match // component name "hfpclient". ComponentName componentName = new ComponentName(context, HfpClientConnectionService.class); String selectionFilter = CallLog.Calls.PHONE_ACCOUNT_ID + "=? AND " + CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME + "=?"; String[] selectionArgs = new String[]{accountName, componentName.flattenToString()}; try { getContentResolver().delete(CallLog.Calls.CONTENT_URI, selectionFilter, selectionArgs); } catch (IllegalArgumentException e) { Log.w(TAG, "Call Logs could not be deleted, they may not exist yet."); } } private void registerSdpRecord() { SdpManager sdpManager = SdpManager.getDefaultManager(); if (sdpManager == null) { Loading Loading @@ -171,6 +192,21 @@ public class PbapClientService extends ProfileService { for (PbapClientStateMachine stateMachine : mPbapClientStateMachineMap.values()) { stateMachine.resumeDownload(); } } else if (action.equals(BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED)) { // PbapClientConnectionHandler has code to remove calllogs when PBAP disconnects. // However, if PBAP was never connected/enabled in the first place, and calls are // made over HFP, these calllogs will not be removed when the device disconnects. // This code ensures callogs are still removed in this case. BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); int newState = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1); if (newState == BluetoothProfile.STATE_DISCONNECTED) { if (DBG) { Log.d(TAG, "Received intent to disconnect HFP with " + device); } // HFP client stores entries in calllog.db by BD_ADDR and component name removeHfpCallLog(device.getAddress(), context); } } } } Loading