1 /* 2 * Copyright (C) 2018 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.database; 18 19 import android.provider.ContactsContract.CommonDataKinds.Phone; 20 import android.support.annotation.IntDef; 21 import android.support.annotation.Nullable; 22 import com.google.auto.value.AutoValue; 23 import com.google.common.base.Optional; 24 import java.lang.annotation.Retention; 25 import java.lang.annotation.RetentionPolicy; 26 27 /** POJO representation of database rows returned by {@link SpeedDialEntryDao}. */ 28 @AutoValue 29 public abstract class SpeedDialEntry { 30 31 /** 32 * Unique ID 33 * 34 * <p>Must be null when inserting, and an ID will be generated and returned after inserting. 35 */ 36 @Nullable id()37 public abstract Long id(); 38 39 /** Position the contact is pinned to in the UI. Will be absent if it hasn't be set yet. */ pinnedPosition()40 public abstract Optional<Integer> pinnedPosition(); 41 42 /** @see {@link Contacts#_ID} */ contactId()43 public abstract long contactId(); 44 45 /** @see {@link Contacts#LOOKUP_KEY} */ lookupKey()46 public abstract String lookupKey(); 47 48 /** 49 * {@link Channel} that is associated with this entry. 50 * 51 * <p>Contacts with multiple channels do not have a default until specified by the user. Once the 52 * default channel is determined, all calls should be placed to this channel. 53 */ 54 @Nullable defaultChannel()55 public abstract Channel defaultChannel(); 56 toBuilder()57 public abstract Builder toBuilder(); 58 builder()59 public static Builder builder() { 60 return new AutoValue_SpeedDialEntry.Builder().setPinnedPosition(Optional.absent()); 61 } 62 63 /** Builder class for speed dial entry. */ 64 @AutoValue.Builder 65 public abstract static class Builder { 66 setId(Long id)67 public abstract Builder setId(Long id); 68 setPinnedPosition(Optional<Integer> pinnedPosition)69 public abstract Builder setPinnedPosition(Optional<Integer> pinnedPosition); 70 setContactId(long contactId)71 public abstract Builder setContactId(long contactId); 72 setLookupKey(String lookupKey)73 public abstract Builder setLookupKey(String lookupKey); 74 setDefaultChannel(@ullable Channel defaultChannel)75 public abstract Builder setDefaultChannel(@Nullable Channel defaultChannel); 76 build()77 public abstract SpeedDialEntry build(); 78 } 79 80 /** POJO representation of a relevant phone number columns in {@link SpeedDialEntryDao}. */ 81 @AutoValue 82 public abstract static class Channel { 83 84 public static final int UNKNOWN = 0; 85 public static final int VOICE = 1; 86 public static final int IMS_VIDEO = 2; 87 public static final int DUO = 3; 88 89 /** Whether the Channel is for an audio or video call. */ 90 @Retention(RetentionPolicy.SOURCE) 91 @IntDef({UNKNOWN, VOICE, IMS_VIDEO, DUO}) 92 public @interface Technology {} 93 isVideoTechnology()94 public boolean isVideoTechnology() { 95 return technology() == IMS_VIDEO || technology() == DUO; 96 } 97 98 /** 99 * Raw phone number as the user entered it. 100 * 101 * @see Phone#NUMBER 102 */ number()103 public abstract String number(); 104 105 /** @see Phone#TYPE */ phoneType()106 public abstract int phoneType(); 107 108 /** @see Phone#LABEL */ label()109 public abstract String label(); 110 technology()111 public abstract @Technology int technology(); 112 toBuilder()113 public abstract Builder toBuilder(); 114 builder()115 public static Builder builder() { 116 return new AutoValue_SpeedDialEntry_Channel.Builder(); 117 } 118 119 /** Builder class for {@link Channel}. */ 120 @AutoValue.Builder 121 public abstract static class Builder { 122 setNumber(String number)123 public abstract Builder setNumber(String number); 124 setPhoneType(int phoneType)125 public abstract Builder setPhoneType(int phoneType); 126 setLabel(String label)127 public abstract Builder setLabel(String label); 128 setTechnology(@echnology int technology)129 public abstract Builder setTechnology(@Technology int technology); 130 build()131 public abstract Channel build(); 132 } 133 } 134 } 135