ContactInfoRequest.java revision ccca31529c07970e89419fb85a9e8153a5396838
1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/* 2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2015 The Android Open Source Project 3ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 4ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * you may not use this file except in compliance with the License. 6ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * You may obtain a copy of the License at 7ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 8ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 10ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * See the License for the specific language governing permissions and 14ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * limitations under the License. 15ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 16ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 17ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpackage com.android.dialer.app.contactinfo; 18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 19ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.annotation.IntDef; 20ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextUtils; 21ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.phonenumbercache.ContactInfo; 22ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.lang.annotation.Retention; 23ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.lang.annotation.RetentionPolicy; 24ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.util.Objects; 25ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.util.concurrent.atomic.AtomicLong; 26ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/** A request for contact details for the given number, used by the ContactInfoCache. */ 28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpublic final class ContactInfoRequest implements Comparable<ContactInfoRequest> { 29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 30ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian private static final AtomicLong NEXT_SEQUENCE_NUMBER = new AtomicLong(0); 31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 32ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian private final long sequenceNumber; 33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 34ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** The number to look-up. */ 35ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public final String number; 36ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** The country in which a call to or from this number was placed or received. */ 37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public final String countryIso; 38ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** The cached contact information stored in the call log. */ 39ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public final ContactInfo callLogInfo; 40ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 41ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Is the request a remote lookup. Remote requests are treated as lower priority. */ 42ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @TYPE public final int type; 43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Specifies the type of the request is. */ 45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @IntDef( 46ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian value = { 47ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian TYPE_LOCAL, 48ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian TYPE_LOCAL_AND_REMOTE, 49ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian TYPE_REMOTE, 50ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 51ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ) 52ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Retention(RetentionPolicy.SOURCE) 53ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public @interface TYPE {} 54ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 55ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static final int TYPE_LOCAL = 0; 56ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** If cannot find the contact locally, do remote lookup later. */ 57ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static final int TYPE_LOCAL_AND_REMOTE = 1; 58ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 59ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static final int TYPE_REMOTE = 2; 60ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public ContactInfoRequest( 62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian String number, String countryIso, ContactInfo callLogInfo, @TYPE int type) { 63ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.sequenceNumber = NEXT_SEQUENCE_NUMBER.getAndIncrement(); 64ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.number = number; 65ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.countryIso = countryIso; 66ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.callLogInfo = callLogInfo; 67ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.type = type; 68ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 69ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 70ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Override 71ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public boolean equals(Object obj) { 72ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (this == obj) { 73ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return true; 74ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 75ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (obj == null) { 76ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return false; 77ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 78ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!(obj instanceof ContactInfoRequest)) { 79ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return false; 80ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 81ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 82ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ContactInfoRequest other = (ContactInfoRequest) obj; 83ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 84ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!TextUtils.equals(number, other.number)) { 85ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return false; 86ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!TextUtils.equals(countryIso, other.countryIso)) { 88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return false; 89ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 90ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!Objects.equals(callLogInfo, other.callLogInfo)) { 91ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return false; 92ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 93ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 94ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (type != other.type) { 95ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return false; 96ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 97ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 98ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return true; 99ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 100ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 101ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public boolean isLocalRequest() { 102ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return type == TYPE_LOCAL || type == TYPE_LOCAL_AND_REMOTE; 103ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 104ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 105ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Override 106ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int hashCode() { 107ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return Objects.hash(sequenceNumber, number, countryIso, callLogInfo, type); 108ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 109ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 110ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Override 111ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int compareTo(ContactInfoRequest other) { 112ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Local query always comes first. 113ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (isLocalRequest() && !other.isLocalRequest()) { 114ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return -1; 115ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 116ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!isLocalRequest() && other.isLocalRequest()) { 117ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return 1; 118ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 119ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // First come first served. 120ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return sequenceNumber < other.sequenceNumber ? -1 : 1; 121ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 122ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian} 123