1e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov/*
2e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
3e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *
4e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * you may not use this file except in compliance with the License.
6e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * You may obtain a copy of the License at
7e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *
8e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov *
10e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * See the License for the specific language governing permissions and
14e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov * limitations under the License
15e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov */
1618ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovpackage com.android.contacts;
17e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
18e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.content.Context;
19e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.content.CursorLoader;
20be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuanimport android.net.Uri;
21e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.provider.ContactsContract.Groups;
22e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
23e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov/**
24be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * Group meta-data loader. Loads all groups or just a single group from the
25be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * database (if given a {@link Uri}).
26e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov */
27e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovpublic final class GroupMetaDataLoader extends CursorLoader {
28e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
29e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    private final static String[] COLUMNS = new String[] {
30e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.ACCOUNT_NAME,
31e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.ACCOUNT_TYPE,
322b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        Groups.DATA_SET,
33e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups._ID,
34e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.TITLE,
35e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.AUTO_ADD,
36e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.FAVORITES,
37c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan        Groups.GROUP_IS_READ_ONLY,
38267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson        Groups.DELETED,
39e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    };
40e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
41e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public final static int ACCOUNT_NAME = 0;
42e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public final static int ACCOUNT_TYPE = 1;
432b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int DATA_SET = 2;
442b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int GROUP_ID = 3;
452b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int TITLE = 4;
462b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int AUTO_ADD = 5;
472b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int FAVORITES = 6;
482b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int IS_READ_ONLY = 7;
492b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int DELETED = 8;
50e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
51be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public GroupMetaDataLoader(Context context, Uri groupUri) {
52be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        super(context, ensureIsGroupUri(groupUri), COLUMNS, Groups.ACCOUNT_TYPE + " NOT NULL AND "
53234e78453e7b4a3179500fa68c105bee4ad19757Dmitri Plotnikov                + Groups.ACCOUNT_NAME + " NOT NULL", null, null);
54e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
55be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
56be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    /**
57be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     * Ensures that this is a valid group URI. If invalid, then an exception is
58be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     * thrown. Otherwise, the original URI is returned.
59be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     */
60be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private static Uri ensureIsGroupUri(final Uri groupUri) {
61be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        // TODO: Fix ContactsProvider2 getType method to resolve the group Uris
62be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        if (groupUri == null) {
63be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            throw new IllegalArgumentException("Uri must not be null");
64be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        }
65be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        if (!groupUri.toString().startsWith(Groups.CONTENT_URI.toString())) {
66be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            throw new IllegalArgumentException("Invalid group Uri: " + groupUri);
67be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        }
68be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        return groupUri;
69be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    }
70e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov}
71