• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 
17 package com.android.dialer.speeddial;
18 
19 import android.content.Context;
20 import android.content.CursorLoader;
21 import android.database.Cursor;
22 import android.database.MatrixCursor;
23 import android.net.Uri;
24 import android.provider.ContactsContract;
25 import android.provider.ContactsContract.CommonDataKinds.Phone;
26 import android.provider.ContactsContract.Contacts;
27 
28 /** Cursor Loader for strequent contacts. */
29 public final class StrequentContactsCursorLoader extends CursorLoader {
30 
31   static final int PHONE_ID = 0;
32   static final int PHONE_DISPLAY_NAME = 1;
33   static final int PHONE_STARRED = 2;
34   static final int PHONE_PHOTO_URI = 3;
35   static final int PHONE_LOOKUP_KEY = 4;
36   static final int PHONE_PHOTO_ID = 5;
37   static final int PHONE_NUMBER = 6;
38   static final int PHONE_TYPE = 7;
39   static final int PHONE_LABEL = 8;
40   static final int PHONE_IS_SUPER_PRIMARY = 9;
41   static final int PHONE_PINNED = 10;
42   static final int PHONE_CONTACT_ID = 11;
43 
44   public static final String[] PHONE_PROJECTION =
45       new String[] {
46         Phone._ID, // 0
47         Phone.DISPLAY_NAME, // 1
48         Phone.STARRED, // 2
49         Phone.PHOTO_URI, // 3
50         Phone.LOOKUP_KEY, // 4
51         Phone.PHOTO_ID, // 5
52         Phone.NUMBER, // 6
53         Phone.TYPE, // 7
54         Phone.LABEL, // 8
55         Phone.IS_SUPER_PRIMARY, // 9
56         Phone.PINNED, // 10
57         Phone.CONTACT_ID, // 11
58       };
59 
StrequentContactsCursorLoader(Context context)60   StrequentContactsCursorLoader(Context context) {
61     super(
62         context,
63         buildUri(),
64         PHONE_PROJECTION,
65         null /* selection */,
66         null /* selectionArgs */,
67         null /* sortOrder */);
68     // TODO(calderwoodra): implement alternative display names
69   }
70 
addToCursor(MatrixCursor dest, Cursor source)71   static void addToCursor(MatrixCursor dest, Cursor source) {
72     dest.newRow()
73         .add(PHONE_PROJECTION[PHONE_ID], source.getLong(PHONE_ID))
74         .add(PHONE_PROJECTION[PHONE_DISPLAY_NAME], source.getString(PHONE_DISPLAY_NAME))
75         .add(PHONE_PROJECTION[PHONE_STARRED], source.getInt(PHONE_STARRED))
76         .add(PHONE_PROJECTION[PHONE_PHOTO_URI], source.getString(PHONE_PHOTO_URI))
77         .add(PHONE_PROJECTION[PHONE_LOOKUP_KEY], source.getString(PHONE_LOOKUP_KEY))
78         .add(PHONE_PROJECTION[PHONE_NUMBER], source.getString(PHONE_NUMBER))
79         .add(PHONE_PROJECTION[PHONE_TYPE], source.getInt(PHONE_TYPE))
80         .add(PHONE_PROJECTION[PHONE_LABEL], source.getString(PHONE_LABEL))
81         .add(PHONE_PROJECTION[PHONE_IS_SUPER_PRIMARY], source.getInt(PHONE_IS_SUPER_PRIMARY))
82         .add(PHONE_PROJECTION[PHONE_PINNED], source.getInt(PHONE_PINNED))
83         .add(PHONE_PROJECTION[PHONE_CONTACT_ID], source.getLong(PHONE_CONTACT_ID));
84   }
85 
buildUri()86   private static Uri buildUri() {
87     return Contacts.CONTENT_STREQUENT_URI
88         .buildUpon()
89         .appendQueryParameter(ContactsContract.STREQUENT_PHONE_ONLY, "true")
90         .build();
91   }
92 
93   @Override
loadInBackground()94   public Cursor loadInBackground() {
95     return SpeedDialCursor.newInstance(super.loadInBackground());
96   }
97 }
98