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.util; 18 19 import androidx.annotation.NonNull; 20 import androidx.annotation.Nullable; 21 22 import service.proto.Cache.ScanFastPairStoreItem; 23 import service.proto.Cache.StoredDiscoveryItem; 24 import service.proto.FastPairString.FastPairStrings; 25 import service.proto.Rpcs.Device; 26 import service.proto.Rpcs.GetObservedDeviceResponse; 27 import service.proto.Rpcs.ObservedDeviceStrings; 28 29 /** 30 * Utils class converts different data types {@link ScanFastPairStoreItem}, 31 * {@link StoredDiscoveryItem} and {@link GetObservedDeviceResponse}, 32 * 33 */ 34 public final class DataUtils { 35 36 /** 37 * Converts a {@link GetObservedDeviceResponse} to a {@link ScanFastPairStoreItem}. 38 */ toScanFastPairStoreItem( GetObservedDeviceResponse observedDeviceResponse, @NonNull String bleAddress, @Nullable String account)39 public static ScanFastPairStoreItem toScanFastPairStoreItem( 40 GetObservedDeviceResponse observedDeviceResponse, 41 @NonNull String bleAddress, @Nullable String account) { 42 Device device = observedDeviceResponse.getDevice(); 43 String deviceName = device.getName(); 44 return ScanFastPairStoreItem.newBuilder() 45 .setAddress(bleAddress) 46 .setActionUrl(device.getIntentUri()) 47 .setDeviceName(deviceName) 48 .setIconPng(observedDeviceResponse.getImage()) 49 .setIconFifeUrl(device.getImageUrl()) 50 .setAntiSpoofingPublicKey(device.getAntiSpoofingKeyPair().getPublicKey()) 51 .setFastPairStrings(getFastPairStrings(observedDeviceResponse, deviceName, account)) 52 .build(); 53 } 54 55 /** 56 * Prints readable string for a {@link ScanFastPairStoreItem}. 57 */ toString(ScanFastPairStoreItem item)58 public static String toString(ScanFastPairStoreItem item) { 59 return "ScanFastPairStoreItem=[address:" + item.getAddress() 60 + ", actionUr:" + item.getActionUrl() 61 + ", deviceName:" + item.getDeviceName() 62 + ", iconPng:" + item.getIconPng() 63 + ", iconFifeUrl:" + item.getIconFifeUrl() 64 + ", antiSpoofingKeyPair:" + item.getAntiSpoofingPublicKey() 65 + ", fastPairStrings:" + toString(item.getFastPairStrings()) 66 + "]"; 67 } 68 69 /** 70 * Prints readable string for a {@link FastPairStrings} 71 */ toString(FastPairStrings fastPairStrings)72 public static String toString(FastPairStrings fastPairStrings) { 73 return "FastPairStrings[" 74 + "tapToPairWithAccount=" + fastPairStrings.getTapToPairWithAccount() 75 + ", tapToPairWithoutAccount=" + fastPairStrings.getTapToPairWithoutAccount() 76 + ", initialPairingDescription=" + fastPairStrings.getInitialPairingDescription() 77 + ", pairingFinishedCompanionAppInstalled=" 78 + fastPairStrings.getPairingFinishedCompanionAppInstalled() 79 + ", pairingFinishedCompanionAppNotInstalled=" 80 + fastPairStrings.getPairingFinishedCompanionAppNotInstalled() 81 + ", subsequentPairingDescription=" 82 + fastPairStrings.getSubsequentPairingDescription() 83 + ", retroactivePairingDescription=" 84 + fastPairStrings.getRetroactivePairingDescription() 85 + ", waitAppLaunchDescription=" + fastPairStrings.getWaitAppLaunchDescription() 86 + ", pairingFailDescription=" + fastPairStrings.getPairingFailDescription() 87 + "]"; 88 } 89 getFastPairStrings(GetObservedDeviceResponse response, String deviceName, @Nullable String account)90 private static FastPairStrings getFastPairStrings(GetObservedDeviceResponse response, 91 String deviceName, @Nullable String account) { 92 ObservedDeviceStrings strings = response.getStrings(); 93 return FastPairStrings.newBuilder() 94 .setTapToPairWithAccount(strings.getInitialNotificationDescription()) 95 .setTapToPairWithoutAccount( 96 strings.getInitialNotificationDescriptionNoAccount()) 97 .setInitialPairingDescription(account == null 98 ? strings.getInitialNotificationDescriptionNoAccount() 99 : String.format(strings.getInitialPairingDescription(), 100 deviceName, account)) 101 .setPairingFinishedCompanionAppInstalled( 102 strings.getConnectSuccessCompanionAppInstalled()) 103 .setPairingFinishedCompanionAppNotInstalled( 104 strings.getConnectSuccessCompanionAppNotInstalled()) 105 .setSubsequentPairingDescription(strings.getSubsequentPairingDescription()) 106 .setRetroactivePairingDescription(strings.getRetroactivePairingDescription()) 107 .setWaitAppLaunchDescription(strings.getWaitLaunchCompanionAppDescription()) 108 .setPairingFailDescription(strings.getFailConnectGoToSettingsDescription()) 109 .build(); 110 } 111 } 112