• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.internal.telephony.metrics;
18 
19 import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID;
20 import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_NONE;
21 
22 import static com.android.internal.telephony.satellite.SatelliteConstants.TRIGGERING_EVENT_UNKNOWN;
23 
24 import android.telephony.satellite.NtnSignalStrength;
25 import android.telephony.satellite.SatelliteManager;
26 
27 import com.android.internal.telephony.PhoneFactory;
28 import com.android.internal.telephony.nano.PersistAtomsProto.CarrierRoamingSatelliteControllerStats;
29 import com.android.internal.telephony.nano.PersistAtomsProto.CarrierRoamingSatelliteSession;
30 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteAccessController;
31 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteConfigUpdater;
32 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteController;
33 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteEntitlement;
34 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteIncomingDatagram;
35 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteOutgoingDatagram;
36 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteProvision;
37 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteSession;
38 import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteSosMessageRecommender;
39 import com.android.internal.telephony.satellite.SatelliteConstants;
40 import com.android.telephony.Rlog;
41 
42 import java.util.Arrays;
43 import java.util.Objects;
44 import java.util.Optional;
45 
46 /** Tracks Satellite metrics for each phone */
47 public class SatelliteStats {
48     private static final String TAG = SatelliteStats.class.getSimpleName();
49     private static final boolean DBG = false;
50 
51     private final PersistAtomsStorage mAtomsStorage =
52             PhoneFactory.getMetricsCollector().getAtomsStorage();
53 
54     private static SatelliteStats sInstance = null;
55 
56     /** Gets the instance of SatelliteStats */
getInstance()57     public static SatelliteStats getInstance() {
58         if (sInstance == null) {
59             Rlog.d(TAG, "SatelliteStats created.");
60             synchronized (SatelliteStats.class) {
61                 sInstance = new SatelliteStats();
62             }
63         }
64         return sInstance;
65     }
66 
67     /**
68      * A data class to contain whole component of {@link SatelliteController) atom.
69      * Refer to {@link #onSatelliteControllerMetrics(SatelliteControllerParams)}.
70      */
71     public class SatelliteControllerParams {
72         private final int mCountOfSatelliteServiceEnablementsSuccess;
73         private final int mCountOfSatelliteServiceEnablementsFail;
74         private final int mCountOfOutgoingDatagramSuccess;
75         private final int mCountOfOutgoingDatagramFail;
76         private final int mCountOfIncomingDatagramSuccess;
77         private final int mCountOfIncomingDatagramFail;
78         private final int mCountOfDatagramTypeSosSmsSuccess;
79         private final int mCountOfDatagramTypeSosSmsFail;
80         private final int mCountOfDatagramTypeLocationSharingSuccess;
81         private final int mCountOfDatagramTypeLocationSharingFail;
82         private final int mCountOfProvisionSuccess;
83         private final int mCountOfProvisionFail;
84         private final int mCountOfDeprovisionSuccess;
85         private final int mCountOfDeprovisionFail;
86         private final int mTotalServiceUptimeSec;
87         private final int mTotalBatteryConsumptionPercent;
88         private final int mTotalBatteryChargedTimeSec;
89         private final int mCountOfDemoModeSatelliteServiceEnablementsSuccess;
90         private final int mCountOfDemoModeSatelliteServiceEnablementsFail;
91         private final int mCountOfDemoModeOutgoingDatagramSuccess;
92         private final int mCountOfDemoModeOutgoingDatagramFail;
93         private final int mCountOfDemoModeIncomingDatagramSuccess;
94         private final int mCountOfDemoModeIncomingDatagramFail;
95         private final int mCountOfDatagramTypeKeepAliveSuccess;
96         private final int mCountOfDatagramTypeKeepAliveFail;
97         private final int mCountOfAllowedSatelliteAccess;
98         private final int mCountOfDisallowedSatelliteAccess;
99         private final int mCountOfSatelliteAccessCheckFail;
100         private static boolean sIsProvisioned;
101         private static int sCarrierId = UNKNOWN_CARRIER_ID;
102         private final int mCountOfSatelliteAllowedStateChangedEvents;
103         private final int mCountOfSuccessfulLocationQueries;
104         private final int mCountOfFailedLocationQueries;
105         private final int mCountOfP2PSmsAvailableNotificationShown;
106         private final int mCountOfP2PSmsAvailableNotificationRemoved;
107         private static boolean sIsNtnOnlyCarrier;
108         private static int sVersionOfSatelliteAccessConfig;
109         private final int mCountOfIncomingDatagramTypeSosSmsSuccess;
110         private final int mCountOfIncomingDatagramTypeSosSmsFail;
111         private final int mCountOfOutgoingDatagramTypeSmsSuccess;
112         private final int mCountOfOutgoingDatagramTypeSmsFail;
113         private final int mCountOfIncomingDatagramTypeSmsSuccess;
114         private final int mCountOfIncomingDatagramTypeSmsFail;
115 
SatelliteControllerParams(Builder builder)116         private SatelliteControllerParams(Builder builder) {
117             this.mCountOfSatelliteServiceEnablementsSuccess =
118                     builder.mCountOfSatelliteServiceEnablementsSuccess;
119             this.mCountOfSatelliteServiceEnablementsFail =
120                     builder.mCountOfSatelliteServiceEnablementsFail;
121             this.mCountOfOutgoingDatagramSuccess = builder.mCountOfOutgoingDatagramSuccess;
122             this.mCountOfOutgoingDatagramFail = builder.mCountOfOutgoingDatagramFail;
123             this.mCountOfIncomingDatagramSuccess = builder.mCountOfIncomingDatagramSuccess;
124             this.mCountOfIncomingDatagramFail = builder.mCountOfIncomingDatagramFail;
125             this.mCountOfDatagramTypeSosSmsSuccess = builder.mCountOfDatagramTypeSosSmsSuccess;
126             this.mCountOfDatagramTypeSosSmsFail = builder.mCountOfDatagramTypeSosSmsFail;
127             this.mCountOfDatagramTypeLocationSharingSuccess =
128                     builder.mCountOfDatagramTypeLocationSharingSuccess;
129             this.mCountOfDatagramTypeLocationSharingFail =
130                     builder.mCountOfDatagramTypeLocationSharingFail;
131             this.mCountOfProvisionSuccess = builder.mCountOfProvisionSuccess;
132             this.mCountOfProvisionFail = builder.mCountOfProvisionFail;
133             this.mCountOfDeprovisionSuccess = builder.mCountOfDeprovisionSuccess;
134             this.mCountOfDeprovisionFail = builder.mCountOfDeprovisionFail;
135             this.mTotalServiceUptimeSec = builder.mTotalServiceUptimeSec;
136             this.mTotalBatteryConsumptionPercent = builder.mTotalBatteryConsumptionPercent;
137             this.mTotalBatteryChargedTimeSec = builder.mTotalBatteryChargedTimeSec;
138             this.mCountOfDemoModeSatelliteServiceEnablementsSuccess =
139                     builder.mCountOfDemoModeSatelliteServiceEnablementsSuccess;
140             this.mCountOfDemoModeSatelliteServiceEnablementsFail =
141                     builder.mCountOfDemoModeSatelliteServiceEnablementsFail;
142             this.mCountOfDemoModeOutgoingDatagramSuccess =
143                     builder.mCountOfDemoModeOutgoingDatagramSuccess;
144             this.mCountOfDemoModeOutgoingDatagramFail =
145                     builder.mCountOfDemoModeOutgoingDatagramFail;
146             this.mCountOfDemoModeIncomingDatagramSuccess =
147                     builder.mCountOfDemoModeIncomingDatagramSuccess;
148             this.mCountOfDemoModeIncomingDatagramFail =
149                     builder.mCountOfDemoModeIncomingDatagramFail;
150             this.mCountOfDatagramTypeKeepAliveSuccess =
151                     builder.mCountOfDatagramTypeKeepAliveSuccess;
152             this.mCountOfDatagramTypeKeepAliveFail =
153                     builder.mCountOfDatagramTypeKeepAliveFail;
154             this.mCountOfAllowedSatelliteAccess =
155                     builder.mCountOfAllowedSatelliteAccess;
156             this.mCountOfDisallowedSatelliteAccess =
157                     builder.mCountOfDisallowedSatelliteAccess;
158             this.mCountOfSatelliteAccessCheckFail =
159                     builder.mCountOfSatelliteAccessCheckFail;
160 
161             // isProvisioned value should be updated only when it is meaningful.
162             if (builder.mIsProvisioned.isPresent()) {
163                 this.sIsProvisioned = builder.mIsProvisioned.get();
164             }
165 
166             // Carrier ID value should be updated only when it is meaningful.
167             if (builder.mCarrierId.isPresent()) {
168                 this.sCarrierId = builder.mCarrierId.get();
169             }
170 
171             this.mCountOfSatelliteAllowedStateChangedEvents =
172                     builder.mCountOfSatelliteAllowedStateChangedEvents;
173             this.mCountOfSuccessfulLocationQueries =
174                     builder.mCountOfSuccessfulLocationQueries;
175             this.mCountOfFailedLocationQueries =
176                     builder.mCountOfFailedLocationQueries;
177             this.mCountOfP2PSmsAvailableNotificationShown =
178                     builder.mCountOfP2PSmsAvailableNotificationShown;
179             this.mCountOfP2PSmsAvailableNotificationRemoved =
180                     builder.mCountOfP2PSmsAvailableNotificationRemoved;
181 
182             // Ntn only carrier value should be updated only when it is meaningful.
183             if (builder.mIsNtnOnlyCarrier.isPresent()) {
184                 this.sIsNtnOnlyCarrier = builder.mIsNtnOnlyCarrier.get();
185             }
186             // version satellite access config value should be updated only when it is meaningful.
187             if (builder.mVersionOfSatelliteAccessConfig.isPresent()) {
188                 this.sVersionOfSatelliteAccessConfig =
189                         builder.mVersionOfSatelliteAccessConfig.get();
190             }
191 
192             this.mCountOfIncomingDatagramTypeSosSmsSuccess =
193                     builder.mCountOfIncomingDatagramTypeSosSmsSuccess;
194             this.mCountOfIncomingDatagramTypeSosSmsFail =
195                     builder.mCountOfIncomingDatagramTypeSosSmsFail;
196             this.mCountOfOutgoingDatagramTypeSmsSuccess =
197                     builder.mCountOfOutgoingDatagramTypeSmsSuccess;
198             this.mCountOfOutgoingDatagramTypeSmsFail = builder.mCountOfOutgoingDatagramTypeSmsFail;
199             this.mCountOfIncomingDatagramTypeSmsSuccess =
200                     builder.mCountOfIncomingDatagramTypeSmsSuccess;
201             this.mCountOfIncomingDatagramTypeSmsFail = builder.mCountOfIncomingDatagramTypeSmsFail;
202         }
203 
getCountOfSatelliteServiceEnablementsSuccess()204         public int getCountOfSatelliteServiceEnablementsSuccess() {
205             return mCountOfSatelliteServiceEnablementsSuccess;
206         }
207 
getCountOfSatelliteServiceEnablementsFail()208         public int getCountOfSatelliteServiceEnablementsFail() {
209             return mCountOfSatelliteServiceEnablementsFail;
210         }
211 
getCountOfOutgoingDatagramSuccess()212         public int getCountOfOutgoingDatagramSuccess() {
213             return mCountOfOutgoingDatagramSuccess;
214         }
215 
getCountOfOutgoingDatagramFail()216         public int getCountOfOutgoingDatagramFail() {
217             return mCountOfOutgoingDatagramFail;
218         }
219 
getCountOfIncomingDatagramSuccess()220         public int getCountOfIncomingDatagramSuccess() {
221             return mCountOfIncomingDatagramSuccess;
222         }
223 
getCountOfIncomingDatagramFail()224         public int getCountOfIncomingDatagramFail() {
225             return mCountOfIncomingDatagramFail;
226         }
227 
getCountOfDatagramTypeSosSmsSuccess()228         public int getCountOfDatagramTypeSosSmsSuccess() {
229             return mCountOfDatagramTypeSosSmsSuccess;
230         }
231 
getCountOfDatagramTypeSosSmsFail()232         public int getCountOfDatagramTypeSosSmsFail() {
233             return mCountOfDatagramTypeSosSmsFail;
234         }
235 
getCountOfDatagramTypeLocationSharingSuccess()236         public int getCountOfDatagramTypeLocationSharingSuccess() {
237             return mCountOfDatagramTypeLocationSharingSuccess;
238         }
239 
getCountOfDatagramTypeLocationSharingFail()240         public int getCountOfDatagramTypeLocationSharingFail() {
241             return mCountOfDatagramTypeLocationSharingFail;
242         }
243 
getCountOfProvisionSuccess()244         public int getCountOfProvisionSuccess() {
245             return mCountOfProvisionSuccess;
246         }
247 
getCountOfProvisionFail()248         public int getCountOfProvisionFail() {
249             return mCountOfProvisionFail;
250         }
251 
getCountOfDeprovisionSuccess()252         public int getCountOfDeprovisionSuccess() {
253             return mCountOfDeprovisionSuccess;
254         }
255 
getCountOfDeprovisionFail()256         public int getCountOfDeprovisionFail() {
257             return mCountOfDeprovisionFail;
258         }
259 
getTotalServiceUptimeSec()260         public int getTotalServiceUptimeSec() {
261             return mTotalServiceUptimeSec;
262         }
263 
getTotalBatteryConsumptionPercent()264         public int getTotalBatteryConsumptionPercent() {
265             return mTotalBatteryConsumptionPercent;
266         }
267 
getTotalBatteryChargedTimeSec()268         public int getTotalBatteryChargedTimeSec() {
269             return mTotalBatteryChargedTimeSec;
270         }
271 
getCountOfDemoModeSatelliteServiceEnablementsSuccess()272         public int getCountOfDemoModeSatelliteServiceEnablementsSuccess() {
273             return mCountOfDemoModeSatelliteServiceEnablementsSuccess;
274         }
275 
getCountOfDemoModeSatelliteServiceEnablementsFail()276         public int getCountOfDemoModeSatelliteServiceEnablementsFail() {
277             return mCountOfDemoModeSatelliteServiceEnablementsFail;
278         }
279 
getCountOfDemoModeOutgoingDatagramSuccess()280         public int getCountOfDemoModeOutgoingDatagramSuccess() {
281             return mCountOfDemoModeOutgoingDatagramSuccess;
282         }
283 
getCountOfDemoModeOutgoingDatagramFail()284         public int getCountOfDemoModeOutgoingDatagramFail() {
285             return mCountOfDemoModeOutgoingDatagramFail;
286         }
287 
getCountOfDemoModeIncomingDatagramSuccess()288         public int getCountOfDemoModeIncomingDatagramSuccess() {
289             return mCountOfDemoModeIncomingDatagramSuccess;
290         }
291 
getCountOfDemoModeIncomingDatagramFail()292         public int getCountOfDemoModeIncomingDatagramFail() {
293             return mCountOfDemoModeIncomingDatagramFail;
294         }
295 
getCountOfDatagramTypeKeepAliveSuccess()296         public int getCountOfDatagramTypeKeepAliveSuccess() {
297             return mCountOfDatagramTypeKeepAliveSuccess;
298         }
299 
getCountOfDatagramTypeKeepAliveFail()300         public int getCountOfDatagramTypeKeepAliveFail() {
301             return mCountOfDatagramTypeKeepAliveFail;
302         }
303 
getCountOfAllowedSatelliteAccess()304         public int getCountOfAllowedSatelliteAccess() {
305             return mCountOfAllowedSatelliteAccess;
306         }
307 
getCountOfDisallowedSatelliteAccess()308         public int getCountOfDisallowedSatelliteAccess() {
309             return mCountOfDisallowedSatelliteAccess;
310         }
311 
getCountOfSatelliteAccessCheckFail()312         public int getCountOfSatelliteAccessCheckFail() {
313             return mCountOfSatelliteAccessCheckFail;
314         }
315 
isProvisioned()316         public static boolean isProvisioned() {
317             return sIsProvisioned;
318         }
319 
getCarrierId()320         public static int getCarrierId() {
321             return sCarrierId;
322         }
323 
getCountOfSatelliteAllowedStateChangedEvents()324         public int getCountOfSatelliteAllowedStateChangedEvents() {
325             return mCountOfSatelliteAllowedStateChangedEvents;
326         }
327 
getCountOfSuccessfulLocationQueries()328         public int getCountOfSuccessfulLocationQueries() {
329             return mCountOfSuccessfulLocationQueries;
330         }
331 
getCountOfFailedLocationQueries()332         public int getCountOfFailedLocationQueries() {
333             return mCountOfFailedLocationQueries;
334         }
335 
getCountOfP2PSmsAvailableNotificationShown()336         public int getCountOfP2PSmsAvailableNotificationShown() {
337             return mCountOfP2PSmsAvailableNotificationShown;
338         }
339 
getCountOfP2PSmsAvailableNotificationRemoved()340         public int getCountOfP2PSmsAvailableNotificationRemoved() {
341             return mCountOfP2PSmsAvailableNotificationRemoved;
342         }
343 
isNtnOnlyCarrier()344         public static boolean isNtnOnlyCarrier() {
345             return sIsNtnOnlyCarrier;
346         }
347 
getVersionSatelliteAccessConfig()348         public static int getVersionSatelliteAccessConfig() {
349             return sVersionOfSatelliteAccessConfig;
350         }
351 
getCountOfIncomingDatagramTypeSosSmsSuccess()352         public int getCountOfIncomingDatagramTypeSosSmsSuccess() {
353             return mCountOfIncomingDatagramTypeSosSmsSuccess;
354         }
355 
getCountOfIncomingDatagramTypeSosSmsFail()356         public int getCountOfIncomingDatagramTypeSosSmsFail() {
357             return mCountOfIncomingDatagramTypeSosSmsFail;
358         }
359 
getCountOfOutgoingDatagramTypeSmsSuccess()360         public int getCountOfOutgoingDatagramTypeSmsSuccess() {
361             return mCountOfOutgoingDatagramTypeSmsSuccess;
362         }
363 
getCountOfOutgoingDatagramTypeSmsFail()364         public int getCountOfOutgoingDatagramTypeSmsFail() {
365             return mCountOfOutgoingDatagramTypeSmsFail;
366         }
367 
getCountOfIncomingDatagramTypeSmsSuccess()368         public int getCountOfIncomingDatagramTypeSmsSuccess() {
369             return mCountOfIncomingDatagramTypeSmsSuccess;
370         }
371 
getCountOfIncomingDatagramTypeSmsFail()372         public int getCountOfIncomingDatagramTypeSmsFail() {
373             return mCountOfIncomingDatagramTypeSmsFail;
374         }
375 
376         /**
377          * A builder class to create {@link SatelliteControllerParams} data structure class
378          */
379         public static class Builder {
380             private int mCountOfSatelliteServiceEnablementsSuccess = 0;
381             private int mCountOfSatelliteServiceEnablementsFail = 0;
382             private int mCountOfOutgoingDatagramSuccess = 0;
383             private int mCountOfOutgoingDatagramFail = 0;
384             private int mCountOfIncomingDatagramSuccess = 0;
385             private int mCountOfIncomingDatagramFail = 0;
386             private int mCountOfDatagramTypeSosSmsSuccess = 0;
387             private int mCountOfDatagramTypeSosSmsFail = 0;
388             private int mCountOfDatagramTypeLocationSharingSuccess = 0;
389             private int mCountOfDatagramTypeLocationSharingFail = 0;
390             private int mCountOfProvisionSuccess;
391             private int mCountOfProvisionFail;
392             private int mCountOfDeprovisionSuccess;
393             private int mCountOfDeprovisionFail;
394             private int mTotalServiceUptimeSec = 0;
395             private int mTotalBatteryConsumptionPercent = 0;
396             private int mTotalBatteryChargedTimeSec = 0;
397             private int mCountOfDemoModeSatelliteServiceEnablementsSuccess = 0;
398             private int mCountOfDemoModeSatelliteServiceEnablementsFail = 0;
399             private int mCountOfDemoModeOutgoingDatagramSuccess = 0;
400             private int mCountOfDemoModeOutgoingDatagramFail = 0;
401             private int mCountOfDemoModeIncomingDatagramSuccess = 0;
402             private int mCountOfDemoModeIncomingDatagramFail = 0;
403             private int mCountOfDatagramTypeKeepAliveSuccess = 0;
404             private int mCountOfDatagramTypeKeepAliveFail = 0;
405             private int mCountOfAllowedSatelliteAccess = 0;
406             private int mCountOfDisallowedSatelliteAccess = 0;
407             private int mCountOfSatelliteAccessCheckFail = 0;
408             private Optional<Boolean> mIsProvisioned = Optional.empty();
409             private Optional<Integer> mCarrierId = Optional.empty();
410             private int mCountOfSatelliteAllowedStateChangedEvents = 0;
411             private int mCountOfSuccessfulLocationQueries = 0;
412             private int mCountOfFailedLocationQueries = 0;
413             private int mCountOfP2PSmsAvailableNotificationShown = 0;
414             private int mCountOfP2PSmsAvailableNotificationRemoved = 0;
415             private Optional<Boolean> mIsNtnOnlyCarrier = Optional.empty();
416             private Optional<Integer> mVersionOfSatelliteAccessConfig = Optional.empty();
417             private int mCountOfIncomingDatagramTypeSosSmsSuccess;
418             private int mCountOfIncomingDatagramTypeSosSmsFail;
419             private int mCountOfOutgoingDatagramTypeSmsSuccess;
420             private int mCountOfOutgoingDatagramTypeSmsFail;
421             private int mCountOfIncomingDatagramTypeSmsSuccess;
422             private int mCountOfIncomingDatagramTypeSmsFail;
423 
424             /**
425              * Sets countOfSatelliteServiceEnablementsSuccess value of {@link SatelliteController}
426              * atom then returns Builder class
427              */
setCountOfSatelliteServiceEnablementsSuccess( int countOfSatelliteServiceEnablementsSuccess)428             public Builder setCountOfSatelliteServiceEnablementsSuccess(
429                     int countOfSatelliteServiceEnablementsSuccess) {
430                 this.mCountOfSatelliteServiceEnablementsSuccess =
431                         countOfSatelliteServiceEnablementsSuccess;
432                 return this;
433             }
434 
435             /**
436              * Sets countOfSatelliteServiceEnablementsFail value of {@link SatelliteController} atom
437              * then returns Builder class
438              */
setCountOfSatelliteServiceEnablementsFail( int countOfSatelliteServiceEnablementsFail)439             public Builder setCountOfSatelliteServiceEnablementsFail(
440                     int countOfSatelliteServiceEnablementsFail) {
441                 this.mCountOfSatelliteServiceEnablementsFail =
442                         countOfSatelliteServiceEnablementsFail;
443                 return this;
444             }
445 
446             /**
447              * Sets countOfOutgoingDatagramSuccess value of {@link SatelliteController} atom then
448              * returns Builder class
449              */
setCountOfOutgoingDatagramSuccess(int countOfOutgoingDatagramSuccess)450             public Builder setCountOfOutgoingDatagramSuccess(int countOfOutgoingDatagramSuccess) {
451                 this.mCountOfOutgoingDatagramSuccess = countOfOutgoingDatagramSuccess;
452                 return this;
453             }
454 
455             /**
456              * Sets countOfOutgoingDatagramFail value of {@link SatelliteController} atom then
457              * returns Builder class
458              */
setCountOfOutgoingDatagramFail(int countOfOutgoingDatagramFail)459             public Builder setCountOfOutgoingDatagramFail(int countOfOutgoingDatagramFail) {
460                 this.mCountOfOutgoingDatagramFail = countOfOutgoingDatagramFail;
461                 return this;
462             }
463 
464             /**
465              * Sets countOfIncomingDatagramSuccess value of {@link SatelliteController} atom then
466              * returns Builder class
467              */
setCountOfIncomingDatagramSuccess(int countOfIncomingDatagramSuccess)468             public Builder setCountOfIncomingDatagramSuccess(int countOfIncomingDatagramSuccess) {
469                 this.mCountOfIncomingDatagramSuccess = countOfIncomingDatagramSuccess;
470                 return this;
471             }
472 
473             /**
474              * Sets countOfIncomingDatagramFail value of {@link SatelliteController} atom then
475              * returns Builder class
476              */
setCountOfIncomingDatagramFail(int countOfIncomingDatagramFail)477             public Builder setCountOfIncomingDatagramFail(int countOfIncomingDatagramFail) {
478                 this.mCountOfIncomingDatagramFail = countOfIncomingDatagramFail;
479                 return this;
480             }
481 
482             /**
483              * Sets countOfDatagramTypeSosSmsSuccess value of {@link SatelliteController} atom then
484              * returns Builder class
485              */
setCountOfDatagramTypeSosSmsSuccess( int countOfDatagramTypeSosSmsSuccess)486             public Builder setCountOfDatagramTypeSosSmsSuccess(
487                     int countOfDatagramTypeSosSmsSuccess) {
488                 this.mCountOfDatagramTypeSosSmsSuccess = countOfDatagramTypeSosSmsSuccess;
489                 return this;
490             }
491 
492             /**
493              * Sets countOfDatagramTypeSosSmsFail value of {@link SatelliteController} atom then
494              * returns Builder class
495              */
setCountOfDatagramTypeSosSmsFail(int countOfDatagramTypeSosSmsFail)496             public Builder setCountOfDatagramTypeSosSmsFail(int countOfDatagramTypeSosSmsFail) {
497                 this.mCountOfDatagramTypeSosSmsFail = countOfDatagramTypeSosSmsFail;
498                 return this;
499             }
500 
501             /**
502              * Sets countOfDatagramTypeLocationSharingSuccess value of {@link SatelliteController}
503              * atom then returns Builder class
504              */
setCountOfDatagramTypeLocationSharingSuccess( int countOfDatagramTypeLocationSharingSuccess)505             public Builder setCountOfDatagramTypeLocationSharingSuccess(
506                     int countOfDatagramTypeLocationSharingSuccess) {
507                 this.mCountOfDatagramTypeLocationSharingSuccess =
508                         countOfDatagramTypeLocationSharingSuccess;
509                 return this;
510             }
511 
512             /**
513              * Sets countOfDatagramTypeLocationSharingFail value of {@link SatelliteController}
514              * atom then returns Builder class
515              */
setCountOfDatagramTypeLocationSharingFail( int countOfDatagramTypeLocationSharingFail)516             public Builder setCountOfDatagramTypeLocationSharingFail(
517                     int countOfDatagramTypeLocationSharingFail) {
518                 this.mCountOfDatagramTypeLocationSharingFail =
519                         countOfDatagramTypeLocationSharingFail;
520                 return this;
521             }
522 
523             /**
524              * Sets countOfProvisionSuccess value of {@link SatelliteController}
525              * atom then returns Builder class
526              */
setCountOfProvisionSuccess(int countOfProvisionSuccess)527             public Builder setCountOfProvisionSuccess(int countOfProvisionSuccess) {
528                 this.mCountOfProvisionSuccess = countOfProvisionSuccess;
529                 return this;
530             }
531 
532             /**
533              * Sets countOfProvisionFail value of {@link SatelliteController}
534              * atom then returns Builder class
535              */
setCountOfProvisionFail(int countOfProvisionFail)536             public Builder setCountOfProvisionFail(int countOfProvisionFail) {
537                 this.mCountOfProvisionFail = countOfProvisionFail;
538                 return this;
539             }
540 
541             /**
542              * Sets countOfDeprovisionSuccess value of {@link SatelliteController}
543              * atom then returns Builder class
544              */
setCountOfDeprovisionSuccess(int countOfDeprovisionSuccess)545             public Builder setCountOfDeprovisionSuccess(int countOfDeprovisionSuccess) {
546                 this.mCountOfDeprovisionSuccess = countOfDeprovisionSuccess;
547                 return this;
548             }
549 
550             /**
551              * Sets countOfDeprovisionSuccess value of {@link SatelliteController}
552              * atom then returns Builder class
553              */
setCountOfDeprovisionFail(int countOfDeprovisionFail)554             public Builder setCountOfDeprovisionFail(int countOfDeprovisionFail) {
555                 this.mCountOfDeprovisionFail = countOfDeprovisionFail;
556                 return this;
557             }
558 
559             /**
560              * Sets totalServiceUptimeSec value of {@link SatelliteController} atom then
561              * returns Builder class
562              */
setTotalServiceUptimeSec(int totalServiceUptimeSec)563             public Builder setTotalServiceUptimeSec(int totalServiceUptimeSec) {
564                 this.mTotalServiceUptimeSec = totalServiceUptimeSec;
565                 return this;
566             }
567 
568             /**
569              * Sets totalBatteryConsumptionPercent value of {@link SatelliteController} atom then
570              * returns Builder class
571              */
setTotalBatteryConsumptionPercent(int totalBatteryConsumptionPercent)572             public Builder setTotalBatteryConsumptionPercent(int totalBatteryConsumptionPercent) {
573                 this.mTotalBatteryConsumptionPercent = totalBatteryConsumptionPercent;
574                 return this;
575             }
576 
577             /**
578              * Sets totalBatteryChargedTimeSec value of {@link SatelliteController} atom then
579              * returns Builder class
580              */
setTotalBatteryChargedTimeSec(int totalBatteryChargedTimeSec)581             public Builder setTotalBatteryChargedTimeSec(int totalBatteryChargedTimeSec) {
582                 this.mTotalBatteryChargedTimeSec = totalBatteryChargedTimeSec;
583                 return this;
584             }
585 
586             /**
587              * Sets countOfDemoModeSatelliteServiceEnablementsSuccess value of
588              * {@link SatelliteController} atom then returns Builder class
589              */
setCountOfDemoModeSatelliteServiceEnablementsSuccess( int countOfDemoModeSatelliteServiceEnablementsSuccess)590             public Builder setCountOfDemoModeSatelliteServiceEnablementsSuccess(
591                     int countOfDemoModeSatelliteServiceEnablementsSuccess) {
592                 this.mCountOfDemoModeSatelliteServiceEnablementsSuccess =
593                         countOfDemoModeSatelliteServiceEnablementsSuccess;
594                 return this;
595             }
596 
597             /**
598              * Sets countOfDemoModeSatelliteServiceEnablementsFail value of
599              * {@link SatelliteController} atom then returns Builder class
600              */
setCountOfDemoModeSatelliteServiceEnablementsFail( int countOfDemoModeSatelliteServiceEnablementsFail)601             public Builder setCountOfDemoModeSatelliteServiceEnablementsFail(
602                     int countOfDemoModeSatelliteServiceEnablementsFail) {
603                 this.mCountOfDemoModeSatelliteServiceEnablementsFail =
604                         countOfDemoModeSatelliteServiceEnablementsFail;
605                 return this;
606             }
607 
608             /**
609              * Sets countOfDemoModeOutgoingDatagramSuccess value of {@link SatelliteController} atom
610              * then returns Builder class
611              */
setCountOfDemoModeOutgoingDatagramSuccess( int countOfDemoModeOutgoingDatagramSuccess)612             public Builder setCountOfDemoModeOutgoingDatagramSuccess(
613                     int countOfDemoModeOutgoingDatagramSuccess) {
614                 this.mCountOfDemoModeOutgoingDatagramSuccess =
615                         countOfDemoModeOutgoingDatagramSuccess;
616                 return this;
617             }
618 
619             /**
620              * Sets countOfDemoModeOutgoingDatagramFail value of {@link SatelliteController} atom
621              * then returns Builder class
622              */
setCountOfDemoModeOutgoingDatagramFail( int countOfDemoModeOutgoingDatagramFail)623             public Builder setCountOfDemoModeOutgoingDatagramFail(
624                     int countOfDemoModeOutgoingDatagramFail) {
625                 this.mCountOfDemoModeOutgoingDatagramFail = countOfDemoModeOutgoingDatagramFail;
626                 return this;
627             }
628 
629             /**
630              * Sets countOfDemoModeIncomingDatagramSuccess value of {@link SatelliteController} atom
631              * then returns Builder class
632              */
setCountOfDemoModeIncomingDatagramSuccess( int countOfDemoModeIncomingDatagramSuccess)633             public Builder setCountOfDemoModeIncomingDatagramSuccess(
634                     int countOfDemoModeIncomingDatagramSuccess) {
635                 this.mCountOfDemoModeIncomingDatagramSuccess =
636                         countOfDemoModeIncomingDatagramSuccess;
637                 return this;
638             }
639 
640             /**
641              * Sets countOfDemoModeIncomingDatagramFail value of {@link SatelliteController} atom
642              * then returns Builder class
643              */
setCountOfDemoModeIncomingDatagramFail( int countOfDemoModeIncomingDatagramFail)644             public Builder setCountOfDemoModeIncomingDatagramFail(
645                     int countOfDemoModeIncomingDatagramFail) {
646                 this.mCountOfDemoModeIncomingDatagramFail = countOfDemoModeIncomingDatagramFail;
647                 return this;
648             }
649 
650             /**
651              * Sets countOfDatagramTypeKeepAliveSuccess value of {@link SatelliteController} atom
652              * then returns Builder class
653              */
setCountOfDatagramTypeKeepAliveSuccess( int countOfDatagramTypeKeepAliveSuccess)654             public Builder setCountOfDatagramTypeKeepAliveSuccess(
655                     int countOfDatagramTypeKeepAliveSuccess) {
656                 this.mCountOfDatagramTypeKeepAliveSuccess = countOfDatagramTypeKeepAliveSuccess;
657                 return this;
658             }
659 
660             /**
661              * Sets countOfDatagramTypeKeepAliveFail value of {@link SatelliteController} atom
662              * then returns Builder class
663              */
setCountOfDatagramTypeKeepAliveFail( int countOfDatagramTypeKeepAliveFail)664             public Builder setCountOfDatagramTypeKeepAliveFail(
665                     int countOfDatagramTypeKeepAliveFail) {
666                 this.mCountOfDatagramTypeKeepAliveFail = countOfDatagramTypeKeepAliveFail;
667                 return this;
668             }
669 
670             /**
671              * Sets countOfAllowedSatelliteAccess value of {@link SatelliteController} atom
672              * then returns Builder class
673              */
setCountOfAllowedSatelliteAccess( int countOfAllowedSatelliteAccess)674             public Builder setCountOfAllowedSatelliteAccess(
675                     int countOfAllowedSatelliteAccess) {
676                 this.mCountOfAllowedSatelliteAccess =
677                         countOfAllowedSatelliteAccess;
678                 return this;
679             }
680 
681             /**
682              * Sets countOfDisallowedSatelliteAccess value of {@link SatelliteController} atom
683              * then returns Builder class
684              */
setCountOfDisallowedSatelliteAccess( int countOfDisallowedSatelliteAccess)685             public Builder setCountOfDisallowedSatelliteAccess(
686                     int countOfDisallowedSatelliteAccess) {
687                 this.mCountOfDisallowedSatelliteAccess = countOfDisallowedSatelliteAccess;
688                 return this;
689             }
690 
691             /**
692              * Sets countOfSatelliteAccessCheckFail value of {@link SatelliteController} atom
693              * then returns Builder class
694              */
setCountOfSatelliteAccessCheckFail( int countOfSatelliteAccessCheckFail)695             public Builder setCountOfSatelliteAccessCheckFail(
696                     int countOfSatelliteAccessCheckFail) {
697                 this.mCountOfSatelliteAccessCheckFail = countOfSatelliteAccessCheckFail;
698                 return this;
699             }
700 
701             /**
702              * Sets isProvisioned value of {@link SatelliteController} atom
703              * then returns Builder class
704              */
setIsProvisioned(boolean isProvisioned)705             public Builder setIsProvisioned(boolean isProvisioned) {
706                 this.mIsProvisioned = Optional.of(isProvisioned);
707                 return this;
708             }
709 
710             /**
711              * Sets Carrier ID value of {@link SatelliteController} atom
712              * then returns Builder class
713              */
setCarrierId(int carrierId)714             public Builder setCarrierId(int carrierId) {
715                 this.mCarrierId = Optional.of(carrierId);
716                 return this;
717             }
718 
719             /**
720              * Sets countOfSatelliteAllowedStateChangedEvents value of {@link SatelliteController}
721              * atom
722              * then returns Builder class
723              */
setCountOfSatelliteAllowedStateChangedEvents( int countOfSatelliteAllowedStateChangedEvents)724             public Builder setCountOfSatelliteAllowedStateChangedEvents(
725                     int countOfSatelliteAllowedStateChangedEvents) {
726                 this.mCountOfSatelliteAllowedStateChangedEvents =
727                         countOfSatelliteAllowedStateChangedEvents;
728                 return this;
729             }
730 
731             /**
732              * Sets countOfSuccessfulLocationQueries value of {@link SatelliteController} atom
733              * then returns Builder class
734              */
setCountOfSuccessfulLocationQueries( int countOfSuccessfulLocationQueries)735             public Builder setCountOfSuccessfulLocationQueries(
736                     int countOfSuccessfulLocationQueries) {
737                 this.mCountOfSuccessfulLocationQueries = countOfSuccessfulLocationQueries;
738                 return this;
739             }
740 
741             /**
742              * Sets countOfFailedLocationQueries value of {@link SatelliteController} atom
743              * then returns Builder class
744              */
setCountOfFailedLocationQueries(int countOfFailedLocationQueries)745             public Builder setCountOfFailedLocationQueries(int countOfFailedLocationQueries) {
746                 this.mCountOfFailedLocationQueries = countOfFailedLocationQueries;
747                 return this;
748             }
749 
750             /**
751              * Sets countOfP2PSmsAvailableNotificationShown value of {@link SatelliteController}
752              * atom then returns Builder class
753              */
setCountOfP2PSmsAvailableNotificationShown( int countOfP2PSmsAvailableNotificationShown)754             public Builder setCountOfP2PSmsAvailableNotificationShown(
755                     int countOfP2PSmsAvailableNotificationShown) {
756                 this.mCountOfP2PSmsAvailableNotificationShown =
757                         countOfP2PSmsAvailableNotificationShown;
758                 return this;
759             }
760 
761             /**
762              * Sets countOfP2PSmsAvailableNotificationRemoved value of {@link SatelliteController}
763              * atom then returns Builder class
764              */
setCountOfP2PSmsAvailableNotificationRemoved( int countOfP2PSmsAvailableNotificationRemoved)765             public Builder setCountOfP2PSmsAvailableNotificationRemoved(
766                     int countOfP2PSmsAvailableNotificationRemoved) {
767                 this.mCountOfP2PSmsAvailableNotificationRemoved =
768                         countOfP2PSmsAvailableNotificationRemoved;
769                 return this;
770             }
771 
772             /**
773              * Sets isNtnOnlyCarrier value of {@link SatelliteController} atom
774              * then returns Builder class
775              */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)776             public Builder setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
777                 this.mIsNtnOnlyCarrier = Optional.of(isNtnOnlyCarrier);
778                 return this;
779             }
780 
781             /**
782              * Sets versionOfSatelliteAccessConfig value of {@link SatelliteController} atom
783              * then returns Builder class
784              */
setVersionOfSatelliteAccessControl(int version)785             public Builder setVersionOfSatelliteAccessControl(int version) {
786                 this.mVersionOfSatelliteAccessConfig = Optional.of(version);
787                 return this;
788             }
789 
790             /**
791              * Sets countOfIncomingDatagramTypeSosSmsSuccess value of {@link SatelliteController}
792              * atom then returns Builder class
793              */
setCountOfIncomingDatagramTypeSosSmsSuccess( int countOfIncomingDatagramTypeSosSmsSuccess)794             public Builder setCountOfIncomingDatagramTypeSosSmsSuccess(
795                     int countOfIncomingDatagramTypeSosSmsSuccess) {
796                 this.mCountOfIncomingDatagramTypeSosSmsSuccess =
797                         countOfIncomingDatagramTypeSosSmsSuccess;
798                 return this;
799             }
800 
801             /**
802              * Sets countOfIncomingDatagramTypeSosSmsFail value of {@link SatelliteController} atom
803              * then returns Builder class
804              */
setCountOfIncomingDatagramTypeSosSmsFail( int countOfIncomingDatagramTypeSosSmsFail)805             public Builder setCountOfIncomingDatagramTypeSosSmsFail(
806                     int countOfIncomingDatagramTypeSosSmsFail) {
807                 this.mCountOfIncomingDatagramTypeSosSmsFail = countOfIncomingDatagramTypeSosSmsFail;
808                 return this;
809             }
810 
811             /**
812              * Sets countOfOutgoingDatagramTypeSmsSuccess value of {@link SatelliteController} atom
813              * then returns Builder class
814              */
setCountOfOutgoingDatagramTypeSmsSuccess( int countOfOutgoingDatagramTypeSmsSuccess)815             public Builder setCountOfOutgoingDatagramTypeSmsSuccess(
816                     int countOfOutgoingDatagramTypeSmsSuccess) {
817                 this.mCountOfOutgoingDatagramTypeSmsSuccess = countOfOutgoingDatagramTypeSmsSuccess;
818                 return this;
819             }
820 
821             /**
822              * Sets countOfOutgoingDatagramTypeSmsFail value of {@link SatelliteController} atom
823              * then returns Builder class
824              */
setCountOfOutgoingDatagramTypeSmsFail( int countOfOutgoingDatagramTypeSmsFail)825             public Builder setCountOfOutgoingDatagramTypeSmsFail(
826                     int countOfOutgoingDatagramTypeSmsFail) {
827                 this.mCountOfOutgoingDatagramTypeSmsFail = countOfOutgoingDatagramTypeSmsFail;
828                 return this;
829             }
830 
831             /**
832              * Sets countOfIncomingDatagramTypeSmsSuccess value of {@link SatelliteController} atom
833              * then returns Builder class
834              */
setCountOfIncomingDatagramTypeSmsSuccess( int countOfIncomingDatagramTypeSmsSuccess)835             public Builder setCountOfIncomingDatagramTypeSmsSuccess(
836                     int countOfIncomingDatagramTypeSmsSuccess) {
837                 this.mCountOfIncomingDatagramTypeSmsSuccess = countOfIncomingDatagramTypeSmsSuccess;
838                 return this;
839             }
840 
841             /**
842              * Sets countOfIncomingDatagramTypeSmsFail value of {@link SatelliteController} atom
843              * then returns Builder class
844              */
setCountOfIncomingDatagramTypeSmsFail( int countOfIncomingDatagramTypeSmsFail)845             public Builder setCountOfIncomingDatagramTypeSmsFail(
846                     int countOfIncomingDatagramTypeSmsFail) {
847                 this.mCountOfIncomingDatagramTypeSmsFail = countOfIncomingDatagramTypeSmsFail;
848                 return this;
849             }
850 
851             /**
852              * Returns ControllerParams, which contains whole component of
853              * {@link SatelliteController} atom
854              */
build()855             public SatelliteControllerParams build() {
856                 return new SatelliteStats()
857                         .new SatelliteControllerParams(this);
858             }
859         }
860 
861         @Override
toString()862         public String toString() {
863             return "ControllerParams("
864                     + ", countOfSatelliteServiceEnablementsSuccess="
865                     + mCountOfSatelliteServiceEnablementsSuccess
866                     + ", countOfSatelliteServiceEnablementsFail="
867                     + mCountOfSatelliteServiceEnablementsFail
868                     + ", countOfOutgoingDatagramSuccess=" + mCountOfOutgoingDatagramSuccess
869                     + ", countOfOutgoingDatagramFail=" + mCountOfOutgoingDatagramFail
870                     + ", countOfIncomingDatagramSuccess=" + mCountOfIncomingDatagramSuccess
871                     + ", countOfIncomingDatagramFail=" + mCountOfIncomingDatagramFail
872                     + ", countOfDatagramTypeSosSms=" + mCountOfDatagramTypeSosSmsSuccess
873                     + ", countOfDatagramTypeSosSms=" + mCountOfDatagramTypeSosSmsFail
874                     + ", countOfDatagramTypeLocationSharing="
875                     + mCountOfDatagramTypeLocationSharingSuccess
876                     + ", countOfDatagramTypeLocationSharing="
877                     + mCountOfDatagramTypeLocationSharingFail
878                     + ", serviceUptimeSec=" + mTotalServiceUptimeSec
879                     + ", batteryConsumptionPercent=" + mTotalBatteryConsumptionPercent
880                     + ", batteryChargedTimeSec=" + mTotalBatteryChargedTimeSec
881                     + ", countOfDemoModeSatelliteServiceEnablementsSuccess="
882                     + mCountOfDemoModeSatelliteServiceEnablementsSuccess
883                     + ", countOfDemoModeSatelliteServiceEnablementsFail="
884                     + mCountOfDemoModeSatelliteServiceEnablementsFail
885                     + ", countOfDemoModeOutgoingDatagramSuccess="
886                     + mCountOfDemoModeOutgoingDatagramSuccess
887                     + ", countOfDemoModeOutgoingDatagramFail="
888                     + mCountOfDemoModeOutgoingDatagramFail
889                     + ", countOfDemoModeIncomingDatagramSuccess="
890                     + mCountOfDemoModeIncomingDatagramSuccess
891                     + ", countOfDemoModeIncomingDatagramFail="
892                     + mCountOfDemoModeIncomingDatagramFail
893                     + ", countOfDatagramTypeKeepAliveSuccess="
894                     + mCountOfDatagramTypeKeepAliveSuccess
895                     + ", countOfDatagramTypeKeepAliveFail="
896                     + mCountOfDatagramTypeKeepAliveFail
897                     + ", countOfAllowedSatelliteAccess=" + mCountOfAllowedSatelliteAccess
898                     + ", countOfDisallowedSatelliteAccess=" + mCountOfDisallowedSatelliteAccess
899                     + ", countOfSatelliteAccessCheckFail=" + mCountOfSatelliteAccessCheckFail
900                     + ", isProvisioned=" + sIsProvisioned
901                     + ", carrierId=" + sCarrierId
902                     + ", countOfSatelliteAllowedStateChangedEvents="
903                     + mCountOfSatelliteAllowedStateChangedEvents
904                     + ", countOfSuccessfulLocationQueries=" + mCountOfSuccessfulLocationQueries
905                     + ", countOfFailedLocationQueries=" + mCountOfFailedLocationQueries
906                     + ", countOfP2PSmsAvailableNotificationShown="
907                     + mCountOfP2PSmsAvailableNotificationShown
908                     + ", countOfP2PSmsAvailableNotificationRemoved="
909                     + mCountOfP2PSmsAvailableNotificationRemoved
910                     + ", versionOfSatelliteAccessConfig=" + sVersionOfSatelliteAccessConfig
911                     + ", countOfIncomingDatagramTypeSosSmsSuccess="
912                     + mCountOfIncomingDatagramTypeSosSmsSuccess
913                     + ", countOfIncomingDatagramTypeSosSmsFail="
914                     + mCountOfIncomingDatagramTypeSosSmsFail
915                     + ", countOfOutgoingDatagramTypeSmsSuccess="
916                     + mCountOfOutgoingDatagramTypeSmsSuccess
917                     + ", countOfOutgoingDatagramTypeSmsFail=" + mCountOfOutgoingDatagramTypeSmsFail
918                     + ", countOfIncomingDatagramTypeSmsSuccess="
919                     + mCountOfIncomingDatagramTypeSmsSuccess
920                     + ", countOfIncomingDatagramTypeSmsFail=" + mCountOfIncomingDatagramTypeSmsFail
921                     + ")";
922         }
923     }
924 
925     /**
926      * A data class to contain whole component of {@link SatelliteSession) atom.
927      * Refer to {@link #onSatelliteSessionMetrics(SatelliteSessionParams)}.
928      */
929     public class SatelliteSessionParams {
930         private final int mSatelliteServiceInitializationResult;
931         private final int mSatelliteTechnology;
932         private final int mTerminationResult;
933         private final long mInitializationProcessingTimeMillis;
934         private final long mTerminationProcessingTimeMillis;
935         private final int mSessionDurationSec;
936         private final int mCountOfOutgoingDatagramSuccess;
937         private final int mCountOfOutgoingDatagramFailed;
938         private final int mCountOfIncomingDatagramSuccess;
939         private final int mCountOfIncomingDatagramFailed;
940         private final boolean mIsDemoMode;
941         private final @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel;
942         private final int mCarrierId;
943         private final int mCountOfSatelliteNotificationDisplayed;
944         private final int mCountOfAutoExitDueToScreenOff;
945         private final int mCountOfAutoExitDueToTnNetwork;
946         private final boolean mIsEmergency;
947         private final int mMaxInactivityDurationSec;
948         private final boolean mIsNtnOnlyCarrier;
949 
SatelliteSessionParams(Builder builder)950         private SatelliteSessionParams(Builder builder) {
951             this.mSatelliteServiceInitializationResult =
952                     builder.mSatelliteServiceInitializationResult;
953             this.mSatelliteTechnology = builder.mSatelliteTechnology;
954             this.mTerminationResult = builder.mTerminationResult;
955             this.mInitializationProcessingTimeMillis = builder.mInitializationProcessingTimeMillis;
956             this.mTerminationProcessingTimeMillis =
957                     builder.mTerminationProcessingTimeMillis;
958             this.mSessionDurationSec = builder.mSessionDurationSec;
959             this.mCountOfOutgoingDatagramSuccess = builder.mCountOfOutgoingDatagramSuccess;
960             this.mCountOfOutgoingDatagramFailed = builder.mCountOfOutgoingDatagramFailed;
961             this.mCountOfIncomingDatagramSuccess = builder.mCountOfIncomingDatagramSuccess;
962             this.mCountOfIncomingDatagramFailed = builder.mCountOfIncomingDatagramFailed;
963             this.mIsDemoMode = builder.mIsDemoMode;
964             this.mMaxNtnSignalStrengthLevel = builder.mMaxNtnSignalStrengthLevel;
965             this.mCarrierId = builder.mCarrierId;
966             this.mCountOfSatelliteNotificationDisplayed =
967                     builder.mCountOfSatelliteNotificationDisplayed;
968             this.mCountOfAutoExitDueToScreenOff = builder.mCountOfAutoExitDueToScreenOff;
969             this.mCountOfAutoExitDueToTnNetwork = builder.mCountOfAutoExitDueToTnNetwork;
970             this.mIsEmergency = builder.mIsEmergency;
971             this.mIsNtnOnlyCarrier = builder.mIsNtnOnlyCarrier;
972             this.mMaxInactivityDurationSec = builder.mMaxInactivityDurationSec;
973         }
974 
getSatelliteServiceInitializationResult()975         public int getSatelliteServiceInitializationResult() {
976             return mSatelliteServiceInitializationResult;
977         }
978 
getSatelliteTechnology()979         public int getSatelliteTechnology() {
980             return mSatelliteTechnology;
981         }
982 
getTerminationResult()983         public int getTerminationResult() {
984             return mTerminationResult;
985         }
986 
getInitializationProcessingTime()987         public long getInitializationProcessingTime() {
988             return mInitializationProcessingTimeMillis;
989         }
990 
getTerminationProcessingTime()991         public long getTerminationProcessingTime() {
992             return mTerminationProcessingTimeMillis;
993         }
994 
getSessionDuration()995         public int getSessionDuration() {
996             return mSessionDurationSec;
997         }
998 
getCountOfOutgoingDatagramSuccess()999         public int getCountOfOutgoingDatagramSuccess() {
1000             return mCountOfOutgoingDatagramSuccess;
1001         }
1002 
getCountOfOutgoingDatagramFailed()1003         public int getCountOfOutgoingDatagramFailed() {
1004             return mCountOfOutgoingDatagramFailed;
1005         }
1006 
getCountOfIncomingDatagramSuccess()1007         public int getCountOfIncomingDatagramSuccess() {
1008             return mCountOfIncomingDatagramSuccess;
1009         }
1010 
getCountOfIncomingDatagramFailed()1011         public int getCountOfIncomingDatagramFailed() {
1012             return mCountOfIncomingDatagramFailed;
1013         }
1014 
getIsDemoMode()1015         public boolean getIsDemoMode() {
1016             return mIsDemoMode;
1017         }
1018 
getMaxNtnSignalStrengthLevel()1019         public @NtnSignalStrength.NtnSignalStrengthLevel int getMaxNtnSignalStrengthLevel() {
1020             return mMaxNtnSignalStrengthLevel;
1021         }
1022 
getCarrierId()1023         public int getCarrierId() {
1024             return mCarrierId;
1025         }
1026 
getCountOfSatelliteNotificationDisplayed()1027         public int getCountOfSatelliteNotificationDisplayed() {
1028             return mCountOfSatelliteNotificationDisplayed;
1029         }
1030 
getCountOfAutoExitDueToScreenOff()1031         public int getCountOfAutoExitDueToScreenOff() {
1032             return mCountOfAutoExitDueToScreenOff;
1033         }
1034 
getCountOfAutoExitDueToTnNetwork()1035         public int getCountOfAutoExitDueToTnNetwork() {
1036             return mCountOfAutoExitDueToTnNetwork;
1037         }
1038 
getIsEmergency()1039         public boolean getIsEmergency() {
1040             return mIsEmergency;
1041         }
1042 
isNtnOnlyCarrier()1043         public boolean isNtnOnlyCarrier() {
1044             return mIsNtnOnlyCarrier;
1045         }
1046 
getMaxInactivityDurationSec()1047         public int getMaxInactivityDurationSec() {
1048             return mMaxInactivityDurationSec;
1049         }
1050 
1051         /**
1052          * A builder class to create {@link SatelliteSessionParams} data structure class
1053          */
1054         public static class Builder {
1055             private int mSatelliteServiceInitializationResult = -1;
1056             private int mSatelliteTechnology = -1;
1057             private int mTerminationResult = -1;
1058             private long mInitializationProcessingTimeMillis = -1;
1059             private long mTerminationProcessingTimeMillis = -1;
1060             private int mSessionDurationSec = -1;
1061             private int mCountOfOutgoingDatagramSuccess = -1;
1062             private int mCountOfOutgoingDatagramFailed = -1;
1063             private int mCountOfIncomingDatagramSuccess = -1;
1064             private int mCountOfIncomingDatagramFailed = -1;
1065             private boolean mIsDemoMode = false;
1066             private @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel =
1067                     NTN_SIGNAL_STRENGTH_NONE;
1068             private int mCarrierId = UNKNOWN_CARRIER_ID;
1069             private int mCountOfSatelliteNotificationDisplayed = -1;
1070             private int mCountOfAutoExitDueToScreenOff = -1;
1071             private int mCountOfAutoExitDueToTnNetwork = -1;
1072             private boolean mIsEmergency = false;
1073             private boolean mIsNtnOnlyCarrier = false;
1074             private int mMaxInactivityDurationSec = -1;
1075 
1076             /**
1077              * Sets satelliteServiceInitializationResult value of {@link SatelliteSession}
1078              * atom then returns Builder class
1079              */
setSatelliteServiceInitializationResult( int satelliteServiceInitializationResult)1080             public Builder setSatelliteServiceInitializationResult(
1081                     int satelliteServiceInitializationResult) {
1082                 this.mSatelliteServiceInitializationResult = satelliteServiceInitializationResult;
1083                 return this;
1084             }
1085 
1086             /**
1087              * Sets satelliteTechnology value of {@link SatelliteSession} atoms then
1088              * returns Builder class
1089              */
setSatelliteTechnology(int satelliteTechnology)1090             public Builder setSatelliteTechnology(int satelliteTechnology) {
1091                 this.mSatelliteTechnology = satelliteTechnology;
1092                 return this;
1093             }
1094 
1095             /** Sets the satellite de-initialization result. */
setTerminationResult( @atelliteManager.SatelliteResult int result)1096             public Builder setTerminationResult(
1097                     @SatelliteManager.SatelliteResult int result) {
1098                 this.mTerminationResult = result;
1099                 return this;
1100             }
1101 
1102             /** Sets the satellite initialization processing time. */
setInitializationProcessingTime(long processingTime)1103             public Builder setInitializationProcessingTime(long processingTime) {
1104                 this.mInitializationProcessingTimeMillis = processingTime;
1105                 return this;
1106             }
1107 
1108             /** Sets the satellite de-initialization processing time. */
setTerminationProcessingTime(long processingTime)1109             public Builder setTerminationProcessingTime(long processingTime) {
1110                 this.mTerminationProcessingTimeMillis = processingTime;
1111                 return this;
1112             }
1113 
1114             /** Sets the total enabled time for the satellite session. */
setSessionDuration(int sessionDurationSec)1115             public Builder setSessionDuration(int sessionDurationSec) {
1116                 this.mSessionDurationSec = sessionDurationSec;
1117                 return this;
1118             }
1119 
1120             /** Sets the total number of successful outgoing datagram transmission. */
setCountOfOutgoingDatagramSuccess(int countOfoutgoingDatagramSuccess)1121             public Builder setCountOfOutgoingDatagramSuccess(int countOfoutgoingDatagramSuccess) {
1122                 this.mCountOfOutgoingDatagramSuccess = countOfoutgoingDatagramSuccess;
1123                 return this;
1124             }
1125 
1126             /** Sets the total number of failed outgoing datagram transmission. */
setCountOfOutgoingDatagramFailed(int countOfoutgoingDatagramFailed)1127             public Builder setCountOfOutgoingDatagramFailed(int countOfoutgoingDatagramFailed) {
1128                 this.mCountOfOutgoingDatagramFailed = countOfoutgoingDatagramFailed;
1129                 return this;
1130             }
1131 
1132             /** Sets the total number of successful incoming datagram transmission. */
setCountOfIncomingDatagramSuccess(int countOfincomingDatagramSuccess)1133             public Builder setCountOfIncomingDatagramSuccess(int countOfincomingDatagramSuccess) {
1134                 this.mCountOfIncomingDatagramSuccess = countOfincomingDatagramSuccess;
1135                 return this;
1136             }
1137 
1138             /** Sets the total number of failed incoming datagram transmission. */
setCountOfIncomingDatagramFailed(int countOfincomingDatagramFailed)1139             public Builder setCountOfIncomingDatagramFailed(int countOfincomingDatagramFailed) {
1140                 this.mCountOfIncomingDatagramFailed = countOfincomingDatagramFailed;
1141                 return this;
1142             }
1143 
1144             /** Sets whether enabled satellite session is for demo mode or not. */
setIsDemoMode(boolean isDemoMode)1145             public Builder setIsDemoMode(boolean isDemoMode) {
1146                 this.mIsDemoMode = isDemoMode;
1147                 return this;
1148             }
1149 
1150             /** Sets the max ntn signal strength for the satellite session. */
setMaxNtnSignalStrengthLevel( @tnSignalStrength.NtnSignalStrengthLevel int maxNtnSignalStrengthLevel)1151             public Builder setMaxNtnSignalStrengthLevel(
1152                     @NtnSignalStrength.NtnSignalStrengthLevel int maxNtnSignalStrengthLevel) {
1153                 this.mMaxNtnSignalStrengthLevel = maxNtnSignalStrengthLevel;
1154                 return this;
1155             }
1156 
1157             /** Sets the currently active NB-IoT NTN carrier ID. */
setCarrierId(int carrierId)1158             public Builder setCarrierId(int carrierId) {
1159                 this.mCarrierId = carrierId;
1160                 return this;
1161             }
1162 
1163             /**
1164              * Sets Total number of times the user is notified that the device is eligible for
1165              * satellite service for this session.
1166              */
setCountOfSatelliteNotificationDisplayed( int countOfSatelliteNotificationDisplayed)1167             public Builder setCountOfSatelliteNotificationDisplayed(
1168                     int countOfSatelliteNotificationDisplayed) {
1169                 this.mCountOfSatelliteNotificationDisplayed = countOfSatelliteNotificationDisplayed;
1170                 return this;
1171             }
1172 
1173             /**
1174              * Sets Total number of times exit P2P message service automatically due to screen is
1175              * off and timer is expired.
1176              */
setCountOfAutoExitDueToScreenOff( int countOfAutoExitDueToScreenOff)1177             public Builder setCountOfAutoExitDueToScreenOff(
1178                     int countOfAutoExitDueToScreenOff) {
1179                 this.mCountOfAutoExitDueToScreenOff = countOfAutoExitDueToScreenOff;
1180                 return this;
1181             }
1182 
1183             /**
1184              * Sets Total number of times times exit P2P message service automatically due to
1185              * scan TN network.
1186              */
setCountOfAutoExitDueToTnNetwork( int countOfAutoExitDueToTnNetwork)1187             public Builder setCountOfAutoExitDueToTnNetwork(
1188                     int countOfAutoExitDueToTnNetwork) {
1189                 this.mCountOfAutoExitDueToTnNetwork = countOfAutoExitDueToTnNetwork;
1190                 return this;
1191             }
1192 
1193             /** Sets whether enabled satellite session is for emergency or not. */
setIsEmergency(boolean isEmergency)1194             public Builder setIsEmergency(boolean isEmergency) {
1195                 this.mIsEmergency = isEmergency;
1196                 return this;
1197             }
1198 
1199             /**
1200              * Sets isNtnOnlyCarrier value of {@link SatelliteSession} atom
1201              * then returns Builder class
1202             */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)1203             public Builder setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
1204                 this.mIsNtnOnlyCarrier = isNtnOnlyCarrier;
1205                 return this;
1206             }
1207 
1208             /** Sets the max user inactivity duration in seconds. */
setMaxInactivityDurationSec(int maxInactivityDurationSec)1209             public Builder setMaxInactivityDurationSec(int maxInactivityDurationSec) {
1210                 this.mMaxInactivityDurationSec = maxInactivityDurationSec;
1211                 return this;
1212             }
1213 
1214             /**
1215              * Returns SessionParams, which contains whole component of
1216              * {@link SatelliteSession} atom
1217              */
build()1218             public SatelliteSessionParams build() {
1219                 return new SatelliteStats()
1220                         .new SatelliteSessionParams(this);
1221             }
1222         }
1223 
1224         @Override
toString()1225         public String toString() {
1226             return "SessionParams("
1227                     + ", satelliteServiceInitializationResult="
1228                     + mSatelliteServiceInitializationResult
1229                     + ", TerminationResult=" + mTerminationResult
1230                     + ", InitializationProcessingTimeMillis=" + mInitializationProcessingTimeMillis
1231                     + ", TerminationProcessingTimeMillis=" + mTerminationProcessingTimeMillis
1232                     + ", SessionDurationSec=" + mSessionDurationSec
1233                     + ", CountOfOutgoingDatagramSuccess=" + mCountOfOutgoingDatagramSuccess
1234                     + ", CountOfOutgoingDatagramFailed=" + mCountOfOutgoingDatagramFailed
1235                     + ", CountOfIncomingDatagramSuccess=" + mCountOfIncomingDatagramSuccess
1236                     + ", CountOfIncomingDatagramFailed=" + mCountOfIncomingDatagramFailed
1237                     + ", IsDemoMode=" + mIsDemoMode
1238                     + ", MaxNtnSignalStrengthLevel=" + mMaxNtnSignalStrengthLevel
1239                     + ", CarrierId=" + mCarrierId
1240                     + ", CountOfSatelliteNotificationDisplayed"
1241                     + mCountOfSatelliteNotificationDisplayed
1242                     + ", CountOfAutoExitDueToScreenOff" + mCountOfAutoExitDueToScreenOff
1243                     + ", CountOfAutoExitDueToTnNetwork" + mCountOfAutoExitDueToTnNetwork
1244                     + ", IsEmergency=" + mIsEmergency
1245                     + ", IsNtnOnlyCarrier=" + mIsNtnOnlyCarrier
1246                     + ", MaxInactivityDurationSec=" + mMaxInactivityDurationSec
1247                     + ")";
1248         }
1249     }
1250 
1251     /**
1252      * A data class to contain whole component of {@link SatelliteIncomingDatagram} atom.
1253      * Refer to {@link #onSatelliteIncomingDatagramMetrics(SatelliteIncomingDatagramParams)}.
1254      */
1255     public class SatelliteIncomingDatagramParams {
1256         private final int mResultCode;
1257         private final int mDatagramSizeBytes;
1258         private final long mDatagramTransferTimeMillis;
1259         private final boolean mIsDemoMode;
1260         private final int mCarrierId;
1261         private final boolean mIsNtnOnlyCarrier;
1262 
SatelliteIncomingDatagramParams(Builder builder)1263         private SatelliteIncomingDatagramParams(Builder builder) {
1264             this.mResultCode = builder.mResultCode;
1265             this.mDatagramSizeBytes = builder.mDatagramSizeBytes;
1266             this.mDatagramTransferTimeMillis = builder.mDatagramTransferTimeMillis;
1267             this.mIsDemoMode = builder.mIsDemoMode;
1268             this.mCarrierId = builder.mCarrierId;
1269             this.mIsNtnOnlyCarrier = builder.mIsNtnOnlyCarrier;
1270         }
1271 
getResultCode()1272         public int getResultCode() {
1273             return mResultCode;
1274         }
1275 
getDatagramSizeBytes()1276         public int getDatagramSizeBytes() {
1277             return mDatagramSizeBytes;
1278         }
1279 
getDatagramTransferTimeMillis()1280         public long getDatagramTransferTimeMillis() {
1281             return mDatagramTransferTimeMillis;
1282         }
1283 
getIsDemoMode()1284         public boolean getIsDemoMode() {
1285             return mIsDemoMode;
1286         }
1287 
getCarrierId()1288         public int getCarrierId() {
1289             return mCarrierId;
1290         }
1291 
isNtnOnlyCarrier()1292         public boolean isNtnOnlyCarrier() {
1293             return mIsNtnOnlyCarrier;
1294         }
1295 
1296         /**
1297          * A builder class to create {@link SatelliteIncomingDatagramParams} data structure class
1298          */
1299         public static class Builder {
1300             private int mResultCode = -1;
1301             private int mDatagramSizeBytes = -1;
1302             private long mDatagramTransferTimeMillis = -1;
1303             private boolean mIsDemoMode = false;
1304             private int mCarrierId = UNKNOWN_CARRIER_ID;
1305             private boolean mIsNtnOnlyCarrier = false;
1306 
1307             /**
1308              * Sets resultCode value of {@link SatelliteIncomingDatagram} atom
1309              * then returns Builder class
1310              */
setResultCode(int resultCode)1311             public Builder setResultCode(int resultCode) {
1312                 this.mResultCode = resultCode;
1313                 return this;
1314             }
1315 
1316             /**
1317              * Sets datagramSizeBytes value of {@link SatelliteIncomingDatagram} atom
1318              * then returns Builder class
1319              */
setDatagramSizeBytes(int datagramSizeBytes)1320             public Builder setDatagramSizeBytes(int datagramSizeBytes) {
1321                 this.mDatagramSizeBytes = datagramSizeBytes;
1322                 return this;
1323             }
1324 
1325             /**
1326              * Sets datagramTransferTimeMillis value of {@link SatelliteIncomingDatagram} atom
1327              * then returns Builder class
1328              */
setDatagramTransferTimeMillis(long datagramTransferTimeMillis)1329             public Builder setDatagramTransferTimeMillis(long datagramTransferTimeMillis) {
1330                 this.mDatagramTransferTimeMillis = datagramTransferTimeMillis;
1331                 return this;
1332             }
1333 
1334             /**
1335              * Sets whether transferred datagram is in demo mode or not
1336              * then returns Builder class
1337              */
setIsDemoMode(boolean isDemoMode)1338             public Builder setIsDemoMode(boolean isDemoMode) {
1339                 this.mIsDemoMode = isDemoMode;
1340                 return this;
1341             }
1342 
1343             /** Sets the currently active NB-IoT NTN carrier ID. */
setCarrierId(int carrierId)1344             public Builder setCarrierId(int carrierId) {
1345                 this.mCarrierId = carrierId;
1346                 return this;
1347             }
1348 
1349             /**
1350              * Sets isNtnOnlyCarrier value of {@link SatelliteIncomingDatagram} atom
1351              * then returns Builder class
1352             */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)1353             public Builder setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
1354                 this.mIsNtnOnlyCarrier = isNtnOnlyCarrier;
1355                 return this;
1356             }
1357 
1358             /**
1359              * Returns IncomingDatagramParams, which contains whole component of
1360              * {@link SatelliteIncomingDatagram} atom
1361              */
build()1362             public SatelliteIncomingDatagramParams build() {
1363                 return new SatelliteStats()
1364                         .new SatelliteIncomingDatagramParams(Builder.this);
1365             }
1366         }
1367 
1368         @Override
toString()1369         public String toString() {
1370             return "IncomingDatagramParams("
1371                     + ", resultCode=" + mResultCode
1372                     + ", datagramSizeBytes=" + mDatagramSizeBytes
1373                     + ", datagramTransferTimeMillis=" + mDatagramTransferTimeMillis
1374                     + ", isDemoMode=" + mIsDemoMode
1375                     + ", CarrierId=" + mCarrierId
1376                     + ", isNtnOnlyCarrier=" + mIsNtnOnlyCarrier
1377                     + ")";
1378         }
1379     }
1380 
1381     /**
1382      * A data class to contain whole component of {@link SatelliteOutgoingDatagram} atom.
1383      * Refer to {@link #onSatelliteOutgoingDatagramMetrics(SatelliteOutgoingDatagramParams)}.
1384      */
1385     public class SatelliteOutgoingDatagramParams {
1386         private final int mDatagramType;
1387         private final int mResultCode;
1388         private final int mDatagramSizeBytes;
1389         private final long mDatagramTransferTimeMillis;
1390         private final boolean mIsDemoMode;
1391         private final int mCarrierId;
1392         private final boolean mIsNtnOnlyCarrier;
1393 
SatelliteOutgoingDatagramParams(Builder builder)1394         private SatelliteOutgoingDatagramParams(Builder builder) {
1395             this.mDatagramType = builder.mDatagramType;
1396             this.mResultCode = builder.mResultCode;
1397             this.mDatagramSizeBytes = builder.mDatagramSizeBytes;
1398             this.mDatagramTransferTimeMillis = builder.mDatagramTransferTimeMillis;
1399             this.mIsDemoMode = builder.mIsDemoMode;
1400             this.mCarrierId = builder.mCarrierId;
1401             this.mIsNtnOnlyCarrier = builder.mIsNtnOnlyCarrier;
1402         }
1403 
getDatagramType()1404         public int getDatagramType() {
1405             return mDatagramType;
1406         }
1407 
getResultCode()1408         public int getResultCode() {
1409             return mResultCode;
1410         }
1411 
getDatagramSizeBytes()1412         public int getDatagramSizeBytes() {
1413             return mDatagramSizeBytes;
1414         }
1415 
getDatagramTransferTimeMillis()1416         public long getDatagramTransferTimeMillis() {
1417             return mDatagramTransferTimeMillis;
1418         }
1419 
getIsDemoMode()1420         public boolean getIsDemoMode() {
1421             return mIsDemoMode;
1422         }
1423 
getCarrierId()1424         public int getCarrierId() {
1425             return mCarrierId;
1426         }
1427 
isNtnOnlyCarrier()1428         public boolean isNtnOnlyCarrier() {
1429             return mIsNtnOnlyCarrier;
1430         }
1431 
1432         /**
1433          * A builder class to create {@link SatelliteOutgoingDatagramParams} data structure class
1434          */
1435         public static class Builder {
1436             private int mDatagramType = -1;
1437             private int mResultCode = -1;
1438             private int mDatagramSizeBytes = -1;
1439             private long mDatagramTransferTimeMillis = -1;
1440             private boolean mIsDemoMode = false;
1441             private int mCarrierId = UNKNOWN_CARRIER_ID;
1442             private boolean mIsNtnOnlyCarrier = false;
1443 
1444             /**
1445              * Sets datagramType value of {@link SatelliteOutgoingDatagram} atom
1446              * then returns Builder class
1447              */
setDatagramType(int datagramType)1448             public Builder setDatagramType(int datagramType) {
1449                 this.mDatagramType = datagramType;
1450                 return this;
1451             }
1452 
1453             /**
1454              * Sets resultCode value of {@link SatelliteOutgoingDatagram} atom
1455              * then returns Builder class
1456              */
setResultCode(int resultCode)1457             public Builder setResultCode(int resultCode) {
1458                 this.mResultCode = resultCode;
1459                 return this;
1460             }
1461 
1462             /**
1463              * Sets datagramSizeBytes value of {@link SatelliteOutgoingDatagram} atom
1464              * then returns Builder class
1465              */
setDatagramSizeBytes(int datagramSizeBytes)1466             public Builder setDatagramSizeBytes(int datagramSizeBytes) {
1467                 this.mDatagramSizeBytes = datagramSizeBytes;
1468                 return this;
1469             }
1470 
1471             /**
1472              * Sets datagramTransferTimeMillis value of {@link SatelliteOutgoingDatagram} atom
1473              * then returns Builder class
1474              */
setDatagramTransferTimeMillis(long datagramTransferTimeMillis)1475             public Builder setDatagramTransferTimeMillis(long datagramTransferTimeMillis) {
1476                 this.mDatagramTransferTimeMillis = datagramTransferTimeMillis;
1477                 return this;
1478             }
1479 
1480             /**
1481              * Sets whether transferred datagram is in demo mode or not
1482              * then returns Builder class
1483              */
setIsDemoMode(boolean isDemoMode)1484             public Builder setIsDemoMode(boolean isDemoMode) {
1485                 this.mIsDemoMode = isDemoMode;
1486                 return this;
1487             }
1488 
1489             /** Sets the currently active NB-IoT NTN carrier ID. */
setCarrierId(int carrierId)1490             public Builder setCarrierId(int carrierId) {
1491                 this.mCarrierId = carrierId;
1492                 return this;
1493             }
1494 
1495             /**
1496              * Sets isNtnOnlyCarrier value of {@link SatelliteOutgoingDatagram} atom
1497              * then returns Builder class
1498             */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)1499             public Builder setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
1500                 this.mIsNtnOnlyCarrier = isNtnOnlyCarrier;
1501                 return this;
1502             }
1503 
1504             /**
1505              * Returns OutgoingDatagramParams, which contains whole component of
1506              * {@link SatelliteOutgoingDatagram} atom
1507              */
build()1508             public SatelliteOutgoingDatagramParams build() {
1509                 return new SatelliteStats()
1510                         .new SatelliteOutgoingDatagramParams(Builder.this);
1511             }
1512         }
1513 
1514         @Override
toString()1515         public String toString() {
1516             return "OutgoingDatagramParams("
1517                     + "datagramType=" + mDatagramType
1518                     + ", resultCode=" + mResultCode
1519                     + ", datagramSizeBytes=" + mDatagramSizeBytes
1520                     + ", datagramTransferTimeMillis=" + mDatagramTransferTimeMillis
1521                     + ", isDemoMode=" + mIsDemoMode
1522                     + ", CarrierId=" + mCarrierId
1523                     + ", isNtnOnlyCarrier=" + mIsNtnOnlyCarrier
1524                     + ")";
1525         }
1526     }
1527 
1528     /**
1529      * A data class to contain whole component of {@link SatelliteProvision} atom.
1530      * Refer to {@link #onSatelliteProvisionMetrics(SatelliteProvisionParams)}.
1531      */
1532     public class SatelliteProvisionParams {
1533         private final int mResultCode;
1534         private final int mProvisioningTimeSec;
1535         private final boolean mIsProvisionRequest;
1536         private final boolean mIsCanceled;
1537         private final int mCarrierId;
1538         private final boolean mIsNtnOnlyCarrier;
1539 
SatelliteProvisionParams(Builder builder)1540         private SatelliteProvisionParams(Builder builder) {
1541             this.mResultCode = builder.mResultCode;
1542             this.mProvisioningTimeSec = builder.mProvisioningTimeSec;
1543             this.mIsProvisionRequest = builder.mIsProvisionRequest;
1544             this.mIsCanceled = builder.mIsCanceled;
1545             this.mCarrierId = builder.mCarrierId;
1546             this.mIsNtnOnlyCarrier = builder.mIsNtnOnlyCarrier;
1547         }
1548 
getResultCode()1549         public int getResultCode() {
1550             return mResultCode;
1551         }
1552 
getProvisioningTimeSec()1553         public int getProvisioningTimeSec() {
1554             return mProvisioningTimeSec;
1555         }
1556 
getIsProvisionRequest()1557         public boolean getIsProvisionRequest() {
1558             return mIsProvisionRequest;
1559         }
1560 
getIsCanceled()1561         public boolean getIsCanceled() {
1562             return mIsCanceled;
1563         }
1564 
getCarrierId()1565         public int getCarrierId() {
1566             return mCarrierId;
1567         }
1568 
isNtnOnlyCarrier()1569         public boolean isNtnOnlyCarrier() {
1570             return mIsNtnOnlyCarrier;
1571         }
1572 
1573         /**
1574          * A builder class to create {@link SatelliteProvisionParams} data structure class
1575          */
1576         public static class Builder {
1577             private int mResultCode = -1;
1578             private int mProvisioningTimeSec = -1;
1579             private boolean mIsProvisionRequest = false;
1580             private boolean mIsCanceled = false;
1581             private int mCarrierId = UNKNOWN_CARRIER_ID;
1582             private boolean mIsNtnOnlyCarrier = false;
1583 
1584             /**
1585              * Sets resultCode value of {@link SatelliteProvision} atom
1586              * then returns Builder class
1587              */
setResultCode(int resultCode)1588             public Builder setResultCode(int resultCode) {
1589                 this.mResultCode = resultCode;
1590                 return this;
1591             }
1592 
1593             /**
1594              * Sets provisioningTimeSec value of {@link SatelliteProvision} atom
1595              * then returns Builder class
1596              */
setProvisioningTimeSec(int provisioningTimeSec)1597             public Builder setProvisioningTimeSec(int provisioningTimeSec) {
1598                 this.mProvisioningTimeSec = provisioningTimeSec;
1599                 return this;
1600             }
1601 
1602             /**
1603              * Sets isProvisionRequest value of {@link SatelliteProvision} atom
1604              * then returns Builder class
1605              */
setIsProvisionRequest(boolean isProvisionRequest)1606             public Builder setIsProvisionRequest(boolean isProvisionRequest) {
1607                 this.mIsProvisionRequest = isProvisionRequest;
1608                 return this;
1609             }
1610 
1611             /**
1612              * Sets isCanceled value of {@link SatelliteProvision} atom
1613              * then returns Builder class
1614              */
setIsCanceled(boolean isCanceled)1615             public Builder setIsCanceled(boolean isCanceled) {
1616                 this.mIsCanceled = isCanceled;
1617                 return this;
1618             }
1619 
1620             /** Sets the currently active NB-IoT NTN carrier ID. */
setCarrierId(int carrierId)1621             public Builder setCarrierId(int carrierId) {
1622                 this.mCarrierId = carrierId;
1623                 return this;
1624             }
1625 
1626             /**
1627              * Sets isNtnOnlyCarrier value of {@link SatelliteProvision} atom
1628              * then returns Builder class
1629             */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)1630             public Builder setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
1631                 this.mIsNtnOnlyCarrier = isNtnOnlyCarrier;
1632                 return this;
1633             }
1634 
1635             /**
1636              * Returns ProvisionParams, which contains whole component of
1637              * {@link SatelliteProvision} atom
1638              */
build()1639             public SatelliteProvisionParams build() {
1640                 return new SatelliteStats()
1641                         .new SatelliteProvisionParams(Builder.this);
1642             }
1643         }
1644 
1645         @Override
toString()1646         public String toString() {
1647             return "ProvisionParams("
1648                     + "resultCode=" + mResultCode
1649                     + ", provisioningTimeSec=" + mProvisioningTimeSec
1650                     + ", isProvisionRequest=" + mIsProvisionRequest
1651                     + ", isCanceled" + mIsCanceled
1652                     + ", CarrierId=" + mCarrierId
1653                     + ", isNtnOnlyCarrier=" + mIsNtnOnlyCarrier
1654                     + ")";
1655         }
1656     }
1657 
1658     /**
1659      * A data class to contain whole component of {@link SatelliteSosMessageRecommender} atom.
1660      * Refer to {@link #onSatelliteSosMessageRecommender(SatelliteSosMessageRecommenderParams)}.
1661      */
1662     public class SatelliteSosMessageRecommenderParams {
1663         private final boolean mIsDisplaySosMessageSent;
1664         private final int mCountOfTimerStarted;
1665         private final boolean mIsImsRegistered;
1666         private final int mCellularServiceState;
1667         private final boolean mIsMultiSim;
1668         private final int mRecommendingHandoverType;
1669         private final boolean mIsSatelliteAllowedInCurrentLocation;
1670         private final boolean mIsWifiConnected;
1671         private final int mCarrierId;
1672         private final boolean mIsNtnOnlyCarrier;
1673 
SatelliteSosMessageRecommenderParams(Builder builder)1674         private SatelliteSosMessageRecommenderParams(Builder builder) {
1675             this.mIsDisplaySosMessageSent = builder.mIsDisplaySosMessageSent;
1676             this.mCountOfTimerStarted = builder.mCountOfTimerStarted;
1677             this.mIsImsRegistered = builder.mIsImsRegistered;
1678             this.mCellularServiceState = builder.mCellularServiceState;
1679             this.mIsMultiSim = builder.mIsMultiSim;
1680             this.mRecommendingHandoverType = builder.mRecommendingHandoverType;
1681             this.mIsSatelliteAllowedInCurrentLocation =
1682                     builder.mIsSatelliteAllowedInCurrentLocation;
1683             this.mIsWifiConnected = builder.mIsWifiConnected;
1684             this.mCarrierId = builder.mCarrierId;
1685             this.mIsNtnOnlyCarrier = builder.mIsNtnOnlyCarrier;
1686         }
1687 
isDisplaySosMessageSent()1688         public boolean isDisplaySosMessageSent() {
1689             return mIsDisplaySosMessageSent;
1690         }
1691 
getCountOfTimerStarted()1692         public int getCountOfTimerStarted() {
1693             return mCountOfTimerStarted;
1694         }
1695 
isImsRegistered()1696         public boolean isImsRegistered() {
1697             return mIsImsRegistered;
1698         }
1699 
getCellularServiceState()1700         public int getCellularServiceState() {
1701             return mCellularServiceState;
1702         }
1703 
isMultiSim()1704         public boolean isMultiSim() {
1705             return mIsMultiSim;
1706         }
1707 
getRecommendingHandoverType()1708         public int getRecommendingHandoverType() {
1709             return mRecommendingHandoverType;
1710         }
1711 
isSatelliteAllowedInCurrentLocation()1712         public boolean isSatelliteAllowedInCurrentLocation() {
1713             return mIsSatelliteAllowedInCurrentLocation;
1714         }
1715 
isWifiConnected()1716         public boolean isWifiConnected() {
1717             return mIsWifiConnected;
1718         }
1719 
getCarrierId()1720         public int getCarrierId() {
1721             return mCarrierId;
1722         }
1723 
isNtnOnlyCarrier()1724         public boolean isNtnOnlyCarrier() {
1725             return mIsNtnOnlyCarrier;
1726         }
1727 
1728         /**
1729          * A builder class to create {@link SatelliteSosMessageRecommender} data structure class
1730          */
1731         public static class Builder {
1732             private boolean mIsDisplaySosMessageSent = false;
1733             private int mCountOfTimerStarted = -1;
1734             private boolean mIsImsRegistered = false;
1735             private int mCellularServiceState = -1;
1736             private boolean mIsMultiSim = false;
1737             private int mRecommendingHandoverType = -1;
1738             private boolean mIsSatelliteAllowedInCurrentLocation = false;
1739             private boolean mIsWifiConnected = false;
1740             private int mCarrierId = UNKNOWN_CARRIER_ID;
1741             private boolean mIsNtnOnlyCarrier = false;
1742 
1743             /**
1744              * Sets resultCode value of {@link SatelliteSosMessageRecommender} atom
1745              * then returns Builder class
1746              */
setDisplaySosMessageSent( boolean isDisplaySosMessageSent)1747             public Builder setDisplaySosMessageSent(
1748                     boolean isDisplaySosMessageSent) {
1749                 this.mIsDisplaySosMessageSent = isDisplaySosMessageSent;
1750                 return this;
1751             }
1752 
1753             /**
1754              * Sets countOfTimerIsStarted value of {@link SatelliteSosMessageRecommender} atom
1755              * then returns Builder class
1756              */
setCountOfTimerStarted(int countOfTimerStarted)1757             public Builder setCountOfTimerStarted(int countOfTimerStarted) {
1758                 this.mCountOfTimerStarted = countOfTimerStarted;
1759                 return this;
1760             }
1761 
1762             /**
1763              * Sets isImsRegistered value of {@link SatelliteSosMessageRecommender} atom
1764              * then returns Builder class
1765              */
setImsRegistered(boolean isImsRegistered)1766             public Builder setImsRegistered(boolean isImsRegistered) {
1767                 this.mIsImsRegistered = isImsRegistered;
1768                 return this;
1769             }
1770 
1771             /**
1772              * Sets cellularServiceState value of {@link SatelliteSosMessageRecommender} atom
1773              * then returns Builder class
1774              */
setCellularServiceState(int cellularServiceState)1775             public Builder setCellularServiceState(int cellularServiceState) {
1776                 this.mCellularServiceState = cellularServiceState;
1777                 return this;
1778             }
1779 
1780             /**
1781              * Sets isMultiSim value of {@link SatelliteSosMessageRecommender} atom
1782              * then returns Builder class
1783              */
setIsMultiSim(boolean isMultiSim)1784             public Builder setIsMultiSim(boolean isMultiSim) {
1785                 this.mIsMultiSim = isMultiSim;
1786                 return this;
1787             }
1788 
1789             /**
1790              * Sets recommendingHandoverType value of {@link SatelliteSosMessageRecommender} atom
1791              * then returns Builder class
1792              */
setRecommendingHandoverType(int recommendingHandoverType)1793             public Builder setRecommendingHandoverType(int recommendingHandoverType) {
1794                 this.mRecommendingHandoverType = recommendingHandoverType;
1795                 return this;
1796             }
1797 
1798             /**
1799              * Sets isSatelliteAllowedInCurrentLocation value of
1800              * {@link SatelliteSosMessageRecommender} atom then returns Builder class.
1801              */
setIsSatelliteAllowedInCurrentLocation( boolean satelliteAllowedInCurrentLocation)1802             public Builder setIsSatelliteAllowedInCurrentLocation(
1803                     boolean satelliteAllowedInCurrentLocation) {
1804                 mIsSatelliteAllowedInCurrentLocation = satelliteAllowedInCurrentLocation;
1805                 return this;
1806             }
1807 
1808             /**
1809              * Sets whether Wi-Fi is connected value of {@link SatelliteSosMessageRecommender} atom
1810              * then returns Builder class
1811              */
setIsWifiConnected(boolean isWifiConnected)1812             public Builder setIsWifiConnected(boolean isWifiConnected) {
1813                 this.mIsWifiConnected = isWifiConnected;
1814                 return this;
1815             }
1816 
1817             /**
1818              * Sets carrier ID value of {@link SatelliteSosMessageRecommender} atom then returns
1819              * Builder class.
1820              */
setCarrierId(int carrierId)1821             public Builder setCarrierId(int carrierId) {
1822                 this.mCarrierId = carrierId;
1823                 return this;
1824             }
1825 
1826             /**
1827              * Sets isNtnOnlyCarrier value of {@link SatelliteSosMessageRecommender} atom
1828              * then returns Builder class
1829             */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)1830             public Builder setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
1831                 this.mIsNtnOnlyCarrier = isNtnOnlyCarrier;
1832                 return this;
1833             }
1834 
1835             /**
1836              * Returns SosMessageRecommenderParams, which contains whole component of
1837              * {@link SatelliteSosMessageRecommenderParams} atom
1838              */
build()1839             public SatelliteSosMessageRecommenderParams build() {
1840                 return new SatelliteStats()
1841                         .new SatelliteSosMessageRecommenderParams(Builder.this);
1842             }
1843         }
1844 
1845         @Override
toString()1846         public String toString() {
1847             return "SosMessageRecommenderParams("
1848                     + "isDisplaySosMessageSent=" + mIsDisplaySosMessageSent
1849                     + ", countOfTimerStarted=" + mCountOfTimerStarted
1850                     + ", isImsRegistered=" + mIsImsRegistered
1851                     + ", cellularServiceState=" + mCellularServiceState
1852                     + ", isMultiSim=" + mIsMultiSim
1853                     + ", recommendingHandoverType=" + mRecommendingHandoverType
1854                     + ", isSatelliteAllowedInCurrentLocation="
1855                     + mIsSatelliteAllowedInCurrentLocation
1856                     + ", isWifiConnected=" + mIsWifiConnected
1857                     + ", carrierId=" + mCarrierId
1858                     + ", isNtnOnlyCarrier=" + mIsNtnOnlyCarrier
1859                     + ")";
1860         }
1861     }
1862 
1863     /**
1864      * A data class to contain whole component of {@link CarrierRoamingSatelliteSession} atom.
1865      * Refer to {@link #onCarrierRoamingSatelliteSessionMetrics(
1866      * CarrierRoamingSatelliteSessionParams)}.
1867      */
1868     public class CarrierRoamingSatelliteSessionParams {
1869         private final int mCarrierId;
1870         private final boolean mIsNtnRoamingInHomeCountry;
1871         private final int mTotalSatelliteModeTimeSec;
1872         private final int mNumberOfSatelliteConnections;
1873         private final int mAvgDurationOfSatelliteConnectionSec;
1874         private final int mSatelliteConnectionGapMinSec;
1875         private final int mSatelliteConnectionGapAvgSec;
1876         private final int mSatelliteConnectionGapMaxSec;
1877         private final int mRsrpAvg;
1878         private final int mRsrpMedian;
1879         private final int mRssnrAvg;
1880         private final int mRssnrMedian;
1881         private final int mCountOfIncomingSms;
1882         private final int mCountOfOutgoingSms;
1883         private final int mCountOfIncomingMms;
1884         private final int mCountOfOutgoingMms;
1885         private final int[] mSupportedSatelliteServices;
1886         private final int mServiceDataPolicy;
1887         private final long mSatelliteDataConsumedBytes;
1888         private final boolean mIsMultiSim;
1889         private final boolean mIsNbIotNtn;
1890 
CarrierRoamingSatelliteSessionParams(Builder builder)1891         private CarrierRoamingSatelliteSessionParams(Builder builder) {
1892             this.mCarrierId = builder.mCarrierId;
1893             this.mIsNtnRoamingInHomeCountry = builder.mIsNtnRoamingInHomeCountry;
1894             this.mTotalSatelliteModeTimeSec = builder.mTotalSatelliteModeTimeSec;
1895             this.mNumberOfSatelliteConnections = builder.mNumberOfSatelliteConnections;
1896             this.mAvgDurationOfSatelliteConnectionSec =
1897                     builder.mAvgDurationOfSatelliteConnectionSec;
1898             this.mSatelliteConnectionGapMinSec = builder.mSatelliteConnectionGapMinSec;
1899             this.mSatelliteConnectionGapAvgSec = builder.mSatelliteConnectionGapAvgSec;
1900             this.mSatelliteConnectionGapMaxSec = builder.mSatelliteConnectionGapMaxSec;
1901             this.mRsrpAvg = builder.mRsrpAvg;
1902             this.mRsrpMedian = builder.mRsrpMedian;
1903             this.mRssnrAvg = builder.mRssnrAvg;
1904             this.mRssnrMedian = builder.mRssnrMedian;
1905             this.mCountOfIncomingSms = builder.mCountOfIncomingSms;
1906             this.mCountOfOutgoingSms = builder.mCountOfOutgoingSms;
1907             this.mCountOfIncomingMms = builder.mCountOfIncomingMms;
1908             this.mCountOfOutgoingMms = builder.mCountOfOutgoingMms;
1909             this.mSupportedSatelliteServices = builder.mSupportedSatelliteServices;
1910             this.mServiceDataPolicy = builder.mServiceDataPolicy;
1911             this.mSatelliteDataConsumedBytes =
1912                     builder.mSatelliteDataConsumedBytes;
1913             this.mIsMultiSim = builder.mIsMultiSim;
1914             this.mIsNbIotNtn = builder.mIsNbIotNtn;
1915         }
1916 
getCarrierId()1917         public int getCarrierId() {
1918             return mCarrierId;
1919         }
1920 
getIsNtnRoamingInHomeCountry()1921         public boolean getIsNtnRoamingInHomeCountry() {
1922             return mIsNtnRoamingInHomeCountry;
1923         }
1924 
getTotalSatelliteModeTimeSec()1925         public int getTotalSatelliteModeTimeSec() {
1926             return mTotalSatelliteModeTimeSec;
1927         }
1928 
getNumberOfSatelliteConnections()1929         public int getNumberOfSatelliteConnections() {
1930             return mNumberOfSatelliteConnections;
1931         }
1932 
getAvgDurationOfSatelliteConnectionSec()1933         public int getAvgDurationOfSatelliteConnectionSec() {
1934             return mAvgDurationOfSatelliteConnectionSec;
1935         }
1936 
getSatelliteConnectionGapMinSec()1937         public int getSatelliteConnectionGapMinSec() {
1938             return mSatelliteConnectionGapMinSec;
1939         }
1940 
getSatelliteConnectionGapAvgSec()1941         public int getSatelliteConnectionGapAvgSec() {
1942             return mSatelliteConnectionGapAvgSec;
1943         }
1944 
getSatelliteConnectionGapMaxSec()1945         public int getSatelliteConnectionGapMaxSec() {
1946             return mSatelliteConnectionGapMaxSec;
1947         }
1948 
getRsrpAvg()1949         public int getRsrpAvg() {
1950             return mRsrpAvg;
1951         }
1952 
getRsrpMedian()1953         public int getRsrpMedian() {
1954             return mRsrpMedian;
1955         }
1956 
getRssnrAvg()1957         public int getRssnrAvg() {
1958             return mRssnrAvg;
1959         }
1960 
getRssnrMedian()1961         public int getRssnrMedian() {
1962             return mRssnrMedian;
1963         }
1964 
getCountOfIncomingSms()1965         public int getCountOfIncomingSms() {
1966             return mCountOfIncomingSms;
1967         }
1968 
getCountOfOutgoingSms()1969         public int getCountOfOutgoingSms() {
1970             return mCountOfOutgoingSms;
1971         }
1972 
getCountOfIncomingMms()1973         public int getCountOfIncomingMms() {
1974             return mCountOfIncomingMms;
1975         }
1976 
getCountOfOutgoingMms()1977         public int getCountOfOutgoingMms() {
1978             return mCountOfOutgoingMms;
1979         }
1980 
getSupportedSatelliteServices()1981         public int[] getSupportedSatelliteServices() {
1982             return mSupportedSatelliteServices;
1983         }
1984 
getServiceDataPolicy()1985         public int getServiceDataPolicy() {
1986             return mServiceDataPolicy;
1987         }
1988 
getSatelliteDataConsumedBytes()1989         public long getSatelliteDataConsumedBytes() {
1990             return mSatelliteDataConsumedBytes;
1991         }
1992 
isMultiSim()1993         public boolean isMultiSim() {
1994             return mIsMultiSim;
1995         }
1996 
isNbIotNtn()1997         public boolean isNbIotNtn() {
1998             return mIsNbIotNtn;
1999         }
2000 
2001         /**
2002          * A builder class to create {@link CarrierRoamingSatelliteSessionParams} data structure
2003          * class
2004          */
2005         public static class Builder {
2006             private int mCarrierId = -1;
2007             private boolean mIsNtnRoamingInHomeCountry = false;
2008             private int mTotalSatelliteModeTimeSec = 0;
2009             private int mNumberOfSatelliteConnections = 0;
2010             private int mAvgDurationOfSatelliteConnectionSec = 0;
2011             private int mSatelliteConnectionGapMinSec = 0;
2012             private int mSatelliteConnectionGapAvgSec = 0;
2013             private int mSatelliteConnectionGapMaxSec = 0;
2014             private int mRsrpAvg = 0;
2015             private int mRsrpMedian = 0;
2016             private int mRssnrAvg = 0;
2017             private int mRssnrMedian = 0;
2018             private int mCountOfIncomingSms = 0;
2019             private int mCountOfOutgoingSms = 0;
2020             private int mCountOfIncomingMms = 0;
2021             private int mCountOfOutgoingMms = 0;
2022             private int[] mSupportedSatelliteServices = new int[0];
2023             int mServiceDataPolicy =
2024                     SatelliteConstants.SATELLITE_ENTITLEMENT_SERVICE_POLICY_UNKNOWN;
2025             long mSatelliteDataConsumedBytes = 0L;
2026             private boolean mIsMultiSim = false;
2027             private boolean mIsNbIotNtn = false;
2028 
2029             /**
2030              * Sets carrierId value of {@link CarrierRoamingSatelliteSession} atom
2031              * then returns Builder class
2032              */
setCarrierId(int carrierId)2033             public Builder setCarrierId(int carrierId) {
2034                 this.mCarrierId = carrierId;
2035                 return this;
2036             }
2037 
2038             /**
2039              * Sets isNtnRoamingInHomeCountry value of {@link CarrierRoamingSatelliteSession} atom
2040              * then returns Builder class
2041              */
setIsNtnRoamingInHomeCountry(boolean isNtnRoamingInHomeCountry)2042             public Builder setIsNtnRoamingInHomeCountry(boolean isNtnRoamingInHomeCountry) {
2043                 this.mIsNtnRoamingInHomeCountry = isNtnRoamingInHomeCountry;
2044                 return this;
2045             }
2046 
2047             /**
2048              * Sets totalSatelliteModeTimeSec value of {@link CarrierRoamingSatelliteSession} atom
2049              * then returns Builder class
2050              */
setTotalSatelliteModeTimeSec(int totalSatelliteModeTimeSec)2051             public Builder setTotalSatelliteModeTimeSec(int totalSatelliteModeTimeSec) {
2052                 this.mTotalSatelliteModeTimeSec = totalSatelliteModeTimeSec;
2053                 return this;
2054             }
2055 
2056 
2057             /**
2058              * Sets numberOfSatelliteConnections value of {@link CarrierRoamingSatelliteSession}
2059              * atom then returns Builder class
2060              */
setNumberOfSatelliteConnections(int numberOfSatelliteConnections)2061             public Builder setNumberOfSatelliteConnections(int numberOfSatelliteConnections) {
2062                 this.mNumberOfSatelliteConnections = numberOfSatelliteConnections;
2063                 return this;
2064             }
2065 
2066             /**
2067              * Sets avgDurationOfSatelliteConnectionSec value of
2068              * {@link CarrierRoamingSatelliteSession} atom then returns Builder class
2069              */
setAvgDurationOfSatelliteConnectionSec( int avgDurationOfSatelliteConnectionSec)2070             public Builder setAvgDurationOfSatelliteConnectionSec(
2071                     int avgDurationOfSatelliteConnectionSec) {
2072                 this.mAvgDurationOfSatelliteConnectionSec = avgDurationOfSatelliteConnectionSec;
2073                 return this;
2074             }
2075 
2076             /**
2077              * Sets satelliteConnectionGapMinSec value of {@link CarrierRoamingSatelliteSession}
2078              * atom then returns Builder class
2079              */
setSatelliteConnectionGapMinSec(int satelliteConnectionGapMinSec)2080             public Builder setSatelliteConnectionGapMinSec(int satelliteConnectionGapMinSec) {
2081                 this.mSatelliteConnectionGapMinSec = satelliteConnectionGapMinSec;
2082                 return this;
2083             }
2084 
2085             /**
2086              * Sets satelliteConnectionGapAvgSec value of {@link CarrierRoamingSatelliteSession}
2087              * atom then returns Builder class
2088              */
setSatelliteConnectionGapAvgSec(int satelliteConnectionGapAvgSec)2089             public Builder setSatelliteConnectionGapAvgSec(int satelliteConnectionGapAvgSec) {
2090                 this.mSatelliteConnectionGapAvgSec = satelliteConnectionGapAvgSec;
2091                 return this;
2092             }
2093 
2094             /**
2095              * Sets satelliteConnectionGapMaxSec value of {@link CarrierRoamingSatelliteSession}
2096              * atom then returns Builder class
2097              */
setSatelliteConnectionGapMaxSec(int satelliteConnectionGapMaxSec)2098             public Builder setSatelliteConnectionGapMaxSec(int satelliteConnectionGapMaxSec) {
2099                 this.mSatelliteConnectionGapMaxSec = satelliteConnectionGapMaxSec;
2100                 return this;
2101             }
2102 
2103             /**
2104              * Sets rsrpAvg value of {@link CarrierRoamingSatelliteSession}
2105              * atom then returns Builder class
2106              */
setRsrpAvg(int rsrpAvg)2107             public Builder setRsrpAvg(int rsrpAvg) {
2108                 this.mRsrpAvg = rsrpAvg;
2109                 return this;
2110             }
2111 
2112             /**
2113              * Sets rsrpMedian value of {@link CarrierRoamingSatelliteSession}
2114              * atom then returns Builder class
2115              */
setRsrpMedian(int rsrpMedian)2116             public Builder setRsrpMedian(int rsrpMedian) {
2117                 this.mRsrpMedian = rsrpMedian;
2118                 return this;
2119             }
2120 
2121             /**
2122              * Sets rssnrAvg value of {@link CarrierRoamingSatelliteSession}
2123              * atom then returns Builder class
2124              */
setRssnrAvg(int rssnrAvg)2125             public Builder setRssnrAvg(int rssnrAvg) {
2126                 this.mRssnrAvg = rssnrAvg;
2127                 return this;
2128             }
2129 
2130             /**
2131              * Sets rssnrMedian value of {@link CarrierRoamingSatelliteSession}
2132              * atom then returns Builder class
2133              */
setRssnrMedian(int rssnrMedian)2134             public Builder setRssnrMedian(int rssnrMedian) {
2135                 this.mRssnrMedian = rssnrMedian;
2136                 return this;
2137             }
2138 
2139 
2140             /**
2141              * Sets countOfIncomingSms value of {@link CarrierRoamingSatelliteSession}
2142              * atom then returns Builder class
2143              */
setCountOfIncomingSms(int countOfIncomingSms)2144             public Builder setCountOfIncomingSms(int countOfIncomingSms) {
2145                 this.mCountOfIncomingSms = countOfIncomingSms;
2146                 return this;
2147             }
2148 
2149             /**
2150              * Sets countOfOutgoingSms value of {@link CarrierRoamingSatelliteSession}
2151              * atom then returns Builder class
2152              */
setCountOfOutgoingSms(int countOfOutgoingSms)2153             public Builder setCountOfOutgoingSms(int countOfOutgoingSms) {
2154                 this.mCountOfOutgoingSms = countOfOutgoingSms;
2155                 return this;
2156             }
2157 
2158             /**
2159              * Sets countOfIncomingMms value of {@link CarrierRoamingSatelliteSession}
2160              * atom then returns Builder class
2161              */
setCountOfIncomingMms(int countOfIncomingMms)2162             public Builder setCountOfIncomingMms(int countOfIncomingMms) {
2163                 this.mCountOfIncomingMms = countOfIncomingMms;
2164                 return this;
2165             }
2166 
2167             /**
2168              * Sets countOfOutgoingMms value of {@link CarrierRoamingSatelliteSession}
2169              * atom then returns Builder class
2170              */
setCountOfOutgoingMms(int countOfOutgoingMms)2171             public Builder setCountOfOutgoingMms(int countOfOutgoingMms) {
2172                 this.mCountOfOutgoingMms = countOfOutgoingMms;
2173                 return this;
2174             }
2175 
2176             /**
2177              * Sets supportedSatelliteServices value of {@link CarrierRoamingSatelliteSession}
2178              * atom then returns Builder class
2179              */
setSupportedSatelliteServices(int[] supportedSatelliteServices)2180             public Builder setSupportedSatelliteServices(int[] supportedSatelliteServices) {
2181                 this.mSupportedSatelliteServices = supportedSatelliteServices;
2182                 Arrays.sort(this.mSupportedSatelliteServices);
2183                 return this;
2184             }
2185 
2186             /**
2187              * Sets serviceDataPolicy value of {@link CarrierRoamingSatelliteSession}
2188              * atom then returns Builder class
2189              */
setServiceDataPolicy(int serviceDataPolicy)2190             public Builder setServiceDataPolicy(int serviceDataPolicy) {
2191                 this.mServiceDataPolicy = serviceDataPolicy;
2192                 return this;
2193             }
2194 
2195             /**
2196              * Sets satelliteDataConsumedPerSessionBytes value of
2197              * {@link CarrierRoamingSatelliteSession} atom then returns Builder class
2198              */
setSatelliteDataConsumedBytes( long satelliteDataConsumedPerSessionBytes)2199             public Builder setSatelliteDataConsumedBytes(
2200                     long satelliteDataConsumedPerSessionBytes) {
2201                 this.mSatelliteDataConsumedBytes = satelliteDataConsumedPerSessionBytes;
2202                 return this;
2203             }
2204 
2205             /**
2206              * Sets isMultiSim value of {@link CarrierRoamingSatelliteSession} atom, which indicates
2207              * whether multi sim are activated or not, then returns Builder class
2208              */
setIsMultiSim(boolean isMultiSim)2209             public Builder setIsMultiSim(boolean isMultiSim) {
2210                 this.mIsMultiSim = isMultiSim;
2211                 return this;
2212             }
2213 
2214             /**
2215              * Returns CarrierRoamingSatelliteSessionParams, which contains whole component of
2216              * {@link CarrierRoamingSatelliteSession} atom
2217              */
build()2218             public CarrierRoamingSatelliteSessionParams build() {
2219                 return new SatelliteStats()
2220                         .new CarrierRoamingSatelliteSessionParams(Builder.this);
2221             }
2222 
2223             /**
2224              * Sets isNbIotNtn value of {@link CarrierRoamingSatelliteSession} atom, which indicates
2225              * whether satellite service tech is NB-IoT-NTN or not
2226              */
setIsNbIotNtn(boolean isNbIotNtn)2227             public Builder setIsNbIotNtn(boolean isNbIotNtn) {
2228                 this.mIsNbIotNtn = isNbIotNtn;
2229                 return this;
2230             }
2231         }
2232 
2233         @Override
toString()2234         public String toString() {
2235             return "CarrierRoamingSatelliteSessionParams("
2236                     + "carrierId=" + mCarrierId
2237                     + ", isNtnRoamingInHomeCountry=" + mIsNtnRoamingInHomeCountry
2238                     + ", totalSatelliteModeTimeSec=" + mTotalSatelliteModeTimeSec
2239                     + ", numberOfSatelliteConnections=" + mNumberOfSatelliteConnections
2240                     + ", avgDurationOfSatelliteConnectionSec="
2241                     + mAvgDurationOfSatelliteConnectionSec
2242                     + ", satelliteConnectionGapMinSec=" + mSatelliteConnectionGapMinSec
2243                     + ", satelliteConnectionGapAvgSec=" + mSatelliteConnectionGapAvgSec
2244                     + ", satelliteConnectionGapMaxSec=" + mSatelliteConnectionGapMaxSec
2245                     + ", rsrpAvg=" + mRsrpAvg
2246                     + ", rsrpMedian=" + mRsrpMedian
2247                     + ", rssnrAvg=" + mRssnrAvg
2248                     + ", rssnrMedian=" + mRssnrMedian
2249                     + ", countOfIncomingSms=" + mCountOfIncomingSms
2250                     + ", countOfOutgoingSms=" + mCountOfOutgoingSms
2251                     + ", countOfIncomingMms=" + mCountOfIncomingMms
2252                     + ", countOfOutgoingMms=" + mCountOfOutgoingMms
2253                     + ", supportedSatelliteServices=" + Arrays.toString(mSupportedSatelliteServices)
2254                     + ", serviceDataPolicy=" + mServiceDataPolicy
2255                     + ", SatelliteDataConsumedBytes=" + mSatelliteDataConsumedBytes
2256                     + ", isMultiSim=" + mIsMultiSim
2257                     + ", isNbIotNtn=" + mIsNbIotNtn
2258                     + ")";
2259         }
2260     }
2261 
2262     /**
2263      * A data class to contain whole component of {@link CarrierRoamingSatelliteControllerStats}
2264      * atom. Refer to {@link #onCarrierRoamingSatelliteControllerStatsMetrics(
2265      * CarrierRoamingSatelliteControllerStatsParams)}.
2266      */
2267     public class CarrierRoamingSatelliteControllerStatsParams {
2268         private final int mConfigDataSource;
2269         private final int mCountOfEntitlementStatusQueryRequest;
2270         private final int mCountOfSatelliteConfigUpdateRequest;
2271         private final int mCountOfSatelliteNotificationDisplayed;
2272         private static int sSatelliteSessionGapMinSec;
2273         private static int sSatelliteSessionGapAvgSec;
2274         private static int sSatelliteSessionGapMaxSec;
2275         private static int sCarrierId;
2276         private static boolean sIsDeviceEntitled;
2277         private static boolean sIsMultiSim;
2278         private final int mCountOfSatelliteSessions;
2279         private static boolean sIsNbIotNtn;
2280 
CarrierRoamingSatelliteControllerStatsParams(Builder builder)2281         private CarrierRoamingSatelliteControllerStatsParams(Builder builder) {
2282             this.mConfigDataSource = builder.mConfigDataSource;
2283             this.mCountOfEntitlementStatusQueryRequest =
2284                     builder.mCountOfEntitlementStatusQueryRequest;
2285             this.mCountOfSatelliteConfigUpdateRequest =
2286                     builder.mCountOfSatelliteConfigUpdateRequest;
2287             this.mCountOfSatelliteNotificationDisplayed =
2288                     builder.mCountOfSatelliteNotificationDisplayed;
2289 
2290             // Update session gap params only when they are explicitly provided
2291             if (builder.mSatelliteSessionGapMinSec.isPresent()) {
2292                 sSatelliteSessionGapMinSec = builder.mSatelliteSessionGapMinSec.get();
2293             }
2294             if (builder.mSatelliteSessionGapAvgSec.isPresent()) {
2295                 sSatelliteSessionGapAvgSec = builder.mSatelliteSessionGapAvgSec.get();
2296             }
2297             if (builder.mSatelliteSessionGapMaxSec.isPresent()) {
2298                 sSatelliteSessionGapMaxSec = builder.mSatelliteSessionGapMaxSec.get();
2299             }
2300 
2301             // Carrier ID value should be updated only when it is meaningful.
2302             if (builder.mCarrierId.isPresent()) {
2303                 sCarrierId = builder.mCarrierId.get();
2304             }
2305 
2306             // isDeviceEntitled value should be updated only when it is meaningful.
2307             if (builder.mIsDeviceEntitled.isPresent()) {
2308                 sIsDeviceEntitled = builder.mIsDeviceEntitled.get();
2309             }
2310 
2311             // isMulti value should be updated only when it is meaningful.
2312             if (builder.mIsMultiSim.isPresent()) {
2313                 sIsMultiSim = builder.mIsMultiSim.get();
2314             }
2315 
2316             this.mCountOfSatelliteSessions = builder.mCountOfSatelliteSessions;
2317 
2318             // isNbIotNtn value should be updated only when it is meaningful.
2319             if (builder.mIsNbIotNtn.isPresent()) {
2320                 sIsNbIotNtn = builder.mIsNbIotNtn.get();
2321             }
2322         }
2323 
getConfigDataSource()2324         public int getConfigDataSource() {
2325             return mConfigDataSource;
2326         }
2327 
getCountOfEntitlementStatusQueryRequest()2328         public int getCountOfEntitlementStatusQueryRequest() {
2329             return mCountOfEntitlementStatusQueryRequest;
2330         }
2331 
getCountOfSatelliteConfigUpdateRequest()2332         public int getCountOfSatelliteConfigUpdateRequest() {
2333             return mCountOfSatelliteConfigUpdateRequest;
2334         }
2335 
getCountOfSatelliteNotificationDisplayed()2336         public int getCountOfSatelliteNotificationDisplayed() {
2337             return mCountOfSatelliteNotificationDisplayed;
2338         }
2339 
getSatelliteSessionGapMinSec()2340         public int getSatelliteSessionGapMinSec() {
2341             return sSatelliteSessionGapMinSec;
2342         }
2343 
getSatelliteSessionGapAvgSec()2344         public int getSatelliteSessionGapAvgSec() {
2345             return sSatelliteSessionGapAvgSec;
2346         }
2347 
getSatelliteSessionGapMaxSec()2348         public int getSatelliteSessionGapMaxSec() {
2349             return sSatelliteSessionGapMaxSec;
2350         }
2351 
getCarrierId()2352         public int getCarrierId() {
2353             return sCarrierId;
2354         }
2355 
isDeviceEntitled()2356         public boolean isDeviceEntitled() {
2357             return sIsDeviceEntitled;
2358         }
2359 
isMultiSim()2360         public boolean isMultiSim() {
2361             return sIsMultiSim;
2362         }
2363 
getCountOfSatelliteSessions()2364         public int getCountOfSatelliteSessions() {
2365             return mCountOfSatelliteSessions;
2366         }
2367 
isNbIotNtn()2368         public boolean isNbIotNtn() {
2369             return sIsNbIotNtn;
2370         }
2371 
2372         /**
2373          * A builder class to create {@link CarrierRoamingSatelliteControllerStatsParams}
2374          * data structure class
2375          */
2376         public static class Builder {
2377             private int mConfigDataSource = SatelliteConstants.CONFIG_DATA_SOURCE_UNKNOWN;
2378             private int mCountOfEntitlementStatusQueryRequest = 0;
2379             private int mCountOfSatelliteConfigUpdateRequest = 0;
2380             private int mCountOfSatelliteNotificationDisplayed = 0;
2381             private Optional<Integer> mSatelliteSessionGapMinSec = Optional.empty();
2382             private Optional<Integer> mSatelliteSessionGapAvgSec = Optional.empty();
2383             private Optional<Integer> mSatelliteSessionGapMaxSec = Optional.empty();
2384             private Optional<Integer> mCarrierId = Optional.empty();
2385             private Optional<Boolean> mIsDeviceEntitled = Optional.empty();
2386             private Optional<Boolean> mIsMultiSim = Optional.empty();
2387             private int mCountOfSatelliteSessions = 0;
2388             private Optional<Boolean> mIsNbIotNtn = Optional.empty();
2389 
2390             /**
2391              * Sets configDataSource value of {@link CarrierRoamingSatelliteControllerStats} atom
2392              * then returns Builder class
2393              */
setConfigDataSource(int configDataSource)2394             public Builder setConfigDataSource(int configDataSource) {
2395                 this.mConfigDataSource = configDataSource;
2396                 return this;
2397             }
2398 
2399             /**
2400              * Sets countOfEntitlementStatusQueryRequest value of
2401              * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
2402              */
setCountOfEntitlementStatusQueryRequest( int countOfEntitlementStatusQueryRequest)2403             public Builder setCountOfEntitlementStatusQueryRequest(
2404                     int countOfEntitlementStatusQueryRequest) {
2405                 this.mCountOfEntitlementStatusQueryRequest = countOfEntitlementStatusQueryRequest;
2406                 return this;
2407             }
2408 
2409             /**
2410              * Sets countOfSatelliteConfigUpdateRequest value of
2411              * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
2412              */
setCountOfSatelliteConfigUpdateRequest( int countOfSatelliteConfigUpdateRequest)2413             public Builder setCountOfSatelliteConfigUpdateRequest(
2414                     int countOfSatelliteConfigUpdateRequest) {
2415                 this.mCountOfSatelliteConfigUpdateRequest = countOfSatelliteConfigUpdateRequest;
2416                 return this;
2417             }
2418 
2419             /**
2420              * Sets countOfSatelliteNotificationDisplayed value of
2421              * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
2422              */
setCountOfSatelliteNotificationDisplayed( int countOfSatelliteNotificationDisplayed)2423             public Builder setCountOfSatelliteNotificationDisplayed(
2424                     int countOfSatelliteNotificationDisplayed) {
2425                 this.mCountOfSatelliteNotificationDisplayed = countOfSatelliteNotificationDisplayed;
2426                 return this;
2427             }
2428 
2429             /**
2430              * Sets satelliteSessionGapMinSec value of
2431              * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
2432              */
setSatelliteSessionGapMinSec(int satelliteSessionGapMinSec)2433             public Builder setSatelliteSessionGapMinSec(int satelliteSessionGapMinSec) {
2434                 this.mSatelliteSessionGapMinSec = Optional.of(satelliteSessionGapMinSec);
2435                 return this;
2436             }
2437 
2438             /**
2439              * Sets satelliteSessionGapAvgSec value of
2440              * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
2441              */
setSatelliteSessionGapAvgSec(int satelliteSessionGapAvgSec)2442             public Builder setSatelliteSessionGapAvgSec(int satelliteSessionGapAvgSec) {
2443                 this.mSatelliteSessionGapAvgSec = Optional.of(satelliteSessionGapAvgSec);
2444                 return this;
2445             }
2446 
2447             /**
2448              * Sets satelliteSessionGapMaxSec value of
2449              * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
2450              */
setSatelliteSessionGapMaxSec(int satelliteSessionGapMaxSec)2451             public Builder setSatelliteSessionGapMaxSec(int satelliteSessionGapMaxSec) {
2452                 this.mSatelliteSessionGapMaxSec = Optional.of(satelliteSessionGapMaxSec);
2453                 return this;
2454             }
2455 
2456             /** Sets the currently active NB-IoT NTN carrier ID. */
setCarrierId(int carrierId)2457             public Builder setCarrierId(int carrierId) {
2458                 this.mCarrierId = Optional.of(carrierId);
2459                 return this;
2460             }
2461 
2462             /** Sets whether the device is currently entitled or not. */
setIsDeviceEntitled(boolean isDeviceEntitled)2463             public Builder setIsDeviceEntitled(boolean isDeviceEntitled) {
2464                 this.mIsDeviceEntitled = Optional.of(isDeviceEntitled);
2465                 return this;
2466             }
2467 
2468             /** Sets whether the device is in DSDS state or not. */
setIsMultiSim(boolean isMultiSim)2469             public Builder setIsMultiSim(boolean isMultiSim) {
2470                 this.mIsMultiSim = Optional.of(isMultiSim);
2471                 return this;
2472             }
2473 
2474             /**
2475              * Increase the countOfSatelliteSession value of
2476              * {@link CarrierRoamingSatelliteControllerStats} atom by one then returns Builder class
2477              */
increaseCountOfSatelliteSessions()2478             public Builder increaseCountOfSatelliteSessions() {
2479                 this.mCountOfSatelliteSessions++;
2480                 return this;
2481             }
2482 
2483             /** Sets whether the device is in NB-NoT-NTN state or not. */
setIsNbIotNtn(boolean isNbIotNtn)2484             public Builder setIsNbIotNtn(boolean isNbIotNtn) {
2485                 this.mIsNbIotNtn = Optional.of(isNbIotNtn);
2486                 return this;
2487             }
2488 
2489             /**
2490              * Returns CarrierRoamingSatelliteControllerStatsParams, which contains whole component
2491              * of {@link CarrierRoamingSatelliteControllerStats} atom
2492              */
build()2493             public CarrierRoamingSatelliteControllerStatsParams build() {
2494                 return new SatelliteStats()
2495                         .new CarrierRoamingSatelliteControllerStatsParams(Builder.this);
2496             }
2497         }
2498 
2499         @Override
equals(Object obj)2500         public boolean equals(Object obj) {
2501             if (this == obj) return true;
2502             if (obj == null || getClass() != obj.getClass()) return false;
2503             CarrierRoamingSatelliteControllerStatsParams that =
2504                     (CarrierRoamingSatelliteControllerStatsParams) obj;
2505             return mConfigDataSource == that.getConfigDataSource()
2506                     && mCountOfEntitlementStatusQueryRequest
2507                     == that.getCountOfEntitlementStatusQueryRequest()
2508                     && mCountOfSatelliteConfigUpdateRequest
2509                     == that.getCountOfSatelliteConfigUpdateRequest()
2510                     && mCountOfSatelliteNotificationDisplayed
2511                     == that.getCountOfSatelliteNotificationDisplayed()
2512                     && sSatelliteSessionGapMinSec == that.getSatelliteSessionGapMinSec()
2513                     && sSatelliteSessionGapAvgSec == that.getSatelliteSessionGapAvgSec()
2514                     && sSatelliteSessionGapMaxSec == that.getSatelliteSessionGapMaxSec()
2515                     && sCarrierId == that.getCarrierId()
2516                     && sIsDeviceEntitled == that.isDeviceEntitled()
2517                     && sIsMultiSim == that.isMultiSim()
2518                     && mCountOfSatelliteSessions == that.getCountOfSatelliteSessions()
2519                     && sIsNbIotNtn == that.isNbIotNtn();
2520         }
2521 
2522         @Override
hashCode()2523         public int hashCode() {
2524             return Objects.hash(mConfigDataSource, mCountOfEntitlementStatusQueryRequest,
2525                     mCountOfSatelliteConfigUpdateRequest, mCountOfSatelliteNotificationDisplayed,
2526                     sSatelliteSessionGapMinSec, sSatelliteSessionGapAvgSec,
2527                     sSatelliteSessionGapMaxSec, sCarrierId, sIsDeviceEntitled, sIsMultiSim,
2528                     mCountOfSatelliteSessions, sIsNbIotNtn);
2529         }
2530 
2531         @Override
toString()2532         public String toString() {
2533             return "CarrierRoamingSatelliteControllerStatsParams("
2534                     + "configDataSource=" + mConfigDataSource
2535                     + ", countOfEntitlementStatusQueryRequest="
2536                     + mCountOfEntitlementStatusQueryRequest
2537                     + ", countOfSatelliteConfigUpdateRequest="
2538                     + mCountOfSatelliteConfigUpdateRequest
2539                     + ", countOfSatelliteNotificationDisplayed="
2540                     + mCountOfSatelliteNotificationDisplayed
2541                     + ", satelliteSessionGapMinSec=" + sSatelliteSessionGapMinSec
2542                     + ", satelliteSessionGapAvgSec=" + sSatelliteSessionGapAvgSec
2543                     + ", satelliteSessionGapMaxSec=" + sSatelliteSessionGapMaxSec
2544                     + ", carrierId=" + sCarrierId
2545                     + ", isDeviceEntitled=" + sIsDeviceEntitled
2546                     + ", isMultiSim=" + sIsMultiSim
2547                     + ", countOfSatelliteSession=" + mCountOfSatelliteSessions
2548                     + ", isNbIotNtn=" + sIsNbIotNtn
2549                     + ")";
2550         }
2551     }
2552 
2553     /**
2554      * A data class to contain whole component of {@link SatelliteEntitlement} atom.
2555      * Refer to {@link #onSatelliteEntitlementMetrics(SatelliteEntitlementParams)}.
2556      */
2557     public class SatelliteEntitlementParams {
2558         private final int mCarrierId;
2559         private final int mResult;
2560         private final int mEntitlementStatus;
2561         private final boolean mIsRetry;
2562         private final int mCount;
2563         private final boolean mIsAllowedServiceEntitlement;
2564         private final int[] mEntitlementServiceType;
2565         private final int mEntitlementDataPolicy;
2566 
SatelliteEntitlementParams(Builder builder)2567         private SatelliteEntitlementParams(Builder builder) {
2568             this.mCarrierId = builder.mCarrierId;
2569             this.mResult = builder.mResult;
2570             this.mEntitlementStatus = builder.mEntitlementStatus;
2571             this.mIsRetry = builder.mIsRetry;
2572             this.mCount = builder.mCount;
2573             this.mIsAllowedServiceEntitlement = builder.mIsAllowedServiceEntitlement;
2574             this.mEntitlementServiceType = builder.mEntitlementServiceType;
2575             this.mEntitlementDataPolicy = builder.mEntitlementDataPolicy;
2576         }
2577 
getCarrierId()2578         public int getCarrierId() {
2579             return mCarrierId;
2580         }
2581 
getResult()2582         public int getResult() {
2583             return mResult;
2584         }
2585 
getEntitlementStatus()2586         public int getEntitlementStatus() {
2587             return mEntitlementStatus;
2588         }
2589 
getIsRetry()2590         public boolean getIsRetry() {
2591             return mIsRetry;
2592         }
2593 
getCount()2594         public int getCount() {
2595             return mCount;
2596         }
2597 
getIsAllowedServiceEntitlement()2598         public boolean getIsAllowedServiceEntitlement() {
2599             return mIsAllowedServiceEntitlement;
2600         }
2601 
getEntitlementServiceType()2602         public int[] getEntitlementServiceType() {
2603             return mEntitlementServiceType;
2604         }
2605 
getEntitlementDataPolicy()2606         public int getEntitlementDataPolicy() {
2607             return mEntitlementDataPolicy;
2608         }
2609 
2610         /**
2611          * A builder class to create {@link SatelliteEntitlementParams} data structure class
2612          */
2613         public static class Builder {
2614             private int mCarrierId = -1;
2615             private int mResult = -1;
2616             private int mEntitlementStatus = -1;
2617             private boolean mIsRetry = false;
2618             private int mCount = -1;
2619             private boolean mIsAllowedServiceEntitlement = false;
2620             private int[] mEntitlementServiceType = new int[0];
2621             private int mEntitlementDataPolicy =
2622                     SatelliteConstants.SATELLITE_ENTITLEMENT_SERVICE_POLICY_UNKNOWN;
2623 
2624             /**
2625              * Sets carrierId value of {@link SatelliteEntitlement} atom
2626              * then returns Builder class
2627              */
setCarrierId(int carrierId)2628             public Builder setCarrierId(int carrierId) {
2629                 this.mCarrierId = carrierId;
2630                 return this;
2631             }
2632 
2633             /**
2634              * Sets result value of {@link SatelliteEntitlement} atom
2635              * then returns Builder class
2636              */
setResult(int result)2637             public Builder setResult(int result) {
2638                 this.mResult = result;
2639                 return this;
2640             }
2641 
2642             /**
2643              * Sets entitlementStatus value of {@link SatelliteEntitlement} atom
2644              * then returns Builder class
2645              */
setEntitlementStatus(int entitlementStatus)2646             public Builder setEntitlementStatus(int entitlementStatus) {
2647                 this.mEntitlementStatus = entitlementStatus;
2648                 return this;
2649             }
2650 
2651             /**
2652              * Sets isRetry value of {@link SatelliteEntitlement} atom
2653              * then returns Builder class
2654              */
setIsRetry(boolean isRetry)2655             public Builder setIsRetry(boolean isRetry) {
2656                 this.mIsRetry = isRetry;
2657                 return this;
2658             }
2659 
2660             /**
2661              * Sets count value of {@link SatelliteEntitlement} atom
2662              * then returns Builder class
2663              */
setCount(int count)2664             public Builder setCount(int count) {
2665                 this.mCount = count;
2666                 return this;
2667             }
2668 
2669             /**
2670              * Sets isAllowedServiceEntitlement value of {@link SatelliteEntitlement} atom
2671              * then returns Builder class
2672              */
setIsAllowedServiceEntitlement(boolean isAllowedServiceEntitlement)2673             public Builder setIsAllowedServiceEntitlement(boolean isAllowedServiceEntitlement) {
2674                 this.mIsAllowedServiceEntitlement = isAllowedServiceEntitlement;
2675                 return this;
2676             }
2677 
2678             /**
2679              * Sets entitlementServiceType value of {@link SatelliteEntitlement} atom
2680              * then returns Builder class
2681              */
setEntitlementServiceType(int[] entitlementServiceType)2682             public Builder setEntitlementServiceType(int[] entitlementServiceType) {
2683                 this.mEntitlementServiceType = entitlementServiceType;
2684                 Arrays.sort(this.mEntitlementServiceType);
2685                 return this;
2686             }
2687 
2688             /**
2689              * Sets entitlementDataPolicy value of {@link SatelliteEntitlement} atom
2690              * then returns Builder class
2691              */
setEntitlementDataPolicy(int entitlementDataPolicy)2692             public Builder setEntitlementDataPolicy(int entitlementDataPolicy) {
2693                 this.mEntitlementDataPolicy = entitlementDataPolicy;
2694                 return this;
2695             }
2696 
2697             /**
2698              * Returns SatelliteEntitlementParams, which contains whole component of
2699              * {@link SatelliteEntitlement} atom
2700              */
build()2701             public SatelliteEntitlementParams build() {
2702                 return new SatelliteStats()
2703                         .new SatelliteEntitlementParams(Builder.this);
2704             }
2705         }
2706 
2707         @Override
toString()2708         public String toString() {
2709             return "SatelliteEntitlementParams("
2710                     + "carrierId=" + mCarrierId
2711                     + ", result=" + mResult
2712                     + ", entitlementStatus=" + mEntitlementStatus
2713                     + ", isRetry=" + mIsRetry
2714                     + ", count=" + mCount
2715                     + ",isAllowedServiceEntitlement=" + mIsAllowedServiceEntitlement
2716                     + ",entitlementServiceType=" + Arrays.toString(mEntitlementServiceType)
2717                     + ",entitlementServicePolicy=" + mEntitlementDataPolicy + ")";
2718         }
2719     }
2720 
2721     /**
2722      * A data class to contain whole component of {@link SatelliteConfigUpdater} atom.
2723      * Refer to {@link #onSatelliteConfigUpdaterMetrics(SatelliteConfigUpdaterParams)}.
2724      */
2725     public class SatelliteConfigUpdaterParams {
2726         private final int mConfigVersion;
2727         private final int mOemConfigResult;
2728         private final int mCarrierConfigResult;
2729         private final int mCount;
2730 
SatelliteConfigUpdaterParams(Builder builder)2731         private SatelliteConfigUpdaterParams(Builder builder) {
2732             this.mConfigVersion = builder.mConfigVersion;
2733             this.mOemConfigResult = builder.mOemConfigResult;
2734             this.mCarrierConfigResult = builder.mCarrierConfigResult;
2735             this.mCount = builder.mCount;
2736         }
2737 
getConfigVersion()2738         public int getConfigVersion() {
2739             return mConfigVersion;
2740         }
2741 
getOemConfigResult()2742         public int getOemConfigResult() {
2743             return mOemConfigResult;
2744         }
2745 
getCarrierConfigResult()2746         public int getCarrierConfigResult() {
2747             return mCarrierConfigResult;
2748         }
2749 
getCount()2750         public int getCount() {
2751             return mCount;
2752         }
2753 
2754         /**
2755          * A builder class to create {@link SatelliteConfigUpdaterParams} data structure class
2756          */
2757         public static class Builder {
2758             private int mConfigVersion = -1;
2759             private int mOemConfigResult = -1;
2760             private int mCarrierConfigResult = -1;
2761             private int mCount = -1;
2762 
2763             /**
2764              * Sets configVersion value of {@link SatelliteConfigUpdater} atom
2765              * then returns Builder class
2766              */
setConfigVersion(int configVersion)2767             public Builder setConfigVersion(int configVersion) {
2768                 this.mConfigVersion = configVersion;
2769                 return this;
2770             }
2771 
2772             /**
2773              * Sets oemConfigResult value of {@link SatelliteConfigUpdater} atom
2774              * then returns Builder class
2775              */
setOemConfigResult(int oemConfigResult)2776             public Builder setOemConfigResult(int oemConfigResult) {
2777                 this.mOemConfigResult = oemConfigResult;
2778                 return this;
2779             }
2780 
2781             /**
2782              * Sets carrierConfigResult value of {@link SatelliteConfigUpdater} atom
2783              * then returns Builder class
2784              */
setCarrierConfigResult(int carrierConfigResult)2785             public Builder setCarrierConfigResult(int carrierConfigResult) {
2786                 this.mCarrierConfigResult = carrierConfigResult;
2787                 return this;
2788             }
2789 
2790             /**
2791              * Sets count value of {@link SatelliteConfigUpdater} atom
2792              * then returns Builder class
2793              */
setCount(int count)2794             public Builder setCount(int count) {
2795                 this.mCount = count;
2796                 return this;
2797             }
2798 
2799             /**
2800              * Returns SatelliteConfigUpdaterParams, which contains whole component of
2801              * {@link SatelliteConfigUpdater} atom
2802              */
build()2803             public SatelliteConfigUpdaterParams build() {
2804                 return new SatelliteStats()
2805                         .new SatelliteConfigUpdaterParams(Builder.this);
2806             }
2807         }
2808 
2809         @Override
toString()2810         public String toString() {
2811             return "SatelliteConfigUpdaterParams("
2812                     + "configVersion=" + mConfigVersion
2813                     + ", oemConfigResult=" + mOemConfigResult
2814                     + ", carrierConfigResult=" + mCarrierConfigResult
2815                     + ", count=" + mCount + ")";
2816         }
2817     }
2818 
2819     /**
2820      * A data class to contain whole component of {@link SatelliteAccessControllerParams} atom.
2821      * Refer to {@link #onSatelliteAccessControllerMetrics(SatelliteAccessControllerParams)}.
2822      */
2823     public class SatelliteAccessControllerParams {
2824         private final @SatelliteConstants.AccessControlType int mAccessControlType;
2825         private final long mLocationQueryTimeMillis;
2826         private final long mOnDeviceLookupTimeMillis;
2827         private final long mTotalCheckingTimeMillis;
2828         private final boolean mIsAllowed;
2829         private final boolean mIsEmergency;
2830         private final @SatelliteManager.SatelliteResult int mResultCode;
2831         private final String[] mCountryCodes;
2832         private final @SatelliteConstants.ConfigDataSource int mConfigDataSource;
2833         private final int mCarrierId;
2834         private final int mTriggeringEvent;
2835         private final boolean mIsNtnOnlyCarrier;
2836 
SatelliteAccessControllerParams(Builder builder)2837         private SatelliteAccessControllerParams(Builder builder) {
2838             this.mAccessControlType = builder.mAccessControlType;
2839             this.mLocationQueryTimeMillis = builder.mLocationQueryTimeMillis;
2840             this.mOnDeviceLookupTimeMillis = builder.mOnDeviceLookupTimeMillis;
2841             this.mTotalCheckingTimeMillis = builder.mTotalCheckingTimeMillis;
2842             this.mIsAllowed = builder.mIsAllowed;
2843             this.mIsEmergency = builder.mIsEmergency;
2844             this.mResultCode = builder.mResultCode;
2845             this.mCountryCodes = builder.mCountryCodes;
2846             this.mConfigDataSource = builder.mConfigDataSource;
2847             this.mCarrierId = builder.mCarrierId;
2848             this.mTriggeringEvent = builder.mTriggeringEvent;
2849             this.mIsNtnOnlyCarrier = builder.mIsNtnOnlyCarrier;
2850         }
2851 
getAccessControlType()2852         public @SatelliteConstants.AccessControlType int getAccessControlType() {
2853             return mAccessControlType;
2854         }
2855 
getLocationQueryTime()2856         public long getLocationQueryTime() {
2857             return mLocationQueryTimeMillis;
2858         }
2859 
getOnDeviceLookupTime()2860         public long getOnDeviceLookupTime() {
2861             return mOnDeviceLookupTimeMillis;
2862         }
2863 
getTotalCheckingTime()2864         public long getTotalCheckingTime() {
2865             return mTotalCheckingTimeMillis;
2866         }
2867 
getIsAllowed()2868         public boolean getIsAllowed() {
2869             return mIsAllowed;
2870         }
2871 
getIsEmergency()2872         public boolean getIsEmergency() {
2873             return mIsEmergency;
2874         }
2875 
getResultCode()2876         public @SatelliteManager.SatelliteResult int getResultCode() {
2877             return mResultCode;
2878         }
2879 
getCountryCodes()2880         public String[] getCountryCodes() {
2881             return mCountryCodes;
2882         }
2883 
getConfigDataSource()2884         public @SatelliteConstants.ConfigDataSource int getConfigDataSource() {
2885             return mConfigDataSource;
2886         }
2887 
getCarrierId()2888         public int getCarrierId() {
2889             return mCarrierId;
2890         }
2891 
getTriggeringEvent()2892         @SatelliteConstants.TriggeringEvent public int getTriggeringEvent() {
2893             return mTriggeringEvent;
2894         }
2895 
isNtnOnlyCarrier()2896         public boolean isNtnOnlyCarrier() {
2897             return mIsNtnOnlyCarrier;
2898         }
2899 
2900         /**
2901          * A builder class to create {@link SatelliteAccessControllerParams} data structure class
2902          */
2903         public static class Builder {
2904             private @SatelliteConstants.AccessControlType int mAccessControlType;
2905             private long mLocationQueryTimeMillis;
2906             private long mOnDeviceLookupTimeMillis;
2907             private long mTotalCheckingTimeMillis;
2908             private boolean mIsAllowed;
2909             private boolean mIsEmergency;
2910             private @SatelliteManager.SatelliteResult int mResultCode;
2911             private String[] mCountryCodes;
2912             private @SatelliteConstants.ConfigDataSource int mConfigDataSource;
2913             private int mCarrierId = UNKNOWN_CARRIER_ID;
2914             private @SatelliteConstants.TriggeringEvent int mTriggeringEvent =
2915                     TRIGGERING_EVENT_UNKNOWN;
2916             private boolean mIsNtnOnlyCarrier = false;
2917 
2918             /**
2919              * Sets AccessControlType value of {@link #SatelliteAccessController}
2920              * atom then returns Builder class
2921              */
setAccessControlType( @atelliteConstants.AccessControlType int accessControlType)2922             public Builder setAccessControlType(
2923                     @SatelliteConstants.AccessControlType int accessControlType) {
2924                 this.mAccessControlType = accessControlType;
2925                 return this;
2926             }
2927 
2928             /** Sets the location query time for current satellite enablement. */
setLocationQueryTime(long locationQueryTimeMillis)2929             public Builder setLocationQueryTime(long locationQueryTimeMillis) {
2930                 this.mLocationQueryTimeMillis = locationQueryTimeMillis;
2931                 return this;
2932             }
2933 
2934             /** Sets the on device lookup time for current satellite enablement. */
setOnDeviceLookupTime(long onDeviceLookupTimeMillis)2935             public Builder setOnDeviceLookupTime(long onDeviceLookupTimeMillis) {
2936                 this.mOnDeviceLookupTimeMillis = onDeviceLookupTimeMillis;
2937                 return this;
2938             }
2939 
2940             /** Sets the total checking time for current satellite enablement. */
setTotalCheckingTime(long totalCheckingTimeMillis)2941             public Builder setTotalCheckingTime(long totalCheckingTimeMillis) {
2942                 this.mTotalCheckingTimeMillis = totalCheckingTimeMillis;
2943                 return this;
2944             }
2945 
2946             /** Sets whether the satellite communication is allowed from current location. */
setIsAllowed(boolean isAllowed)2947             public Builder setIsAllowed(boolean isAllowed) {
2948                 this.mIsAllowed = isAllowed;
2949                 return this;
2950             }
2951 
2952             /** Sets whether the current satellite enablement is for emergency or not. */
setIsEmergency(boolean isEmergency)2953             public Builder setIsEmergency(boolean isEmergency) {
2954                 this.mIsEmergency = isEmergency;
2955                 return this;
2956             }
2957 
2958             /** Sets the result code for checking whether satellite service is allowed from current
2959              location. */
setResult(int result)2960             public Builder setResult(int result) {
2961                 this.mResultCode = result;
2962                 return this;
2963             }
2964 
2965             /** Sets the country code for current location while attempting satellite enablement. */
setCountryCodes(String[] countryCodes)2966             public Builder setCountryCodes(String[] countryCodes) {
2967                 this.mCountryCodes = Arrays.stream(countryCodes).toArray(String[]::new);
2968                 return this;
2969             }
2970 
2971             /** Sets the config data source for checking whether satellite service is allowed from
2972              current location. */
setConfigDatasource(int configDatasource)2973             public Builder setConfigDatasource(int configDatasource) {
2974                 this.mConfigDataSource = configDatasource;
2975                 return this;
2976             }
2977 
2978             /** Sets the currently active NB-IoT NTN carrier ID. */
setCarrierId(int carrierId)2979             public Builder setCarrierId(int carrierId) {
2980                 this.mCarrierId = carrierId;
2981                 return this;
2982             }
2983 
2984             /** Sets the triggering evenr for current satellite access controller metric. */
setTriggeringEvent( @atelliteConstants.TriggeringEvent int triggeringEvent)2985             public Builder setTriggeringEvent(
2986                     @SatelliteConstants.TriggeringEvent int triggeringEvent) {
2987                 this.mTriggeringEvent = triggeringEvent;
2988                 return this;
2989             }
2990 
2991             /**
2992              * Sets isNtnOnlyCarrier value of {@link SatelliteAccessController} atom
2993              * then returns Builder class
2994             */
setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)2995             public Builder setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) {
2996                 this.mIsNtnOnlyCarrier = isNtnOnlyCarrier;
2997                 return this;
2998             }
2999 
3000             /**
3001              * Returns AccessControllerParams, which contains whole component of
3002              * {@link #SatelliteAccessController} atom
3003              */
build()3004             public SatelliteAccessControllerParams build() {
3005                 return new SatelliteStats()
3006                         .new SatelliteAccessControllerParams(this);
3007             }
3008         }
3009 
3010         @Override
toString()3011         public String toString() {
3012             return "AccessControllerParams("
3013                     + ", AccessControlType=" + mAccessControlType
3014                     + ", LocationQueryTime=" + mLocationQueryTimeMillis
3015                     + ", OnDeviceLookupTime=" + mOnDeviceLookupTimeMillis
3016                     + ", TotalCheckingTime=" + mTotalCheckingTimeMillis
3017                     + ", IsAllowed=" + mIsAllowed
3018                     + ", IsEmergency=" + mIsEmergency
3019                     + ", ResultCode=" + mResultCode
3020                     + ", CountryCodes=" + Arrays.toString(mCountryCodes)
3021                     + ", ConfigDataSource=" + mConfigDataSource
3022                     + ", CarrierId=" + mCarrierId
3023                     + ", TriggeringEvent=" + mTriggeringEvent
3024                     + ", IsNtnOnlyCarrier=" + mIsNtnOnlyCarrier
3025                     + ")";
3026         }
3027     }
3028 
3029     /**  Create a new atom or update an existing atom for SatelliteController metrics */
onSatelliteControllerMetrics(SatelliteControllerParams param)3030     public synchronized void onSatelliteControllerMetrics(SatelliteControllerParams param) {
3031         SatelliteController proto = new SatelliteController();
3032         proto.countOfSatelliteServiceEnablementsSuccess =
3033                 param.getCountOfSatelliteServiceEnablementsSuccess();
3034         proto.countOfSatelliteServiceEnablementsFail =
3035                 param.getCountOfSatelliteServiceEnablementsFail();
3036         proto.countOfOutgoingDatagramSuccess = param.getCountOfOutgoingDatagramSuccess();
3037         proto.countOfOutgoingDatagramFail = param.getCountOfOutgoingDatagramFail();
3038         proto.countOfIncomingDatagramSuccess = param.getCountOfIncomingDatagramSuccess();
3039         proto.countOfIncomingDatagramFail = param.getCountOfIncomingDatagramFail();
3040         proto.countOfDatagramTypeSosSmsSuccess = param.getCountOfDatagramTypeSosSmsSuccess();
3041         proto.countOfDatagramTypeSosSmsFail = param.getCountOfDatagramTypeSosSmsFail();
3042         proto.countOfDatagramTypeLocationSharingSuccess =
3043                 param.getCountOfDatagramTypeLocationSharingSuccess();
3044         proto.countOfDatagramTypeLocationSharingFail =
3045                 param.getCountOfDatagramTypeLocationSharingFail();
3046         proto.countOfProvisionSuccess = param.getCountOfProvisionSuccess();
3047         proto.countOfProvisionFail = param.getCountOfProvisionFail();
3048         proto.countOfDeprovisionSuccess = param.getCountOfDeprovisionSuccess();
3049         proto.countOfDeprovisionFail = param.getCountOfDeprovisionFail();
3050         proto.totalServiceUptimeSec = param.getTotalServiceUptimeSec();
3051         proto.totalBatteryConsumptionPercent = param.getTotalBatteryConsumptionPercent();
3052         proto.totalBatteryChargedTimeSec = param.getTotalBatteryChargedTimeSec();
3053         proto.countOfDemoModeSatelliteServiceEnablementsSuccess =
3054                 param.getCountOfDemoModeSatelliteServiceEnablementsSuccess();
3055         proto.countOfDemoModeSatelliteServiceEnablementsFail =
3056                 param.getCountOfDemoModeSatelliteServiceEnablementsFail();
3057         proto.countOfDemoModeOutgoingDatagramSuccess =
3058                 param.getCountOfDemoModeOutgoingDatagramSuccess();
3059         proto.countOfDemoModeOutgoingDatagramFail = param.getCountOfDemoModeOutgoingDatagramFail();
3060         proto.countOfDemoModeIncomingDatagramSuccess =
3061                 param.getCountOfDemoModeIncomingDatagramSuccess();
3062         proto.countOfDemoModeIncomingDatagramFail = param.getCountOfDemoModeIncomingDatagramFail();
3063         proto.countOfDatagramTypeKeepAliveSuccess = param.getCountOfDatagramTypeKeepAliveSuccess();
3064         proto.countOfDatagramTypeKeepAliveFail = param.getCountOfDatagramTypeKeepAliveFail();
3065         proto.countOfAllowedSatelliteAccess = param.getCountOfAllowedSatelliteAccess();
3066         proto.countOfDisallowedSatelliteAccess = param.getCountOfDisallowedSatelliteAccess();
3067         proto.countOfSatelliteAccessCheckFail = param.getCountOfSatelliteAccessCheckFail();
3068         proto.isProvisioned = param.isProvisioned();
3069         proto.carrierId = param.getCarrierId();
3070         proto.countOfSatelliteAllowedStateChangedEvents =
3071                 param.getCountOfSatelliteAllowedStateChangedEvents();
3072         proto.countOfSuccessfulLocationQueries = param.getCountOfSuccessfulLocationQueries();
3073         proto.countOfFailedLocationQueries = param.getCountOfFailedLocationQueries();
3074         proto.countOfP2PSmsAvailableNotificationShown =
3075                 param.getCountOfP2PSmsAvailableNotificationShown();
3076         proto.countOfP2PSmsAvailableNotificationRemoved =
3077                 param.getCountOfP2PSmsAvailableNotificationRemoved();
3078         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
3079         proto.versionOfSatelliteAccessConfig = param.getVersionSatelliteAccessConfig();
3080         proto.countOfIncomingDatagramTypeSosSmsSuccess =
3081                 param.getCountOfIncomingDatagramTypeSosSmsSuccess();
3082         proto.countOfIncomingDatagramTypeSosSmsFail =
3083                 param.getCountOfIncomingDatagramTypeSosSmsFail();
3084         proto.countOfOutgoingDatagramTypeSmsSuccess =
3085                 param.getCountOfOutgoingDatagramTypeSmsSuccess();
3086         proto.countOfOutgoingDatagramTypeSmsFail = param.getCountOfOutgoingDatagramTypeSmsFail();
3087         proto.countOfIncomingDatagramTypeSmsSuccess =
3088                 param.getCountOfIncomingDatagramTypeSmsSuccess();
3089         proto.countOfIncomingDatagramTypeSmsFail = param.getCountOfIncomingDatagramTypeSmsFail();
3090         if (DBG) logd("onSatelliteControllerMetrics" + param);
3091         mAtomsStorage.addSatelliteControllerStats(proto);
3092     }
3093 
3094     /**  Create a new atom or update an existing atom for SatelliteSession metrics */
onSatelliteSessionMetrics(SatelliteSessionParams param)3095     public synchronized void onSatelliteSessionMetrics(SatelliteSessionParams param) {
3096         SatelliteSession proto = new SatelliteSession();
3097         proto.satelliteServiceInitializationResult =
3098                 param.getSatelliteServiceInitializationResult();
3099         proto.satelliteTechnology = param.getSatelliteTechnology();
3100         proto.count = 1;
3101         proto.satelliteServiceTerminationResult = param.getTerminationResult();
3102         proto.initializationProcessingTimeMillis = param.getInitializationProcessingTime();
3103         proto.terminationProcessingTimeMillis = param.getTerminationProcessingTime();
3104         proto.sessionDurationSeconds = param.getSessionDuration();
3105         proto.countOfOutgoingDatagramSuccess = param.getCountOfIncomingDatagramSuccess();
3106         proto.countOfOutgoingDatagramFailed = param.getCountOfOutgoingDatagramFailed();
3107         proto.countOfIncomingDatagramSuccess = param.getCountOfIncomingDatagramSuccess();
3108         proto.countOfIncomingDatagramFailed = param.getCountOfOutgoingDatagramFailed();
3109         proto.isDemoMode = param.getIsDemoMode();
3110         proto.maxNtnSignalStrengthLevel = param.getMaxNtnSignalStrengthLevel();
3111         proto.carrierId = param.getCarrierId();
3112         proto.countOfSatelliteNotificationDisplayed =
3113                 param.getCountOfSatelliteNotificationDisplayed();
3114         proto.countOfAutoExitDueToScreenOff = param.getCountOfAutoExitDueToScreenOff();
3115         proto.countOfAutoExitDueToTnNetwork = param.getCountOfAutoExitDueToTnNetwork();
3116         proto.isEmergency = param.getIsEmergency();
3117         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
3118         proto.maxInactivityDurationSec = param.getMaxInactivityDurationSec();
3119         if (DBG) logd("onSatelliteSessionMetrics" + param);
3120         mAtomsStorage.addSatelliteSessionStats(proto);
3121     }
3122 
3123     /**  Create a new atom for SatelliteIncomingDatagram metrics */
onSatelliteIncomingDatagramMetrics( SatelliteIncomingDatagramParams param)3124     public synchronized void onSatelliteIncomingDatagramMetrics(
3125             SatelliteIncomingDatagramParams param) {
3126         SatelliteIncomingDatagram proto = new SatelliteIncomingDatagram();
3127         proto.resultCode = param.getResultCode();
3128         proto.datagramSizeBytes = param.getDatagramSizeBytes();
3129         proto.datagramTransferTimeMillis = param.getDatagramTransferTimeMillis();
3130         proto.isDemoMode = param.getIsDemoMode();
3131         proto.carrierId = param.getCarrierId();
3132         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
3133         if (DBG) logd("onSatelliteIncomingDatagramMetrics" + param);
3134         mAtomsStorage.addSatelliteIncomingDatagramStats(proto);
3135     }
3136 
3137     /**  Create a new atom for SatelliteOutgoingDatagram metrics */
onSatelliteOutgoingDatagramMetrics( SatelliteOutgoingDatagramParams param)3138     public synchronized void onSatelliteOutgoingDatagramMetrics(
3139             SatelliteOutgoingDatagramParams param) {
3140         SatelliteOutgoingDatagram proto = new SatelliteOutgoingDatagram();
3141         proto.datagramType = param.getDatagramType();
3142         proto.resultCode = param.getResultCode();
3143         proto.datagramSizeBytes = param.getDatagramSizeBytes();
3144         proto.datagramTransferTimeMillis = param.getDatagramTransferTimeMillis();
3145         proto.isDemoMode = param.getIsDemoMode();
3146         proto.carrierId = param.getCarrierId();
3147         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
3148         if (DBG) logd("onSatelliteOutgoingDatagramMetrics: " + param);
3149         mAtomsStorage.addSatelliteOutgoingDatagramStats(proto);
3150     }
3151 
3152     /**  Create a new atom for SatelliteProvision metrics */
onSatelliteProvisionMetrics(SatelliteProvisionParams param)3153     public synchronized void onSatelliteProvisionMetrics(SatelliteProvisionParams param) {
3154         SatelliteProvision proto = new SatelliteProvision();
3155         proto.resultCode = param.getResultCode();
3156         proto.provisioningTimeSec = param.getProvisioningTimeSec();
3157         proto.isProvisionRequest = param.getIsProvisionRequest();
3158         proto.isCanceled = param.getIsCanceled();
3159         proto.carrierId = param.getCarrierId();
3160         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
3161         if (DBG) logd("onSatelliteProvisionMetrics: " + param);
3162         mAtomsStorage.addSatelliteProvisionStats(proto);
3163     }
3164 
3165     /**  Create a new atom or update an existing atom for SatelliteSosMessageRecommender metrics */
onSatelliteSosMessageRecommender( SatelliteSosMessageRecommenderParams param)3166     public synchronized void onSatelliteSosMessageRecommender(
3167             SatelliteSosMessageRecommenderParams param) {
3168         SatelliteSosMessageRecommender proto = new SatelliteSosMessageRecommender();
3169         proto.isDisplaySosMessageSent = param.isDisplaySosMessageSent();
3170         proto.countOfTimerStarted = param.getCountOfTimerStarted();
3171         proto.isImsRegistered = param.isImsRegistered();
3172         proto.cellularServiceState = param.getCellularServiceState();
3173         proto.isMultiSim = param.isMultiSim();
3174         proto.recommendingHandoverType = param.getRecommendingHandoverType();
3175         proto.isSatelliteAllowedInCurrentLocation = param.isSatelliteAllowedInCurrentLocation();
3176         proto.isWifiConnected = param.isWifiConnected();
3177         proto.carrierId = param.getCarrierId();
3178         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
3179         proto.count = 1;
3180         if (DBG) logd("onSatelliteSosMessageRecommender: " + param);
3181         mAtomsStorage.addSatelliteSosMessageRecommenderStats(proto);
3182     }
3183 
3184     /**  Create a new atom for CarrierRoamingSatelliteSession metrics */
onCarrierRoamingSatelliteSessionMetrics( CarrierRoamingSatelliteSessionParams param)3185     public synchronized  void onCarrierRoamingSatelliteSessionMetrics(
3186             CarrierRoamingSatelliteSessionParams param) {
3187         CarrierRoamingSatelliteSession proto = new CarrierRoamingSatelliteSession();
3188         proto.carrierId = param.getCarrierId();
3189         proto.isNtnRoamingInHomeCountry = param.getIsNtnRoamingInHomeCountry();
3190         proto.totalSatelliteModeTimeSec = param.getTotalSatelliteModeTimeSec();
3191         proto.numberOfSatelliteConnections = param.getNumberOfSatelliteConnections();
3192         proto.avgDurationOfSatelliteConnectionSec = param.getAvgDurationOfSatelliteConnectionSec();
3193         proto.satelliteConnectionGapMinSec = param.mSatelliteConnectionGapMinSec;
3194         proto.satelliteConnectionGapAvgSec = param.mSatelliteConnectionGapAvgSec;
3195         proto.satelliteConnectionGapMaxSec = param.mSatelliteConnectionGapMaxSec;
3196         proto.rsrpAvg = param.mRsrpAvg;
3197         proto.rsrpMedian = param.mRsrpMedian;
3198         proto.rssnrAvg = param.mRssnrAvg;
3199         proto.rssnrMedian = param.mRssnrMedian;
3200         proto.countOfIncomingSms = param.mCountOfIncomingSms;
3201         proto.countOfOutgoingSms = param.mCountOfOutgoingSms;
3202         proto.countOfIncomingMms = param.mCountOfIncomingMms;
3203         proto.countOfOutgoingMms = param.mCountOfOutgoingMms;
3204         proto.supportedSatelliteServices = param.mSupportedSatelliteServices;
3205         proto.serviceDataPolicy = param.mServiceDataPolicy;
3206         proto.satelliteDataConsumedBytes = param.mSatelliteDataConsumedBytes;
3207         proto.isMultiSim = param.isMultiSim();
3208         proto.isNbIotNtn = param.isNbIotNtn();
3209         if (DBG) logd("onCarrierRoamingSatelliteSessionMetrics: " + param);
3210         mAtomsStorage.addCarrierRoamingSatelliteSessionStats(proto);
3211     }
3212 
3213     /**  Create a new atom for CarrierRoamingSatelliteSession metrics */
onCarrierRoamingSatelliteControllerStatsMetrics( CarrierRoamingSatelliteControllerStatsParams param)3214     public synchronized  void onCarrierRoamingSatelliteControllerStatsMetrics(
3215             CarrierRoamingSatelliteControllerStatsParams param) {
3216         CarrierRoamingSatelliteControllerStats proto = new CarrierRoamingSatelliteControllerStats();
3217         proto.configDataSource = param.mConfigDataSource;
3218         proto.countOfEntitlementStatusQueryRequest = param.mCountOfEntitlementStatusQueryRequest;
3219         proto.countOfSatelliteConfigUpdateRequest = param.mCountOfSatelliteConfigUpdateRequest;
3220         proto.countOfSatelliteNotificationDisplayed = param.mCountOfSatelliteNotificationDisplayed;
3221         proto.satelliteSessionGapMinSec = param.getSatelliteSessionGapMinSec();
3222         proto.satelliteSessionGapAvgSec = param.getSatelliteSessionGapAvgSec();
3223         proto.satelliteSessionGapMaxSec = param.getSatelliteSessionGapMaxSec();
3224         proto.carrierId = param.getCarrierId();
3225         proto.isDeviceEntitled = param.isDeviceEntitled();
3226         proto.isMultiSim = param.isMultiSim();
3227         proto.countOfSatelliteSessions = param.getCountOfSatelliteSessions();
3228         proto.isNbIotNtn = param.isNbIotNtn();
3229         if (DBG) logd("onCarrierRoamingSatelliteControllerStatsMetrics: " + param);
3230         mAtomsStorage.addCarrierRoamingSatelliteControllerStats(proto);
3231     }
3232 
3233     /** Reset carrier roaming satellite controller stats after atom is pulled. */
resetCarrierRoamingSatelliteControllerStats()3234     public synchronized void resetCarrierRoamingSatelliteControllerStats() {
3235         if (DBG) logd("resetCarrierRoamingSatelliteControllerStats:");
3236         com.android.internal.telephony.satellite.metrics
3237                 .CarrierRoamingSatelliteControllerStats.getOrCreateInstance()
3238                 .resetSessionGapLists();
3239     }
3240 
3241     /**  Create a new atom for SatelliteEntitlement metrics */
onSatelliteEntitlementMetrics(SatelliteEntitlementParams param)3242     public synchronized  void onSatelliteEntitlementMetrics(SatelliteEntitlementParams param) {
3243         SatelliteEntitlement proto = new SatelliteEntitlement();
3244         proto.carrierId = param.getCarrierId();
3245         proto.result = param.getResult();
3246         proto.entitlementStatus = param.getEntitlementStatus();
3247         proto.isRetry = param.getIsRetry();
3248         proto.count = param.getCount();
3249         proto.isAllowedServiceEntitlement = param.getIsAllowedServiceEntitlement();
3250         proto.entitlementServiceType = param.getEntitlementServiceType();
3251         proto.entitlementDataPolicy = param.getEntitlementDataPolicy();
3252         if (DBG) logd("onSatelliteEntitlementMetrics: " + param);
3253         mAtomsStorage.addSatelliteEntitlementStats(proto);
3254     }
3255 
3256     /**  Create a new atom for SatelliteConfigUpdater metrics */
onSatelliteConfigUpdaterMetrics(SatelliteConfigUpdaterParams param)3257     public synchronized  void onSatelliteConfigUpdaterMetrics(SatelliteConfigUpdaterParams param) {
3258         SatelliteConfigUpdater proto = new SatelliteConfigUpdater();
3259         proto.configVersion = param.getConfigVersion();
3260         proto.oemConfigResult = param.getOemConfigResult();
3261         proto.carrierConfigResult = param.getCarrierConfigResult();
3262         proto.count = param.getCount();
3263         if (DBG) logd("onSatelliteConfigUpdaterMetrics: " + param);
3264         mAtomsStorage.addSatelliteConfigUpdaterStats(proto);
3265     }
3266 
3267     /**  Create a new atom or update an existing atom for SatelliteAccessController metrics */
onSatelliteAccessControllerMetrics( SatelliteAccessControllerParams param)3268     public synchronized void onSatelliteAccessControllerMetrics(
3269             SatelliteAccessControllerParams param) {
3270         SatelliteAccessController proto = new SatelliteAccessController();
3271         proto.accessControlType = param.getAccessControlType();
3272         proto.locationQueryTimeMillis = param.getLocationQueryTime();
3273         proto.onDeviceLookupTimeMillis = param.getOnDeviceLookupTime();
3274         proto.totalCheckingTimeMillis = param.getTotalCheckingTime();
3275         proto.isAllowed = param.getIsAllowed();
3276         proto.isEmergency = param.getIsEmergency();
3277         proto.resultCode = param.getResultCode();
3278         proto.countryCodes = param.getCountryCodes();
3279         proto.configDataSource = param.getConfigDataSource();
3280         proto.carrierId = param.getCarrierId();
3281         proto.triggeringEvent = param.getTriggeringEvent();
3282         proto.isNtnOnlyCarrier = param.isNtnOnlyCarrier();
3283         if (DBG) logd("onSatelliteAccessControllerMetrics: " + param);
3284         mAtomsStorage.addSatelliteAccessControllerStats(proto);
3285     }
3286 
logd(String msg)3287     private static void logd(String msg) {
3288         Rlog.d(TAG, msg);
3289     }
3290 }
3291