• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
isEnabled(Context context)45     public boolean isEnabled(Context context) {
46         return true;
47     }
48 
49     @Override
setUpSearchMenu(Menu menu, final Activity activity)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
getDatabaseSearchLoader(Context context, String query)70     public DatabaseResultLoader getDatabaseSearchLoader(Context context, String query) {
71         return new DatabaseResultLoader(context, query, getSiteMapManager());
72     }
73 
74     @Override
getInstalledAppSearchLoader(Context context, String query)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
getSavedQueryLoader(Context context)82     public SavedQueryLoader getSavedQueryLoader(Context context) {
83         return new SavedQueryLoader(context);
84     }
85 
86     @Override
getIndexingManager(Context context)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
isIndexingComplete(Context context)96     public boolean isIndexingComplete(Context context) {
97         return getIndexingManager(context).isIndexingComplete();
98     }
99 
getSiteMapManager()100     public SiteMapManager getSiteMapManager() {
101         if (mSiteMapManager == null) {
102             mSiteMapManager = new SiteMapManager();
103         }
104         return mSiteMapManager;
105     }
106 
107     @Override
updateIndex(Context context, IndexingCallback callback)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