10654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta/* 20654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * Copyright (C) 2011 The Android Open Source Project 30654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * 40654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * Licensed under the Apache License, Version 2.0 (the "License"); 50654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * you may not use this file except in compliance with the License. 60654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * You may obtain a copy of the License at 70654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * 80654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * http://www.apache.org/licenses/LICENSE-2.0 90654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * 100654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * Unless required by applicable law or agreed to in writing, software 110654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * distributed under the License is distributed on an "AS IS" BASIS, 120654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * See the License for the specific language governing permissions and 140654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta * limitations under the License. 150654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta */ 160654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 170654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battapackage com.android.settings.bluetooth; 180654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 190654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport android.bluetooth.BluetoothAdapter; 200654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport android.bluetooth.BluetoothClass; 210654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport android.bluetooth.BluetoothDevice; 220654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport android.bluetooth.BluetoothPbap; 230654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport android.bluetooth.BluetoothProfile; 240654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport android.content.Context; 250654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport android.util.Log; 260654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 270654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport com.android.settings.R; 280654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 290654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport java.util.HashMap; 300654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battaimport java.util.List; 310654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 320654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta/** 331490075dff65b31a20c630a9cbee8ce8233177aeAndy Stadler * PBAPServer Profile 340654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta */ 350654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Battafinal class PbapServerProfile implements LocalBluetoothProfile { 360654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta private static final String TAG = "PbapServerProfile"; 370654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta private static boolean V = true; 380654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 390654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta private BluetoothPbap mService; 400654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta private boolean mIsProfileReady; 410654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 420654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta static final String NAME = "PBAP Server"; 430654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 440654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta // Order of this profile in device profiles list 450654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta private static final int ORDINAL = 6; 460654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 470654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta // These callbacks run on the main thread. 480654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta private final class PbapServiceListener 490654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta implements BluetoothPbap.ServiceListener { 500654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 510654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public void onServiceConnected(BluetoothPbap proxy) { 520654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta if (V) Log.d(TAG,"Bluetooth service connected"); 530654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta mService = (BluetoothPbap) proxy; 540654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta mIsProfileReady=true; 550654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 560654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 570654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public void onServiceDisconnected() { 580654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta if (V) Log.d(TAG,"Bluetooth service disconnected"); 590654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta mIsProfileReady=false; 600654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 610654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 620654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 630654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public boolean isProfileReady() { 640654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return mIsProfileReady; 650654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 660654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 670654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta PbapServerProfile(Context context) { 680654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta BluetoothPbap pbap = new BluetoothPbap(context, new PbapServiceListener()); 690654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 700654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 710654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public boolean isConnectable() { 720654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return true; 730654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 740654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 750654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public boolean isAutoConnectable() { 760654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return false; 770654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 780654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 790654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public boolean connect(BluetoothDevice device) { 800654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta /*Can't connect from server */ 810654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return false; 820654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 830654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 840654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 850654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public boolean disconnect(BluetoothDevice device) { 860654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta if (mService == null) return false; 870654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return mService.disconnect(); 880654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 890654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 900654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public int getConnectionStatus(BluetoothDevice device) { 910654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta if (mService == null) { 920654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return BluetoothProfile.STATE_DISCONNECTED; 930654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 940654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta if (mService.isConnected(device)) 950654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return BluetoothProfile.STATE_CONNECTED; 960654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta else 970654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return BluetoothProfile.STATE_DISCONNECTED; 980654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 990654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1000654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public boolean isPreferred(BluetoothDevice device) { 1010654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return false; 1020654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1030654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1040654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public int getPreferred(BluetoothDevice device) { 1050654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return -1; 1060654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1070654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1080654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public void setPreferred(BluetoothDevice device, boolean preferred) { 1090654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta // ignore: isPreferred is always true for PBAP 1100654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1110654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1120654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public String toString() { 1130654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return NAME; 1140654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1150654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1160654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public int getOrdinal() { 1170654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return ORDINAL; 1180654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1190654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1200654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public int getNameResource(BluetoothDevice device) { 1210654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return 0; 1220654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1230654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1240654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public int getSummaryResourceForDevice(BluetoothDevice device) { 1250654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return 0; 1260654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1270654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta 1280654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta public int getDrawableResource(BluetoothClass btClass) { 1290654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta return 0; 1300654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1310654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta protected void finalize() { 1320654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta if (V) Log.d(TAG, "finalize()"); 1330654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta if (mService != null) { 1340654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta try { 1350654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta mService.close(); 1360654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta mService = null; 1370654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta }catch (Throwable t) { 1380654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta Log.w(TAG, "Error cleaning up PBAP proxy", t); 1390654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1400654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1410654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta } 1420654b71534411f4d93502f6ed8d8e864ef5b88efGanesh Ganapathi Batta} 143