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