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
239afaddec062bc1c9f3d7bb30992d70198fbe0840Wenyi Wangimport com.android.contacts.group.GroupUtil;
249afaddec062bc1c9f3d7bb30992d70198fbe0840Wenyi Wang
25e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov/**
26be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * Group meta-data loader. Loads all groups or just a single group from the
27be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan * database (if given a {@link Uri}).
28e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov */
29e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovpublic final class GroupMetaDataLoader extends CursorLoader {
30e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
31428824eaca7ed60c14add0a1d45edfe4535059bbWalter Jang    public final static String[] COLUMNS = new String[] {
32e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.ACCOUNT_NAME,
33e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.ACCOUNT_TYPE,
342b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        Groups.DATA_SET,
35e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups._ID,
36e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.TITLE,
37e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.AUTO_ADD,
38e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov        Groups.FAVORITES,
39c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan        Groups.GROUP_IS_READ_ONLY,
40267073407439d7df012a2e0df577e39a1f89c4a8Isaac Katzenelson        Groups.DELETED,
41e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    };
42e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
43e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public final static int ACCOUNT_NAME = 0;
44e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    public final static int ACCOUNT_TYPE = 1;
452b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int DATA_SET = 2;
462b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int GROUP_ID = 3;
472b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int TITLE = 4;
482b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int AUTO_ADD = 5;
492b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int FAVORITES = 6;
502b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int IS_READ_ONLY = 7;
512b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final static int DELETED = 8;
52e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov
53be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public GroupMetaDataLoader(Context context, Uri groupUri) {
545c1bff2efa542ea112c3f2a1d1ed1e271c7691a7Gary Mai        super(context, ensureIsGroupUri(groupUri), COLUMNS, GroupUtil.DEFAULT_SELECTION, null,
555c1bff2efa542ea112c3f2a1d1ed1e271c7691a7Gary Mai                GroupUtil.getGroupsSortOrder());
565c1bff2efa542ea112c3f2a1d1ed1e271c7691a7Gary Mai    }
575c1bff2efa542ea112c3f2a1d1ed1e271c7691a7Gary Mai
585c1bff2efa542ea112c3f2a1d1ed1e271c7691a7Gary Mai    public GroupMetaDataLoader(Context context, Uri groupUri, String selection) {
595c1bff2efa542ea112c3f2a1d1ed1e271c7691a7Gary Mai        super(context, ensureIsGroupUri(groupUri), COLUMNS, selection, null,
60dd2d8e27d8548893122c469bd1b68d5117fc5318Walter Jang                GroupUtil.getGroupsSortOrder());
61e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov    }
62be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
63be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    /**
64be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     * Ensures that this is a valid group URI. If invalid, then an exception is
65be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     * thrown. Otherwise, the original URI is returned.
66be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     */
67be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private static Uri ensureIsGroupUri(final Uri groupUri) {
68be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        // TODO: Fix ContactsProvider2 getType method to resolve the group Uris
69be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        if (groupUri == null) {
70be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            throw new IllegalArgumentException("Uri must not be null");
71be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        }
727967545e62b473503473b2c9e127cef405f67201Wenyi Wang        if (!GroupUtil.isGroupUri(groupUri)) {
73be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            throw new IllegalArgumentException("Invalid group Uri: " + groupUri);
74be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        }
75be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        return groupUri;
76be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    }
77e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov}
78