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.savedqueries;
18 
19 import android.content.Context;
20 import android.database.Cursor;
21 import android.database.sqlite.SQLiteDatabase;
22 import androidx.annotation.VisibleForTesting;
23 
24 import com.android.settings.intelligence.search.SearchResult;
25 import com.android.settings.intelligence.search.indexing.IndexDatabaseHelper;
26 import com.android.settings.intelligence.search.indexing.IndexDatabaseHelper.SavedQueriesColumns;
27 import com.android.settings.intelligence.utils.AsyncLoader;
28 
29 import java.util.ArrayList;
30 import java.util.List;
31 
32 /**
33  * Loader for recently searched queries.
34  */
35 public class SavedQueryLoader extends AsyncLoader<List<? extends SearchResult>> {
36 
37     // Max number of proposed suggestions
38     @VisibleForTesting
39     static final int MAX_PROPOSED_SUGGESTIONS = 5;
40 
41     private final SQLiteDatabase mDatabase;
42 
SavedQueryLoader(Context context)43     public SavedQueryLoader(Context context) {
44         super(context);
45         mDatabase = IndexDatabaseHelper.getInstance(context).getReadableDatabase();
46     }
47 
48     @Override
onDiscardResult(List<? extends SearchResult> result)49     protected void onDiscardResult(List<? extends SearchResult> result) {
50 
51     }
52 
53     @Override
loadInBackground()54     public List<? extends SearchResult> loadInBackground() {
55         try (final Cursor cursor = mDatabase.query(
56                 IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES /* table */,
57                 new String[]{SavedQueriesColumns.QUERY} /* columns */,
58                 null /* selection */,
59                 null /* selectionArgs */,
60                 null /* groupBy */,
61                 null /* having */,
62                 "rowId DESC" /* orderBy */,
63                 String.valueOf(MAX_PROPOSED_SUGGESTIONS) /* limit */)) {
64             return convertCursorToResult(cursor);
65         }
66     }
67 
convertCursorToResult(Cursor cursor)68     private List<SearchResult> convertCursorToResult(Cursor cursor) {
69         final List<SearchResult> results = new ArrayList<>();
70         while (cursor.moveToNext()) {
71             final SavedQueryPayload payload = new SavedQueryPayload(
72                     cursor.getString(cursor.getColumnIndex(SavedQueriesColumns.QUERY)));
73             results.add(new SearchResult.Builder()
74                     .setDataKey(payload.query)
75                     .setTitle(payload.query)
76                     .setPayload(payload)
77                     .build());
78         }
79         return results;
80     }
81 }
82