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; 20aee097c5802adcd3d52028fbd1ad3ab2cf92e46bWinson Chungimport android.appwidget.AppWidgetHostView; 21d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungimport android.appwidget.AppWidgetProviderInfo; 22d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungimport android.content.Context; 23d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 24d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung/** Our special app widget host for the Search widget */ 25d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chungpublic class RecentsAppWidgetHost extends AppWidgetHost { 26d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 27d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung /* Callbacks to notify when an app package changes */ 28d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung interface RecentsAppWidgetHostCallbacks { 29af3bb6936786a8c14ac01da3d81d196d17b68b96Winson Chung void refreshSearchWidgetView(); 30d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 31d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 32d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung RecentsAppWidgetHostCallbacks mCb; 3385cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung boolean mIsListening; 34d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 35d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung public RecentsAppWidgetHost(Context context, int hostId) { 36d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung super(context, hostId); 37d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 38d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 39d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung public void startListening(RecentsAppWidgetHostCallbacks cb) { 40d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mCb = cb; 41740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung if (!mIsListening) { 42740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung mIsListening = true; 43740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung super.startListening(); 44740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung } 45d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 46d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung 47d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung @Override 48d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung public void stopListening() { 49740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung if (mIsListening) { 50740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung super.stopListening(); 51740c3ac782675d190941b2ab1905e56f246c1b11Winson Chung } 52d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung // Ensure that we release any references to the callbacks 53d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung mCb = null; 5485cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung mIsListening = false; 5585cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung } 5685cfec811e35025dbde54f4dc09fe0e1337c36b8Winson Chung 57d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung @Override 58aee097c5802adcd3d52028fbd1ad3ab2cf92e46bWinson Chung protected AppWidgetHostView onCreateView(Context context, int appWidgetId, 59aee097c5802adcd3d52028fbd1ad3ab2cf92e46bWinson Chung AppWidgetProviderInfo appWidget) { 60aee097c5802adcd3d52028fbd1ad3ab2cf92e46bWinson Chung return new RecentsAppWidgetHostView(context); 61aee097c5802adcd3d52028fbd1ad3ab2cf92e46bWinson Chung } 62aee097c5802adcd3d52028fbd1ad3ab2cf92e46bWinson Chung 63af3bb6936786a8c14ac01da3d81d196d17b68b96Winson Chung /** 64af3bb6936786a8c14ac01da3d81d196d17b68b96Winson Chung * Note: this is only called for packages that have updated, not removed. 65af3bb6936786a8c14ac01da3d81d196d17b68b96Winson Chung */ 66aee097c5802adcd3d52028fbd1ad3ab2cf92e46bWinson Chung @Override 67d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung protected void onProviderChanged(int appWidgetId, AppWidgetProviderInfo appWidgetInfo) { 68af3bb6936786a8c14ac01da3d81d196d17b68b96Winson Chung super.onProviderChanged(appWidgetId, appWidgetInfo); 69af3bb6936786a8c14ac01da3d81d196d17b68b96Winson Chung if (mIsListening && mCb != null) { 70af3bb6936786a8c14ac01da3d81d196d17b68b96Winson Chung mCb.refreshSearchWidgetView(); 71d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 72d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung } 73d543c1bea4d227470f5b6d6535b70e5090064c9aWinson Chung} 74