Home | History | Annotate | Download | only in speeddial
      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 
     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 
     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 
     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
     94   public Cursor loadInBackground() {
     95     return SpeedDialCursor.newInstance(super.loadInBackground());
     96   }
     97 }
     98