1 /* 2 * Copyright (C) 2022 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.server.nearby.fastpair.halfsheet; 18 19 import static com.android.server.nearby.fastpair.Constant.TAG; 20 21 import android.nearby.FastPairDevice; 22 import android.nearby.FastPairStatusCallback; 23 import android.nearby.PairStatusMetadata; 24 import android.nearby.aidl.IFastPairStatusCallback; 25 import android.nearby.aidl.IFastPairUiService; 26 import android.os.IBinder; 27 import android.os.RemoteException; 28 import android.util.Log; 29 30 import com.android.internal.annotations.VisibleForTesting; 31 import com.android.server.nearby.fastpair.FastPairController; 32 33 /** 34 * Service implementing Fast Pair functionality. 35 * 36 * @hide 37 */ 38 public class FastPairUiServiceImpl extends IFastPairUiService.Stub { 39 40 private IBinder mStatusCallbackProxy; 41 private FastPairController mFastPairController; 42 private FastPairStatusCallback mFastPairStatusCallback; 43 44 /** 45 * Registers the Binder call back in the server notifies the proxy when there is an update 46 * in the server. 47 */ 48 @Override registerCallback(IFastPairStatusCallback iFastPairStatusCallback)49 public void registerCallback(IFastPairStatusCallback iFastPairStatusCallback) { 50 mStatusCallbackProxy = iFastPairStatusCallback.asBinder(); 51 mFastPairStatusCallback = new FastPairStatusCallback() { 52 @Override 53 public void onPairUpdate(FastPairDevice fastPairDevice, 54 PairStatusMetadata pairStatusMetadata) { 55 try { 56 iFastPairStatusCallback.onPairUpdate(fastPairDevice, pairStatusMetadata); 57 } catch (RemoteException e) { 58 Log.w(TAG, "Failed to update pair status.", e); 59 } 60 } 61 }; 62 } 63 64 /** 65 * Unregisters the Binder call back in the server. 66 */ 67 @Override unregisterCallback(IFastPairStatusCallback iFastPairStatusCallback)68 public void unregisterCallback(IFastPairStatusCallback iFastPairStatusCallback) { 69 mStatusCallbackProxy = null; 70 mFastPairStatusCallback = null; 71 } 72 73 /** 74 * Asks the Fast Pair service to pair the device. initial pairing. 75 */ 76 @Override connect(FastPairDevice fastPairDevice)77 public void connect(FastPairDevice fastPairDevice) { 78 if (mFastPairController != null) { 79 mFastPairController.pair(fastPairDevice); 80 } else { 81 Log.w(TAG, "Failed to connect because there is no FastPairController."); 82 } 83 } 84 85 /** 86 * Cancels Fast Pair connection and dismisses half sheet. 87 */ 88 @Override cancel(FastPairDevice fastPairDevice)89 public void cancel(FastPairDevice fastPairDevice) { 90 } 91 getPairStatusCallback()92 public FastPairStatusCallback getPairStatusCallback() { 93 return mFastPairStatusCallback; 94 } 95 96 /** 97 * Sets fastPairStatusCallback. 98 */ 99 @VisibleForTesting setFastPairStatusCallback(FastPairStatusCallback fastPairStatusCallback)100 public void setFastPairStatusCallback(FastPairStatusCallback fastPairStatusCallback) { 101 mFastPairStatusCallback = fastPairStatusCallback; 102 } 103 104 /** 105 * Sets function for Fast Pair controller. 106 */ setFastPairController(FastPairController fastPairController)107 public void setFastPairController(FastPairController fastPairController) { 108 mFastPairController = fastPairController; 109 } 110 } 111