diff options
author | Jaikumar Ganesh <jaikumar@google.com> | 2010-09-27 17:02:23 -0700 |
---|---|---|
committer | Jaikumar Ganesh <jaikumar@google.com> | 2010-09-28 20:02:12 -0700 |
commit | 3f03496ad97b5f60ab432bca2d17a3e07b4ade47 (patch) | |
tree | 23eaeae5b07ad5cd38a908f354480567d7d0f63e | |
parent | 96a79830ea1ae3ab3d6d3cce2bd1397fcd40ea0e (diff) | |
download | frameworks_base-3f03496ad97b5f60ab432bca2d17a3e07b4ade47.zip frameworks_base-3f03496ad97b5f60ab432bca2d17a3e07b4ade47.tar.gz frameworks_base-3f03496ad97b5f60ab432bca2d17a3e07b4ade47.tar.bz2 |
Update code for new BT APIs.
Change-Id: I53aa17b6c2a5ee50d47df91960a7f997eb7b1107
-rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 8 | ||||
-rw-r--r-- | services/java/com/android/server/am/BatteryStatsService.java | 39 |
2 files changed, 42 insertions, 5 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 66149ac..8ea02aa 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -18,6 +18,7 @@ package com.android.internal.os; import com.android.internal.util.JournaledFile; +import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.net.TrafficStats; import android.os.BatteryManager; @@ -50,6 +51,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock; @@ -1150,7 +1152,11 @@ public final class BatteryStatsImpl extends BatteryStats { private int getCurrentBluetoothPingCount() { if (mBtHeadset != null) { - return mBtHeadset.getBatteryUsageHint(); + Set<BluetoothDevice> deviceSet = mBtHeadset.getConnectedDevices(); + BluetoothDevice[] devices = deviceSet.toArray(new BluetoothDevice[deviceSet.size()]); + if (devices.length > 0) { + return mBtHeadset.getBatteryUsageHint(devices[0]); + } } return -1; } diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java index 73a5435..0a98ebd 100644 --- a/services/java/com/android/server/am/BatteryStatsService.java +++ b/services/java/com/android/server/am/BatteryStatsService.java @@ -16,7 +16,9 @@ package com.android.server.am; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothHeadset; +import android.bluetooth.BluetoothProfile; import android.content.Context; import android.os.Binder; import android.os.IBinder; @@ -43,6 +45,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub { final BatteryStatsImpl mStats; Context mContext; + private boolean mBluetoothPendingStats; + private BluetoothHeadset mBluetoothHeadset; BatteryStatsService(String filename) { mStats = new BatteryStatsImpl(filename); @@ -283,16 +287,43 @@ public final class BatteryStatsService extends IBatteryStats.Stub { public void noteBluetoothOn() { enforceCallingPermission(); - BluetoothHeadset headset = new BluetoothHeadset(mContext, null); + BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); + if (adapter != null) { + adapter.getProfileProxy(mContext, mBluetoothProfileServiceListener, + BluetoothProfile.HEADSET); + } synchronized (mStats) { - mStats.noteBluetoothOnLocked(); - mStats.setBtHeadset(headset); + if (mBluetoothHeadset != null) { + mStats.noteBluetoothOnLocked(); + mStats.setBtHeadset(mBluetoothHeadset); + } else { + mBluetoothPendingStats = true; + } } } - + + private BluetoothProfile.ServiceListener mBluetoothProfileServiceListener = + new BluetoothProfile.ServiceListener() { + public void onServiceConnected(int profile, BluetoothProfile proxy) { + mBluetoothHeadset = (BluetoothHeadset) proxy; + synchronized (mStats) { + if (mBluetoothPendingStats) { + mStats.noteBluetoothOnLocked(); + mStats.setBtHeadset(mBluetoothHeadset); + mBluetoothPendingStats = false; + } + } + } + + public void onServiceDisconnected(int profile) { + mBluetoothHeadset = null; + } + }; + public void noteBluetoothOff() { enforceCallingPermission(); synchronized (mStats) { + mBluetoothPendingStats = false; mStats.noteBluetoothOffLocked(); } } |