1ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak/*
2ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Copyright (c) 2015, Motorola Mobility LLC
3ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * All rights reserved.
4ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *
5ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Redistribution and use in source and binary forms, with or without
6ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * modification, are permitted provided that the following conditions are met:
7ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *     - Redistributions of source code must retain the above copyright
8ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       notice, this list of conditions and the following disclaimer.
9ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *     - Redistributions in binary form must reproduce the above copyright
10ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       notice, this list of conditions and the following disclaimer in the
11ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       documentation and/or other materials provided with the distribution.
12ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *     - Neither the name of Motorola Mobility nor the
13ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       names of its contributors may be used to endorse or promote products
14ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       derived from this software without specific prior written permission.
15ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *
16ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
18ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MOTOROLA MOBILITY LLC BE LIABLE
20ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * DAMAGE.
27ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */
28ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
29ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakpackage com.android.service.ims.presence;
30ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
31ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.accounts.Account;
32ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.content.ContentResolver;
33ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.content.ContentUris;
34ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.content.ContentValues;
35ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.content.Context;
36ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.database.Cursor;
37ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.net.Uri;
38ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.provider.ContactsContract.Groups;
39ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
40ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.provider.ContactsContract;
41ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.provider.ContactsContract.CommonDataKinds.Phone;
42ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
43ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport com.android.ims.internal.EABContract;
44ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport com.android.ims.internal.Logger;
45ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
46ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakpublic class ContactDbUtil {
47ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    private static Logger logger = Logger.getLogger("ContactDbUtil");
48ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
49ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static int resetVtCapability(ContentResolver resolver) {
50ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        if(resolver == null) {
51ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak            logger.error("resetVtCapability, resolver = null");
52ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak            return 0;
53ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        }
54ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
55ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        String selection = ContactsContract.Data.MIMETYPE + " = '" + Phone.CONTENT_ITEM_TYPE + "'";
56ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
57ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        ContentValues values = new ContentValues();
58ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        values.put(ContactsContract.Data.CARRIER_PRESENCE, 0); // reset all.
59ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        int count = resolver.update(ContactsContract.Data.CONTENT_URI, values, selection, null);
60ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        logger.debug("resetVtCapability count=" + count);
61ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        return count;
62ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
63ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
64ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static int updateVtCapability(ContentResolver resolver, long dataId, boolean enable) {
65ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        if(resolver == null) {
66ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak            logger.error("resetVtCapability, resolver = null");
67ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak            return 0;
68ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        }
69ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
70ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        String selection = ContactsContract.Data.MIMETYPE + " = '" + Phone.CONTENT_ITEM_TYPE
71ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                + "' and " + ContactsContract.Data._ID + "= '" + dataId + "'";
72ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
73ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        int oldValue = 0;
74ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        final Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI,
75ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                new String[] { ContactsContract.Data._ID, ContactsContract.Data.CARRIER_PRESENCE },
76ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                selection, null, null);
77ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        if (cursor != null) {
78ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak            try {
79ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                if (cursor.moveToFirst()) {
80ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                    oldValue = cursor.getInt(1);
81ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                }
82ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak            } finally {
83ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                cursor.close();
84ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak            }
85ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        }
86ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
87ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
88ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        ContentValues values = new ContentValues();
89ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        values.put(ContactsContract.Data.CARRIER_PRESENCE,
90ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                enable?(oldValue | ContactsContract.Data.CARRIER_PRESENCE_VT_CAPABLE):
91ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                (oldValue & ~ContactsContract.Data.CARRIER_PRESENCE_VT_CAPABLE));
92ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        int count = resolver.update(ContactsContract.Data.CONTENT_URI, values, selection, null);
93ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        logger.debug("resetVtCapability count=" + count);
94ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        return count;
95ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
96ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak}
97