Home | History | Annotate | Download | only in search2
      1 /*
      2  * Copyright (C) 2016 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.search2;
     18 
     19 import android.app.Activity;
     20 import android.content.Context;
     21 import android.content.Intent;
     22 import android.support.annotation.VisibleForTesting;
     23 import android.util.Log;
     24 import android.view.Menu;
     25 import android.view.MenuItem;
     26 
     27 import com.android.settings.R;
     28 import com.android.settings.applications.PackageManagerWrapperImpl;
     29 import com.android.settings.dashboard.SiteMapManager;
     30 import com.android.settings.search.IndexingCallback;
     31 
     32 import java.util.concurrent.atomic.AtomicBoolean;
     33 
     34 /**
     35  * FeatureProvider for the refactored search code.
     36  */
     37 public class SearchFeatureProviderImpl implements SearchFeatureProvider {
     38 
     39     private static final String TAG = "SearchFeatureProvider";
     40 
     41     private DatabaseIndexingManager mDatabaseIndexingManager;
     42     private SiteMapManager mSiteMapManager;
     43 
     44     @Override
     45     public boolean isEnabled(Context context) {
     46         return true;
     47     }
     48 
     49     @Override
     50     public void setUpSearchMenu(Menu menu, final Activity activity) {
     51         if (menu == null || activity == null) {
     52             return;
     53         }
     54         String menuTitle = activity.getString(R.string.search_menu);
     55         MenuItem menuItem = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, menuTitle)
     56                 .setIcon(R.drawable.ic_search_24dp)
     57                 .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
     58                     @Override
     59                     public boolean onMenuItemClick(MenuItem item) {
     60                         Intent intent = new Intent(activity, SearchActivity.class);
     61                         activity.startActivity(intent);
     62                         return true;
     63                     }
     64                 });
     65 
     66         menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
     67     }
     68 
     69     @Override
     70     public DatabaseResultLoader getDatabaseSearchLoader(Context context, String query) {
     71         return new DatabaseResultLoader(context, query, getSiteMapManager());
     72     }
     73 
     74     @Override
     75     public InstalledAppResultLoader getInstalledAppSearchLoader(Context context, String query) {
     76         return new InstalledAppResultLoader(
     77                 context, new PackageManagerWrapperImpl(context.getPackageManager()), query,
     78                 getSiteMapManager());
     79     }
     80 
     81     @Override
     82     public SavedQueryLoader getSavedQueryLoader(Context context) {
     83         return new SavedQueryLoader(context);
     84     }
     85 
     86     @Override
     87     public DatabaseIndexingManager getIndexingManager(Context context) {
     88         if (mDatabaseIndexingManager == null) {
     89             mDatabaseIndexingManager = new DatabaseIndexingManager(context.getApplicationContext(),
     90                     context.getPackageName());
     91         }
     92         return mDatabaseIndexingManager;
     93     }
     94 
     95     @Override
     96     public boolean isIndexingComplete(Context context) {
     97         return getIndexingManager(context).isIndexingComplete();
     98     }
     99 
    100     public SiteMapManager getSiteMapManager() {
    101         if (mSiteMapManager == null) {
    102             mSiteMapManager = new SiteMapManager();
    103         }
    104         return mSiteMapManager;
    105     }
    106 
    107     @Override
    108     public void updateIndex(Context context, IndexingCallback callback) {
    109         long indexStartTime = System.currentTimeMillis();
    110         getIndexingManager(context).indexDatabase(callback);
    111         Log.d(TAG, "IndexDatabase() took " +
    112                 (System.currentTimeMillis() - indexStartTime) + " ms");
    113     }
    114 }
    115