Home | History | Annotate | Download | only in protocol
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
      5  * in compliance with the License. You may obtain a copy of the License at
      6  *
      7  * http://www.apache.org/licenses/LICENSE-2.0
      8  *
      9  * Unless required by applicable law or agreed to in writing, software distributed under the License
     10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
     11  * or implied. See the License for the specific language governing permissions and limitations under
     12  * the License.
     13  */
     14 
     15 package com.android.dialer.p13n.inference.protocol;
     16 
     17 import android.database.Cursor;
     18 import android.support.annotation.MainThread;
     19 import android.support.annotation.NonNull;
     20 import android.support.annotation.Nullable;
     21 import java.util.List;
     22 
     23 /** Provides personalized ranking of outgoing call targets. */
     24 public interface P13nRanker {
     25 
     26   /**
     27    * Re-orders a list of phone numbers according to likelihood they will be the next outgoing call.
     28    *
     29    * @param phoneNumbers the list of candidate numbers to call (may be in contacts list or not)
     30    */
     31   @NonNull
     32   @MainThread
     33   List<String> rankList(@NonNull List<String> phoneNumbers);
     34 
     35   /**
     36    * Re-orders a retrieved contact list according to likelihood they will be the next outgoing call.
     37    *
     38    * <p>A new cursor with reordered data is returned; the input cursor is unmodified except for its
     39    * position. If the order is unchanged, this method may return a reference to the unmodified input
     40    * cursor directly. The order would be unchanged if the ranking cache is not yet ready, or if the
     41    * input cursor is closed or invalid, or if any other error occurs in the ranking process.
     42    *
     43    * @param phoneQueryResults cursor of results of a Dialer search query
     44    * @param queryLength length of the search query that resulted in the cursor data, if below 0,
     45    *     assumes no length is specified, thus applies the default behavior which is same as when
     46    *     queryLength is greater than zero.
     47    * @return new cursor of data reordered by ranking (or reference to input cursor if order
     48    *     unchanged)
     49    */
     50   @NonNull
     51   @MainThread
     52   Cursor rankCursor(@NonNull Cursor phoneQueryResults, int queryLength);
     53 
     54   /**
     55    * Refreshes ranking cache (pulls fresh contextual features, pre-caches inference results, etc.).
     56    *
     57    * <p>Asynchronously runs in background as the process might take a few seconds, notifying a
     58    * listener upon completion; meanwhile, any calls to {@link #rankList} will simply return the
     59    * input in same order.
     60    *
     61    * @param listener callback for when ranking refresh has completed; null value skips notification.
     62    */
     63   @MainThread
     64   void refresh(@Nullable P13nRefreshCompleteListener listener);
     65 
     66   /** Decides if results should be displayed for no-query search. */
     67   @MainThread
     68   boolean shouldShowEmptyListForNullQuery();
     69 
     70   /**
     71    * Callback class for when ranking refresh has completed.
     72    *
     73    * <p>Primary use is to notify {@link com.android.dialer.app.DialtactsActivity} that the ranking
     74    * functions {@link #rankList} and {@link #rankCursor(Cursor, int)} will now give useful results.
     75    */
     76   interface P13nRefreshCompleteListener {
     77 
     78     /** Callback for when ranking refresh has completed. */
     79     void onP13nRefreshComplete();
     80   }
     81 }
     82