1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/* 2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2016 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.p13n.inference; 18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 19ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.Context; 20ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.database.Cursor; 21ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.annotation.MainThread; 22ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.annotation.NonNull; 23ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.annotation.Nullable; 24ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.common.Assert; 252f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanianimport com.android.dialer.configprovider.ConfigProviderBindings; 26ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.p13n.inference.protocol.P13nRanker; 27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.p13n.inference.protocol.P13nRankerFactory; 28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.util.List; 29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 30ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/** Single entry point for all personalized ranking. */ 31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpublic final class P13nRanking { 32ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian private static P13nRanker ranker; 34ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 35ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian private P13nRanking() {} 36ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @MainThread 38ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @NonNull 39ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static P13nRanker get(@NonNull Context context) { 40ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Assert.isNotNull(context); 41ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Assert.isMainThread(); 42d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (ranker != null) { 44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return ranker; 45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 46ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 47d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (!ConfigProviderBindings.get(context).getBoolean("p13n_ranker_should_enable", false)) { 48d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian setToIdentityRanker(); 49d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return ranker; 50d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 51d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 52ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context application = context.getApplicationContext(); 53ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (application instanceof P13nRankerFactory) { 54ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ranker = ((P13nRankerFactory) application).newP13nRanker(); 55ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 56ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 57ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (ranker == null) { 58d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian setToIdentityRanker(); 59ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 60ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return ranker; 61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 63d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private static void setToIdentityRanker() { 64d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian ranker = 65d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian new P13nRanker() { 66d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 67d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public void refresh(@Nullable P13nRefreshCompleteListener listener) {} 68d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 69d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 70d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public List<String> rankList(List<String> phoneNumbers) { 71d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return phoneNumbers; 72d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 73d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 74d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @NonNull 75d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 76d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Cursor rankCursor(@NonNull Cursor phoneQueryResults, int queryLength) { 77d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return phoneQueryResults; 78d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 79d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 80d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 81d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public boolean shouldShowEmptyListForNullQuery() { 82d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return true; 83d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 84d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian }; 85d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 86d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static void setForTesting(@NonNull P13nRanker ranker) { 88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian P13nRanking.ranker = ranker; 89ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 90ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian} 91