1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/*
2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project
3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License.
6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at
7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software
11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and
14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License.
15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.util;
18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.app.SearchManager;
20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Context;
2107b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalkoimport android.os.Build;
22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Bundle;
23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.UserHandle;
24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.util.Log;
25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.lang.reflect.InvocationTargetException;
27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/**
29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * A convenience class for calling methods in android.app.SearchManager.
30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic final class SearchManagerHelper {
32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final String TAG = "SearchManagerHelper";
33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final Object sLock = new Object();
35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static SearchManagerHelper sInstance;
36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final SearchManager mSearchManager;
38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private SearchManagerHelper(Context context) {
40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mSearchManager = ((android.app.SearchManager) context.getSystemService(
41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                Context.SEARCH_SERVICE));
42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static SearchManagerHelper getInstance(Context context) {
45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        synchronized (sLock) {
46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (sInstance == null) {
47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                sInstance = new SearchManagerHelper(context.getApplicationContext());
48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return sInstance;
50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
5307b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko    public void launchAssistAction() {
54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        try {
55ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
5607b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                SearchManager.class.getDeclaredMethod(
57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                        "launchLegacyAssist", String.class, Integer.TYPE, Bundle.class).invoke(
58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                                mSearchManager, null, UserHandle.myUserId(), null);
59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            } else {
6007b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                SearchManager.class.getDeclaredMethod(
61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                        "launchAssistAction", Integer.TYPE, String.class, Integer.TYPE).invoke(
62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                                mSearchManager, 0, null, UserHandle.myUserId());
63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }  catch (NoSuchMethodException | IllegalArgumentException | IllegalAccessException
65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                | InvocationTargetException e) {
66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            Log.e(TAG, "Fail to call SearchManager.launchAssistAction", e);
67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko}
70