• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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