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, @NonNull String modelId, @Nullable String account)39 public static ScanFastPairStoreItem toScanFastPairStoreItem( 40 GetObservedDeviceResponse observedDeviceResponse, 41 @NonNull String bleAddress, @NonNull String modelId, @Nullable String account) { 42 Device device = observedDeviceResponse.getDevice(); 43 String deviceName = device.getName(); 44 return ScanFastPairStoreItem.newBuilder() 45 .setAddress(bleAddress) 46 .setModelId(modelId) 47 .setActionUrl(device.getIntentUri()) 48 .setDeviceName(deviceName) 49 .setIconPng(observedDeviceResponse.getImage()) 50 .setIconFifeUrl(device.getImageUrl()) 51 .setAntiSpoofingPublicKey(device.getAntiSpoofingKeyPair().getPublicKey()) 52 .setFastPairStrings(getFastPairStrings(observedDeviceResponse, deviceName, account)) 53 .build(); 54 } 55 56 /** 57 * Prints readable string for a {@link ScanFastPairStoreItem}. 58 */ toString(ScanFastPairStoreItem item)59 public static String toString(ScanFastPairStoreItem item) { 60 return "ScanFastPairStoreItem=[address:" + item.getAddress() 61 + ", actionUrl:" + item.getActionUrl() 62 + ", deviceName:" + item.getDeviceName() 63 + ", iconFifeUrl:" + item.getIconFifeUrl() 64 + ", fastPairStrings:" + toString(item.getFastPairStrings()) 65 + "]"; 66 } 67 68 /** 69 * Prints readable string for a {@link FastPairStrings} 70 */ toString(FastPairStrings fastPairStrings)71 public static String toString(FastPairStrings fastPairStrings) { 72 return "FastPairStrings[" 73 + "tapToPairWithAccount=" + fastPairStrings.getTapToPairWithAccount() 74 + ", tapToPairWithoutAccount=" + fastPairStrings.getTapToPairWithoutAccount() 75 + ", initialPairingDescription=" + fastPairStrings.getInitialPairingDescription() 76 + ", pairingFinishedCompanionAppInstalled=" 77 + fastPairStrings.getPairingFinishedCompanionAppInstalled() 78 + ", pairingFinishedCompanionAppNotInstalled=" 79 + fastPairStrings.getPairingFinishedCompanionAppNotInstalled() 80 + ", subsequentPairingDescription=" 81 + fastPairStrings.getSubsequentPairingDescription() 82 + ", retroactivePairingDescription=" 83 + fastPairStrings.getRetroactivePairingDescription() 84 + ", waitAppLaunchDescription=" + fastPairStrings.getWaitAppLaunchDescription() 85 + ", pairingFailDescription=" + fastPairStrings.getPairingFailDescription() 86 + "]"; 87 } 88 getFastPairStrings(GetObservedDeviceResponse response, String deviceName, @Nullable String account)89 private static FastPairStrings getFastPairStrings(GetObservedDeviceResponse response, 90 String deviceName, @Nullable String account) { 91 ObservedDeviceStrings strings = response.getStrings(); 92 return FastPairStrings.newBuilder() 93 .setTapToPairWithAccount(strings.getInitialNotificationDescription()) 94 .setTapToPairWithoutAccount( 95 strings.getInitialNotificationDescriptionNoAccount()) 96 .setInitialPairingDescription(account == null 97 ? strings.getInitialNotificationDescriptionNoAccount() 98 : String.format(strings.getInitialPairingDescription(), 99 deviceName, account)) 100 .setPairingFinishedCompanionAppInstalled( 101 strings.getConnectSuccessCompanionAppInstalled()) 102 .setPairingFinishedCompanionAppNotInstalled( 103 strings.getConnectSuccessCompanionAppNotInstalled()) 104 .setSubsequentPairingDescription(strings.getSubsequentPairingDescription()) 105 .setRetroactivePairingDescription(strings.getRetroactivePairingDescription()) 106 .setWaitAppLaunchDescription(strings.getWaitLaunchCompanionAppDescription()) 107 .setPairingFailDescription(strings.getFailConnectGoToSettingsDescription()) 108 .build(); 109 } 110 } 111