[ https://issues.apache.org/jira/browse/CB-8048?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vladimir Kotikov updated CB-8048: --------------------------------- Component/s: (was: mobile-spec) > Contact.pickContact API should call getContactByRawId to fetch already > existing contact > --------------------------------------------------------------------------------------- > > Key: CB-8048 > URL: https://issues.apache.org/jira/browse/CB-8048 > Project: Apache Cordova > Issue Type: Bug > Components: Plugin Contacts > Affects Versions: 3.6.3 > Environment: Mobilespec 3.6.3 , Nexus 7 device, Android 4.4.3 version > on device > Reporter: Pavankumar Joshi > Priority: Minor > Labels: Android > > This Issue is related to https://issues.apache.org/jira/browse/CB-5308 > I am constantly getting contact.save()(already existing contact) method test > failure. > If I apply the patch as mentioned in JIRA > https://issues.apache.org/jira/browse/CB-5308 pickContacts API fails. > But without the patch conact.save()(already existing contact) method always > fails. > I observed that the query to retrieve the contact which already exists > RAWCONTACTS_ID is used This is implemented in onActivityResult() in > ContactManager.java > Hence i made the change even to pickContact API. > Earlier Code > {code} > public void onActivityResult(int requestCode, int resultCode, final Intent > intent) { > if (requestCode == CONTACT_PICKER_RESULT) { > if (resultCode == Activity.RESULT_OK) { > String contactId = intent.getData().getLastPathSegment(); > // to populate contact data we require Raw Contact ID > // so we do look up for contact raw id first > Cursor c = > this.cordova.getActivity().getContentResolver().query(RawContacts.CONTENT_URI, > new String[] > {RawContacts._ID}, RawContacts.CONTACT_ID + " = " + contactId, null, null); > if (!c.moveToFirst()) { this.callbackContext.error("Error occured while > retrieving contact raw id"); return; } > String id = c.getString(c.getColumnIndex(RawContacts._ID)); > c.close(); > try { JSONObject contact = contactAccessor.getContactById(id); > this.callbackContext.success(contact); return; } catch (JSONException e) { > Log.e(LOG_TAG, "JSON fail.", e); } > } else if (resultCode == Activity.RESULT_CANCELED){ > this.callbackContext.sendPluginResult(new > PluginResult(PluginResult.Status.NO_RESULT, UNKNOWN_ERROR)); return; } > this.callbackContext.sendPluginResult(new > PluginResult(PluginResult.Status.ERROR, UNKNOWN_ERROR)); > } > } > {code} > Modified Code : Changed the call " JSONObject contact = > contactAccessor.getContactByRawId(id);" > {code} > public void onActivityResult(int requestCode, int resultCode, final Intent > intent) { > if (requestCode == CONTACT_PICKER_RESULT) { > if (resultCode == Activity.RESULT_OK) { > String contactId = intent.getData().getLastPathSegment(); > // to populate contact data we require Raw Contact ID > // so we do look up for contact raw id first > Cursor c = > this.cordova.getActivity().getContentResolver().query(RawContacts.CONTENT_URI, > new String[] {RawContacts._ID} > , RawContacts.CONTACT_ID + " = " + contactId, null, null); > if (!c.moveToFirst()) > { this.callbackContext.error("Error occured while retrieving contact raw > id"); return; } > String id = c.getString(c.getColumnIndex(RawContacts._ID)); > c.close(); > try > { //JSONObject contact = contactAccessor.getContactById(id); JSONObject > contact = contactAccessor.getContactByRawId(id); > this.callbackContext.success(contact); return; } > catch (JSONException e) > { Log.e(LOG_TAG, "JSON fail.", e); } > } else if (resultCode == Activity.RESULT_CANCELED) > { this.callbackContext.sendPluginResult(new > PluginResult(PluginResult.Status.NO_RESULT, UNKNOWN_ERROR)); return; } > this.callbackContext.sendPluginResult(new > PluginResult(PluginResult.Status.ERROR, UNKNOWN_ERROR)); > } > } > {code} > Please let me know if this is correct or are we missing something -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org