• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2011 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.android.settings.bluetooth;
18  
19  import android.bluetooth.BluetoothClass;
20  import android.bluetooth.BluetoothDevice;
21  import android.bluetooth.BluetoothInputDevice;
22  import android.bluetooth.BluetoothProfile;
23  import android.content.Context;
24  
25  import com.android.settings.R;
26  
27  import java.util.List;
28  
29  /**
30   * HidProfile handles Bluetooth HID profile.
31   */
32  final class HidProfile implements LocalBluetoothProfile {
33      private BluetoothInputDevice mService;
34      private boolean mProfileReady;
35  
36      static final String NAME = "HID";
37  
38      // Order of this profile in device profiles list
39      private static final int ORDINAL = 3;
40  
41      // These callbacks run on the main thread.
42      private final class InputDeviceServiceListener
43              implements BluetoothProfile.ServiceListener {
44  
onServiceConnected(int profile, BluetoothProfile proxy)45          public void onServiceConnected(int profile, BluetoothProfile proxy) {
46              mService = (BluetoothInputDevice) proxy;
47              mProfileReady = true;
48          }
49  
onServiceDisconnected(int profile)50          public void onServiceDisconnected(int profile) {
51              mProfileReady = false;
52              mService = null;
53          }
54      }
55  
HidProfile(Context context, LocalBluetoothAdapter adapter)56      HidProfile(Context context, LocalBluetoothAdapter adapter) {
57          adapter.getProfileProxy(context, new InputDeviceServiceListener(),
58                  BluetoothProfile.INPUT_DEVICE);
59      }
60  
isConnectable()61      public boolean isConnectable() {
62          return true;
63      }
64  
isAutoConnectable()65      public boolean isAutoConnectable() {
66          return true;
67      }
68  
connect(BluetoothDevice device)69      public boolean connect(BluetoothDevice device) {
70          return mService.connect(device);
71      }
72  
disconnect(BluetoothDevice device)73      public boolean disconnect(BluetoothDevice device) {
74          return mService.disconnect(device);
75      }
76  
getConnectionStatus(BluetoothDevice device)77      public int getConnectionStatus(BluetoothDevice device) {
78          List<BluetoothDevice> deviceList = mService.getConnectedDevices();
79  
80          return !deviceList.isEmpty() && deviceList.get(0).equals(device)
81                  ? mService.getConnectionState(device)
82                  : BluetoothProfile.STATE_DISCONNECTED;
83      }
84  
isPreferred(BluetoothDevice device)85      public boolean isPreferred(BluetoothDevice device) {
86          return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF;
87      }
88  
getPreferred(BluetoothDevice device)89      public int getPreferred(BluetoothDevice device) {
90          return mService.getPriority(device);
91      }
92  
setPreferred(BluetoothDevice device, boolean preferred)93      public void setPreferred(BluetoothDevice device, boolean preferred) {
94          if (preferred) {
95              if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) {
96                  mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
97              }
98          } else {
99              mService.setPriority(device, BluetoothProfile.PRIORITY_OFF);
100          }
101      }
102  
isProfileReady()103      public boolean isProfileReady() {
104          return mProfileReady;
105      }
106  
toString()107      public String toString() {
108          return NAME;
109      }
110  
getOrdinal()111      public int getOrdinal() {
112          return ORDINAL;
113      }
114  
getNameResource(BluetoothDevice device)115      public int getNameResource(BluetoothDevice device) {
116          // TODO: distinguish between keyboard and mouse?
117          return R.string.bluetooth_profile_hid;
118      }
119  
getSummaryResourceForDevice(BluetoothDevice device)120      public int getSummaryResourceForDevice(BluetoothDevice device) {
121          int state = mService.getConnectionState(device);
122          switch (state) {
123              case BluetoothProfile.STATE_DISCONNECTED:
124                  return R.string.bluetooth_hid_profile_summary_use_for;
125  
126              case BluetoothProfile.STATE_CONNECTED:
127                  return R.string.bluetooth_hid_profile_summary_connected;
128  
129              default:
130                  return Utils.getConnectionStateSummary(state);
131          }
132      }
133  
getDrawableResource(BluetoothClass btClass)134      public int getDrawableResource(BluetoothClass btClass) {
135          if (btClass == null) {
136              return R.drawable.ic_bt_keyboard_hid;
137          }
138          return getHidClassDrawable(btClass);
139      }
140  
getHidClassDrawable(BluetoothClass btClass)141      static int getHidClassDrawable(BluetoothClass btClass) {
142          switch (btClass.getDeviceClass()) {
143              case BluetoothClass.Device.PERIPHERAL_KEYBOARD:
144              case BluetoothClass.Device.PERIPHERAL_KEYBOARD_POINTING:
145                  return R.drawable.ic_bt_keyboard_hid;
146              case BluetoothClass.Device.PERIPHERAL_POINTING:
147                  return R.drawable.ic_bt_pointing_hid;
148              default:
149                  return R.drawable.ic_bt_misc_hid;
150          }
151      }
152  }
153