Home | History | Annotate | Download | only in query
      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.settings.intelligence.search.query;
     18 
     19 import android.content.Context;
     20 import android.support.annotation.NonNull;
     21 
     22 import com.android.settings.intelligence.overlay.FeatureFactory;
     23 import com.android.settings.intelligence.search.SearchResult;
     24 import com.android.settings.intelligence.search.sitemap.SiteMapManager;
     25 
     26 import java.util.List;
     27 import java.util.concurrent.Callable;
     28 import java.util.concurrent.FutureTask;
     29 
     30 public class SearchQueryTask extends FutureTask<List<? extends SearchResult>> {
     31 
     32     private final int mId;
     33 
     34     public SearchQueryTask(@NonNull QueryWorker queryWorker) {
     35         super(queryWorker);
     36         mId = queryWorker.getQueryWorkerId();
     37     }
     38 
     39     public int getTaskId() {
     40         return mId;
     41     }
     42 
     43     public static abstract class QueryWorker implements Callable<List<? extends SearchResult>> {
     44 
     45         protected final Context mContext;
     46         protected final SiteMapManager mSiteMapManager;
     47         protected final String mQuery;
     48 
     49         public QueryWorker(Context context, SiteMapManager siteMapManager, String query) {
     50             mContext = context;
     51             mSiteMapManager = siteMapManager;
     52             mQuery = query;
     53         }
     54 
     55         @Override
     56         public List<? extends SearchResult> call() throws Exception {
     57             final long startTime = System.currentTimeMillis();
     58             try {
     59                 return query();
     60             } finally {
     61                 final long endTime = System.currentTimeMillis();
     62                 FeatureFactory.get(mContext).metricsFeatureProvider(mContext)
     63                         .logEvent(getQueryWorkerId(), endTime - startTime);
     64             }
     65         }
     66 
     67         protected abstract int getQueryWorkerId();
     68 
     69         protected abstract List<? extends SearchResult> query();
     70     }
     71 }
     72