Loading android/app/src/com/android/bluetooth/pbap/BluetoothPbapUtils.java +156 −121 Original line number Diff line number Diff line Loading @@ -182,19 +182,23 @@ class BluetoothPbapUtils { return new VCardComposer(ctx, vType, true); } public static String getProfileName(Context context) { Cursor c = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Profile.CONTENT_URI, new String[]{Profile.DISPLAY_NAME}, null, null, null); public static synchronized String getProfileName(Context context) { try (Cursor c = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Profile.CONTENT_URI, new String[] {Profile.DISPLAY_NAME}, null, null, null)) { String ownerName = null; if (c != null && c.moveToFirst()) { ownerName = c.getString(0); } if (c != null) { c.close(); } return ownerName; } } static String createProfileVCard(Context ctx, final int vcardType, final byte[] filter) { VCardComposer composer = null; Loading Loading @@ -271,7 +275,7 @@ class BluetoothPbapUtils { handler.sendMessage(handler.obtainMessage(BluetoothPbapService.CONTACTS_LOADED)); } static void updateSecondaryVersionCounter(Context context, Handler handler) { static synchronized void updateSecondaryVersionCounter(Context context, Handler handler) { /* updatedList stores list of contacts which are added/updated after * the time when contacts were last updated. (contactsLastUpdated * indicates the time when contact/contacts were last updated and Loading @@ -280,8 +284,16 @@ class BluetoothPbapUtils { HashSet<String> currentContactSet = new HashSet<>(); String[] projection = {Contacts._ID, Contacts.CONTACT_LAST_UPDATED_TIMESTAMP}; Cursor c = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Contacts.CONTENT_URI, projection, null, null, null); int currentContactCount = 0; try (Cursor c = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Contacts.CONTENT_URI, projection, null, null, null)) { if (c == null) { Log.d(TAG, "Failed to fetch data from contact database"); Loading @@ -295,8 +307,8 @@ class BluetoothPbapUtils { } currentContactSet.add(contactId); } int currentContactCount = c.getCount(); c.close(); currentContactCount = c.getCount(); } if (V) { Log.v(TAG, "updated list =" + updatedList); Loading Loading @@ -333,9 +345,15 @@ class BluetoothPbapUtils { for (String deletedContact : deletedContacts) { sContactSet.remove(deletedContact); String[] selectionArgs = {deletedContact}; Cursor dataCursor = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null); try (Cursor dataCursor = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null)) { if (dataCursor == null) { Log.d(TAG, "Failed to fetch data from contact database"); Loading @@ -349,7 +367,7 @@ class BluetoothPbapUtils { } sTotalFields--; } dataCursor.close(); } } /* When contacts are updated. i.e. Fields of existing contacts are Loading @@ -364,9 +382,15 @@ class BluetoothPbapUtils { boolean updated = false; String[] selectionArgs = {contact}; Cursor dataCursor = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null); try (Cursor dataCursor = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null)) { if (dataCursor == null) { Log.d(TAG, "Failed to fetch data from contact database"); Loading Loading @@ -395,8 +419,8 @@ class BluetoothPbapUtils { break; } } } ContactData cData = new ContactData(nameTmp, phoneTmp, emailTmp, addressTmp); dataCursor.close(); ContactData currentContactData = sContactDataset.get(contact); if (currentContactData == null) { Loading Loading @@ -468,12 +492,23 @@ class BluetoothPbapUtils { * isLoad = true indicates its loading all contacts * isLoad = false indiacates its caching recently added contact in database*/ @VisibleForTesting static int fetchAndSetContacts(Context context, Handler handler, String[] projection, String whereClause, String[] selectionArgs, boolean isLoad) { static synchronized int fetchAndSetContacts( Context context, Handler handler, String[] projection, String whereClause, String[] selectionArgs, boolean isLoad) { long currentTotalFields = 0, currentSvcFieldCount = 0; Cursor c = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, projection, whereClause, selectionArgs, null); try (Cursor c = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, projection, whereClause, selectionArgs, null)) { /* send delayed message to loadContact when ContentResolver is unable * to fetch data from contact database using the specified URI at that Loading Loading @@ -523,7 +558,7 @@ class BluetoothPbapUtils { sContactSet.add(contactId); currentTotalFields++; } c.close(); } /* This code checks if there is any update in contacts after last pbap * disconnect has happenned (even if BT is turned OFF during this time)*/ Loading Loading
android/app/src/com/android/bluetooth/pbap/BluetoothPbapUtils.java +156 −121 Original line number Diff line number Diff line Loading @@ -182,19 +182,23 @@ class BluetoothPbapUtils { return new VCardComposer(ctx, vType, true); } public static String getProfileName(Context context) { Cursor c = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Profile.CONTENT_URI, new String[]{Profile.DISPLAY_NAME}, null, null, null); public static synchronized String getProfileName(Context context) { try (Cursor c = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Profile.CONTENT_URI, new String[] {Profile.DISPLAY_NAME}, null, null, null)) { String ownerName = null; if (c != null && c.moveToFirst()) { ownerName = c.getString(0); } if (c != null) { c.close(); } return ownerName; } } static String createProfileVCard(Context ctx, final int vcardType, final byte[] filter) { VCardComposer composer = null; Loading Loading @@ -271,7 +275,7 @@ class BluetoothPbapUtils { handler.sendMessage(handler.obtainMessage(BluetoothPbapService.CONTACTS_LOADED)); } static void updateSecondaryVersionCounter(Context context, Handler handler) { static synchronized void updateSecondaryVersionCounter(Context context, Handler handler) { /* updatedList stores list of contacts which are added/updated after * the time when contacts were last updated. (contactsLastUpdated * indicates the time when contact/contacts were last updated and Loading @@ -280,8 +284,16 @@ class BluetoothPbapUtils { HashSet<String> currentContactSet = new HashSet<>(); String[] projection = {Contacts._ID, Contacts.CONTACT_LAST_UPDATED_TIMESTAMP}; Cursor c = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Contacts.CONTENT_URI, projection, null, null, null); int currentContactCount = 0; try (Cursor c = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Contacts.CONTENT_URI, projection, null, null, null)) { if (c == null) { Log.d(TAG, "Failed to fetch data from contact database"); Loading @@ -295,8 +307,8 @@ class BluetoothPbapUtils { } currentContactSet.add(contactId); } int currentContactCount = c.getCount(); c.close(); currentContactCount = c.getCount(); } if (V) { Log.v(TAG, "updated list =" + updatedList); Loading Loading @@ -333,9 +345,15 @@ class BluetoothPbapUtils { for (String deletedContact : deletedContacts) { sContactSet.remove(deletedContact); String[] selectionArgs = {deletedContact}; Cursor dataCursor = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null); try (Cursor dataCursor = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null)) { if (dataCursor == null) { Log.d(TAG, "Failed to fetch data from contact database"); Loading @@ -349,7 +367,7 @@ class BluetoothPbapUtils { } sTotalFields--; } dataCursor.close(); } } /* When contacts are updated. i.e. Fields of existing contacts are Loading @@ -364,9 +382,15 @@ class BluetoothPbapUtils { boolean updated = false; String[] selectionArgs = {contact}; Cursor dataCursor = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null); try (Cursor dataCursor = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, dataProjection, whereClause, selectionArgs, null)) { if (dataCursor == null) { Log.d(TAG, "Failed to fetch data from contact database"); Loading Loading @@ -395,8 +419,8 @@ class BluetoothPbapUtils { break; } } } ContactData cData = new ContactData(nameTmp, phoneTmp, emailTmp, addressTmp); dataCursor.close(); ContactData currentContactData = sContactDataset.get(contact); if (currentContactData == null) { Loading Loading @@ -468,12 +492,23 @@ class BluetoothPbapUtils { * isLoad = true indicates its loading all contacts * isLoad = false indiacates its caching recently added contact in database*/ @VisibleForTesting static int fetchAndSetContacts(Context context, Handler handler, String[] projection, String whereClause, String[] selectionArgs, boolean isLoad) { static synchronized int fetchAndSetContacts( Context context, Handler handler, String[] projection, String whereClause, String[] selectionArgs, boolean isLoad) { long currentTotalFields = 0, currentSvcFieldCount = 0; Cursor c = BluetoothMethodProxy.getInstance().contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, projection, whereClause, selectionArgs, null); try (Cursor c = BluetoothMethodProxy.getInstance() .contentResolverQuery( context.getContentResolver(), Data.CONTENT_URI, projection, whereClause, selectionArgs, null)) { /* send delayed message to loadContact when ContentResolver is unable * to fetch data from contact database using the specified URI at that Loading Loading @@ -523,7 +558,7 @@ class BluetoothPbapUtils { sContactSet.add(contactId); currentTotalFields++; } c.close(); } /* This code checks if there is any update in contacts after last pbap * disconnect has happenned (even if BT is turned OFF during this time)*/ Loading