1d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung/* 2d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * Copyright (C) 2014 The Android Open Source Project 3d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * 4d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * Licensed under the Apache License, Version 2.0 (the "License"); 5d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * you may not use this file except in compliance with the License. 6d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * You may obtain a copy of the License at 7d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * 8d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * http://www.apache.org/licenses/LICENSE-2.0 9d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * 10d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * Unless required by applicable law or agreed to in writing, software 11d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * distributed under the License is distributed on an "AS IS" BASIS, 12d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * See the License for the specific language governing permissions and 14d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung * limitations under the License. 15d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung */ 16d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 17d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungpackage com.android.systemui.recents; 18d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 19d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungimport android.appwidget.AppWidgetHost; 20d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungimport android.appwidget.AppWidgetProviderInfo; 21d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungimport android.content.Context; 22ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chungimport com.android.systemui.recents.misc.SystemServicesProxy; 23f1fbd77cf057e43926f9a0347692611386d09f40Winson Chungimport com.android.systemui.recents.model.RecentsTaskLoader; 24d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 25d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung/** Our special app widget host for the Search widget */ 26d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungpublic class RecentsAppWidgetHost extends AppWidgetHost { 27d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 28d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung /* Callbacks to notify when an app package changes */ 29d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung interface RecentsAppWidgetHostCallbacks { 30d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung public void refreshSearchWidget(); 31d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 32d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 33d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung Context mContext; 34d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung RecentsAppWidgetHostCallbacks mCb; 35d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung RecentsConfiguration mConfig; 3685cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung boolean mIsListening; 37d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 38d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung public RecentsAppWidgetHost(Context context, int hostId) { 39d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung super(context, hostId); 40d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mContext = context; 41d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mConfig = RecentsConfiguration.getInstance(); 42d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 43d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 44d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung public void startListening(RecentsAppWidgetHostCallbacks cb) { 45d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mCb = cb; 46740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung if (!mIsListening) { 47740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung mIsListening = true; 48740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung super.startListening(); 49740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung } 50d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 51d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 52d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung @Override 53d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung public void stopListening() { 54740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung if (mIsListening) { 55740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung super.stopListening(); 56740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung } 57d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung // Ensure that we release any references to the callbacks 58d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mCb = null; 59d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mContext = null; 6085cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung mIsListening = false; 6185cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung } 6285cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung 63d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung @Override 64d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung protected void onProviderChanged(int appWidgetId, AppWidgetProviderInfo appWidgetInfo) { 65d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung if (mCb == null) return; 66d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 67d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung SystemServicesProxy ssp = RecentsTaskLoader.getInstance().getSystemServicesProxy(); 68d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung if (appWidgetId > -1 && appWidgetId == mConfig.searchBarAppWidgetId) { 69d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung // The search provider may have changed, so just delete the old widget and bind it again 70d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung ssp.unbindSearchAppWidget(this, appWidgetId); 71d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung // Update the search widget 72d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mConfig.updateSearchBarAppWidgetId(mContext, -1); 73d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mCb.refreshSearchWidget(); 74d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 75d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 76d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung} 77