You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2015/11/25 11:41:11 UTC

[jira] [Commented] (CB-5308) Contact.save() calls failure callback even though contact data is successfully saved on device

    [ https://issues.apache.org/jira/browse/CB-5308?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15026586#comment-15026586 ] 

ASF GitHub Bot commented on CB-5308:
------------------------------------

GitHub user vladimir-kotikov opened a pull request:

    https://github.com/apache/cordova-plugin-contacts/pull/87

    CB-5308 Return rawId instead of id when modifying existing contact

    This fixes issue with updating existing contact, described in [CB-5308](https://issues.apache.org/jira/browse/CB-5308)

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/MSOpenTech/cordova-plugin-contacts CB-5308

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/cordova-plugin-contacts/pull/87.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #87
    
----
commit 0c9a0cb616f3de9d3b7a6ea77a5cf543f0e3f13b
Author: Vladimir Kotikov <v-...@microsoft.com>
Date:   2015-11-23T14:18:29Z

    CB-5308 Return rawId instead of id when modifying existing contact

commit 03dc3b8b63873f2959b8bac5cf643b4d519d8c6f
Author: Vladimir Kotikov <v-...@microsoft.com>
Date:   2015-11-23T15:52:01Z

    CB-5308 Makes contacts save specs passing
    
     * Updates save specs to isolate them from each other
     * Removes interference between specs and after-spec cleanup routines

----


> Contact.save() calls failure callback even though contact data is successfully saved on device
> ----------------------------------------------------------------------------------------------
>
>                 Key: CB-5308
>                 URL: https://issues.apache.org/jira/browse/CB-5308
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Plugin Contacts
>         Environment: Android 4.1.2, 4.4.3 physical device. 4.4.3 device is Nexus 7.
> Cordova 3.1.0, 3.6.3
>            Reporter: Shingo Toda
>            Assignee: Vladimir Kotikov
>              Labels: Android, reproduced, triaged
>
> When I run contact mobile-spec, following specs sometimes fail.
> - contacts.spec.6
> - contacts.spec.20
> - contacts.spec.21
> - contacts.spec.24
> In Java side, it looks that {{ContactAccessorSdk5.save()}} returns contact id but {{ContactAccessorSdk5.getContactById()}} returns {{null}} instead of contact data associated with the id. Actually some of contact data such as "Test Delete" are found on my device so the save operation is actually done.
> This save() returns "newId" in the following code.
> {code:title=ContactAccessorSdk5.java|borderStyle=solid}
> 	    //Add contact
>         try {
>             ContentProviderResult[] cpResults = mApp.getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
>             if (cpResults.length >= 0) {
>                 newId = cpResults[0].uri.getLastPathSegment();
>             }
>         } catch (RemoteException e) {
>             Log.e(LOG_TAG, e.getMessage(), e);
>         } catch (OperationApplicationException e) {
>             Log.e(LOG_TAG, e.getMessage(), e);
>         }
>         return newId;
> {code}
> When I debug it, {{cpResults\[0\].uri}} is {{content://com.android.contacts/raw_contacts/xxxx}} so, this is just my assumption, I think {{save()}} returns raw contact id.
> But at {{getContactById()}}, query filter uses {{CONTACT_ID}} column as a projection.
> {code:title=ContactAccessorSdk5.java|borderStyle=solid}
>         Cursor c = mApp.getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
>                 null,
>                 ContactsContract.Data.CONTACT_ID + " = ? ",
>                 new String[] { id },
>                 ContactsContract.Data.CONTACT_ID + " ASC");
> {code}
> So if contact id and raw contact id is different then fetching contact data might fail. Actually in my case, if I fail the specs, they are always different.
> I try modifying {{getContactById()}} to process following code if contact JSONObject doesn't have id property, then I didn't get failure for those specs even if I run them some times.
> {code:title=ContactAccessorSdk5.java|borderStyle=solid}
>         Cursor c = mApp.getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
>                 null,
>                 ContactsContract.Data.RAW_CONTACT_ID + " = ? ",
>                 new String[] { rawid },
>                 ContactsContract.Data.RAW_CONTACT_ID + " ASC");
> {code}
> I am just learning how contact data is managed on Android so I might be wrong for some use cases, but it works fine for mobile-spec. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org