/* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.bluetooth.hfp; import android.bluetooth.BluetoothDevice; import android.os.Looper; import android.util.Log; import com.android.bluetooth.Utils; import com.android.bluetooth.btservice.AdapterService; /** * Factory class for object initialization to help with unit testing */ public class HeadsetObjectsFactory { private static final String TAG = HeadsetObjectsFactory.class.getSimpleName(); private static HeadsetObjectsFactory sInstance; private static final Object INSTANCE_LOCK = new Object(); private HeadsetObjectsFactory() {} /** * Get the singleton instance of object factory * * @return the singleton instance, guaranteed not null */ public static HeadsetObjectsFactory getInstance() { synchronized (INSTANCE_LOCK) { if (sInstance == null) { sInstance = new HeadsetObjectsFactory(); } } return sInstance; } /** * Allow unit tests to substitute HeadsetObjectsFactory with a test instance * * @param objectsFactory a test instance of the HeadsetObjectsFactory */ private static void setInstanceForTesting(HeadsetObjectsFactory objectsFactory) { Utils.enforceInstrumentationTestMode(); synchronized (INSTANCE_LOCK) { Log.d(TAG, "setInstanceForTesting(), set to " + objectsFactory); sInstance = objectsFactory; } } /** * Make a {@link HeadsetStateMachine} * * @param device the remote device associated with this state machine * @param looper the thread that the state machine is supposed to run on * @param headsetService the headset service * @param adapterService the adapter service * @param nativeInterface native interface * @param systemInterface system interface * @return a state machine that is initialized and started, ready to go */ public HeadsetStateMachine makeStateMachine(BluetoothDevice device, Looper looper, HeadsetService headsetService, AdapterService adapterService, HeadsetNativeInterface nativeInterface, HeadsetSystemInterface systemInterface) { return HeadsetStateMachine.make(device, looper, headsetService, adapterService, nativeInterface, systemInterface); } /** * Destroy a state machine * * @param stateMachine to be destroyed. Cannot be used after this call. */ public void destroyStateMachine(HeadsetStateMachine stateMachine) { HeadsetStateMachine.destroy(stateMachine); } /** * Get a system interface * * @param service headset service * @return a system interface */ public HeadsetSystemInterface makeSystemInterface(HeadsetService service) { return new HeadsetSystemInterface(service); } /** * Get a singleton native interface * * @return the singleton native interface */ public HeadsetNativeInterface getNativeInterface() { return HeadsetNativeInterface.getInstance(); } }