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