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