Loading android/app/src/com/android/bluetooth/hfpclient/HeadsetClientService.java +56 −81 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; Loading @@ -80,19 +79,18 @@ public class HeadsetClientService extends ProfileService { new HashMap<>(); private static HeadsetClientService sHeadsetClientService; private NativeInterface mNativeInterface = null; private HandlerThread mSmThread = null; private HeadsetClientStateMachineFactory mSmFactory = null; private final HandlerThread mSmThread; private final AdapterService mAdapterService; private final DatabaseManager mDatabaseManager; private final AudioManager mAudioManager; private BatteryManager mBatteryManager = null; private int mLastBatteryLevel = -1; private final NativeInterface mNativeInterface; private final BatteryManager mBatteryManager; private final HeadsetClientStateMachineFactory mSmFactory; private final int mMaxAmVcVol; private final int mMinAmVcVol; private final Object mStartStopLock = new Object(); private int mLastBatteryLevel = -1; public static final String HFP_CLIENT_STOP_TAG = "hfp_client_stop_tag"; Loading @@ -103,24 +101,6 @@ public class HeadsetClientService extends ProfileService { mAudioManager = requireNonNull(getSystemService(AudioManager.class)); mMaxAmVcVol = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); mMinAmVcVol = mAudioManager.getStreamMinVolume(AudioManager.STREAM_VOICE_CALL); } public static boolean isEnabled() { return BluetoothProperties.isProfileHfpHfEnabled().orElse(false); } @Override public IProfileServiceBinder initBinder() { return new BluetoothHeadsetClientBinder(this); } @Override public void start() { synchronized (mStartStopLock) { Log.d(TAG, "start()"); if (getHeadsetClientService() != null) { throw new IllegalStateException("start() called twice"); } // Setup the JNI service mNativeInterface = NativeInterface.getInstance(); Loading @@ -143,8 +123,7 @@ public class HeadsetClientService extends ProfileService { // Start the HfpClientConnectionService to create connection with telecom when HFP // connection is available on non-wearable device. if (getPackageManager() != null && !getPackageManager().hasSystemFeature(FEATURE_WATCH)) { if (getPackageManager() != null && !getPackageManager().hasSystemFeature(FEATURE_WATCH)) { Intent startIntent = new Intent(this, HfpClientConnectionService.class); startService(startIntent); } Loading @@ -155,11 +134,18 @@ public class HeadsetClientService extends ProfileService { setHeadsetClientService(this); } public static boolean isEnabled() { return BluetoothProperties.isProfileHfpHfEnabled().orElse(false); } @Override public IProfileServiceBinder initBinder() { return new BluetoothHeadsetClientBinder(this); } @Override public void stop() { synchronized (mStartStopLock) { synchronized (HeadsetClientService.class) { if (sHeadsetClientService == null) { Log.w(TAG, "stop() called without start()"); Loading @@ -179,23 +165,16 @@ public class HeadsetClientService extends ProfileService { unregisterReceiver(mBroadcastReceiver); synchronized (mStateMachineMap) { for (Iterator<Map.Entry<BluetoothDevice, HeadsetClientStateMachine>> it = mStateMachineMap.entrySet().iterator(); it.hasNext(); ) { HeadsetClientStateMachine sm = mStateMachineMap.get((BluetoothDevice) it.next().getKey()); for (HeadsetClientStateMachine sm : mStateMachineMap.values()) { sm.doQuit(); it.remove(); } mStateMachineMap.clear(); } // Stop the handler thread mSmThread.quit(); mSmThread = null; mNativeInterface.cleanup(); mNativeInterface = null; } } int hfToAmVol(int hfVol) { Loading Loading @@ -1365,10 +1344,6 @@ public class HeadsetClientService extends ProfileService { } } protected void setSMFactory(HeadsetClientStateMachineFactory factory) { mSmFactory = factory; } protected AudioManager getAudioManager() { return mAudioManager; } Loading android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceTest.java +8 −11 Original line number Diff line number Diff line Loading @@ -68,23 +68,23 @@ import java.util.concurrent.TimeUnit; @MediumTest @RunWith(AndroidJUnit4.class) public class HeadsetClientServiceTest { private HeadsetClientService mService = null; private boolean mIsHeadsetClientServiceStarted; private static final int STANDARD_WAIT_MILLIS = 1000; private static final int SERVICE_START_WAIT_MILLIS = 100; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Mock private AdapterService mAdapterService; private AudioManager mMockAudioManager; @Mock private HeadsetClientStateMachine mStateMachine; @Mock private NativeInterface mNativeInterface; @Mock private DatabaseManager mDatabaseManager; @Mock private RemoteDevices mRemoteDevices; private HeadsetClientService mService; private boolean mIsHeadsetClientServiceStarted; private static final int STANDARD_WAIT_MILLIS = 1000; private static final int SERVICE_START_WAIT_MILLIS = 100; private AudioManager mMockAudioManager; <T> T mockGetSystemService(String serviceName, Class<T> serviceClass) { return TestUtils.mockGetSystemService(mAdapterService, serviceName, serviceClass); } Loading Loading @@ -183,7 +183,6 @@ public class HeadsetClientServiceTest { doReturn(packageManager).when(mAdapterService).getPackageManager(); HeadsetClientService service = new HeadsetClientService(mAdapterService); service.start(); verify(mAdapterService).startService(any(Intent.class)); Loading @@ -198,7 +197,6 @@ public class HeadsetClientServiceTest { doReturn(packageManager).when(mAdapterService).getPackageManager(); HeadsetClientService service = new HeadsetClientService(mAdapterService); service.start(); verify(mAdapterService, never()).startService(any(Intent.class)); Loading Loading @@ -267,7 +265,6 @@ public class HeadsetClientServiceTest { private void startService() throws Exception { mService = new HeadsetClientService(mAdapterService); mService.start(); mService.setAvailable(true); mIsHeadsetClientServiceStarted = true; } Loading Loading
android/app/src/com/android/bluetooth/hfpclient/HeadsetClientService.java +56 −81 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; Loading @@ -80,19 +79,18 @@ public class HeadsetClientService extends ProfileService { new HashMap<>(); private static HeadsetClientService sHeadsetClientService; private NativeInterface mNativeInterface = null; private HandlerThread mSmThread = null; private HeadsetClientStateMachineFactory mSmFactory = null; private final HandlerThread mSmThread; private final AdapterService mAdapterService; private final DatabaseManager mDatabaseManager; private final AudioManager mAudioManager; private BatteryManager mBatteryManager = null; private int mLastBatteryLevel = -1; private final NativeInterface mNativeInterface; private final BatteryManager mBatteryManager; private final HeadsetClientStateMachineFactory mSmFactory; private final int mMaxAmVcVol; private final int mMinAmVcVol; private final Object mStartStopLock = new Object(); private int mLastBatteryLevel = -1; public static final String HFP_CLIENT_STOP_TAG = "hfp_client_stop_tag"; Loading @@ -103,24 +101,6 @@ public class HeadsetClientService extends ProfileService { mAudioManager = requireNonNull(getSystemService(AudioManager.class)); mMaxAmVcVol = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); mMinAmVcVol = mAudioManager.getStreamMinVolume(AudioManager.STREAM_VOICE_CALL); } public static boolean isEnabled() { return BluetoothProperties.isProfileHfpHfEnabled().orElse(false); } @Override public IProfileServiceBinder initBinder() { return new BluetoothHeadsetClientBinder(this); } @Override public void start() { synchronized (mStartStopLock) { Log.d(TAG, "start()"); if (getHeadsetClientService() != null) { throw new IllegalStateException("start() called twice"); } // Setup the JNI service mNativeInterface = NativeInterface.getInstance(); Loading @@ -143,8 +123,7 @@ public class HeadsetClientService extends ProfileService { // Start the HfpClientConnectionService to create connection with telecom when HFP // connection is available on non-wearable device. if (getPackageManager() != null && !getPackageManager().hasSystemFeature(FEATURE_WATCH)) { if (getPackageManager() != null && !getPackageManager().hasSystemFeature(FEATURE_WATCH)) { Intent startIntent = new Intent(this, HfpClientConnectionService.class); startService(startIntent); } Loading @@ -155,11 +134,18 @@ public class HeadsetClientService extends ProfileService { setHeadsetClientService(this); } public static boolean isEnabled() { return BluetoothProperties.isProfileHfpHfEnabled().orElse(false); } @Override public IProfileServiceBinder initBinder() { return new BluetoothHeadsetClientBinder(this); } @Override public void stop() { synchronized (mStartStopLock) { synchronized (HeadsetClientService.class) { if (sHeadsetClientService == null) { Log.w(TAG, "stop() called without start()"); Loading @@ -179,23 +165,16 @@ public class HeadsetClientService extends ProfileService { unregisterReceiver(mBroadcastReceiver); synchronized (mStateMachineMap) { for (Iterator<Map.Entry<BluetoothDevice, HeadsetClientStateMachine>> it = mStateMachineMap.entrySet().iterator(); it.hasNext(); ) { HeadsetClientStateMachine sm = mStateMachineMap.get((BluetoothDevice) it.next().getKey()); for (HeadsetClientStateMachine sm : mStateMachineMap.values()) { sm.doQuit(); it.remove(); } mStateMachineMap.clear(); } // Stop the handler thread mSmThread.quit(); mSmThread = null; mNativeInterface.cleanup(); mNativeInterface = null; } } int hfToAmVol(int hfVol) { Loading Loading @@ -1365,10 +1344,6 @@ public class HeadsetClientService extends ProfileService { } } protected void setSMFactory(HeadsetClientStateMachineFactory factory) { mSmFactory = factory; } protected AudioManager getAudioManager() { return mAudioManager; } Loading
android/app/tests/unit/src/com/android/bluetooth/hfpclient/HeadsetClientServiceTest.java +8 −11 Original line number Diff line number Diff line Loading @@ -68,23 +68,23 @@ import java.util.concurrent.TimeUnit; @MediumTest @RunWith(AndroidJUnit4.class) public class HeadsetClientServiceTest { private HeadsetClientService mService = null; private boolean mIsHeadsetClientServiceStarted; private static final int STANDARD_WAIT_MILLIS = 1000; private static final int SERVICE_START_WAIT_MILLIS = 100; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Mock private AdapterService mAdapterService; private AudioManager mMockAudioManager; @Mock private HeadsetClientStateMachine mStateMachine; @Mock private NativeInterface mNativeInterface; @Mock private DatabaseManager mDatabaseManager; @Mock private RemoteDevices mRemoteDevices; private HeadsetClientService mService; private boolean mIsHeadsetClientServiceStarted; private static final int STANDARD_WAIT_MILLIS = 1000; private static final int SERVICE_START_WAIT_MILLIS = 100; private AudioManager mMockAudioManager; <T> T mockGetSystemService(String serviceName, Class<T> serviceClass) { return TestUtils.mockGetSystemService(mAdapterService, serviceName, serviceClass); } Loading Loading @@ -183,7 +183,6 @@ public class HeadsetClientServiceTest { doReturn(packageManager).when(mAdapterService).getPackageManager(); HeadsetClientService service = new HeadsetClientService(mAdapterService); service.start(); verify(mAdapterService).startService(any(Intent.class)); Loading @@ -198,7 +197,6 @@ public class HeadsetClientServiceTest { doReturn(packageManager).when(mAdapterService).getPackageManager(); HeadsetClientService service = new HeadsetClientService(mAdapterService); service.start(); verify(mAdapterService, never()).startService(any(Intent.class)); Loading Loading @@ -267,7 +265,6 @@ public class HeadsetClientServiceTest { private void startService() throws Exception { mService = new HeadsetClientService(mAdapterService); mService.start(); mService.setAvailable(true); mIsHeadsetClientServiceStarted = true; } Loading