1df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev/*
2df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * Copyright (C) 2016 The Android Open Source Project
3df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev *
4df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * Licensed under the Apache License, Version 2.0 (the "License");
5df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * you may not use this file except in compliance with the License.
6df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * You may obtain a copy of the License at
7df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev *
8df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev *      http://www.apache.org/licenses/LICENSE-2.0
9df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev *
10df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * Unless required by applicable law or agreed to in writing, software
11df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * distributed under the License is distributed on an "AS IS" BASIS,
12df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * See the License for the specific language governing permissions and
14df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * limitations under the License.
15df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev */
16df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
17df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevpackage com.android.car.cluster.sample;
18df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
19df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.content.Intent;
20df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.os.Binder;
21df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.os.Handler;
22df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.os.IBinder;
23df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.os.Message;
24df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.service.notification.NotificationListenerService;
25df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.service.notification.StatusBarNotification;
26df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevimport android.util.Log;
27df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
28df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev/**
29df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev * Listens to status bar notifications and passes it to the listener.
30df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev */
31df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsevpublic class StatusBarNotificationListener extends NotificationListenerService {
32df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
33df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    private static final String TAG = DebugUtil.getTag(StatusBarNotificationListener.class);
34df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
35df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    static final String ACTION_LOCAL_BINDING = "local_binding";
36df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
37df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    private Handler mHandler;
38df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
39df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    @Override
40df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    public void onNotificationPosted(StatusBarNotification sbn) {
41df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev        if (MessagingConverter.canConvert(sbn) && mHandler != null) {
42df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev            Message msg = Message.obtain(mHandler);
43df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev            msg.obj = sbn;
44df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev            mHandler.sendMessage(msg);
45df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev        }
46df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    }
47df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
48df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    @Override
49df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    public IBinder onBind(Intent intent) {
50df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev        Log.d(TAG, "onBind, intent:" + intent);
51df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
52df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev        return ACTION_LOCAL_BINDING.equals(intent.getAction())
53df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev                ? new LocalBinder() : super.onBind(intent);
54df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    }
55df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
56df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    public void setHandler(Handler handler) {
57df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev        mHandler = handler;
58df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    }
59df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev
60df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    public class LocalBinder extends Binder {
61df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev        public StatusBarNotificationListener getService() {
62df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev            return StatusBarNotificationListener.this;
63df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev        }
64df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev    }
65df4db1d3efb85be01f0973067c9e104b5f93f205Pavel Maltsev}
66