• 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, @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