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.satellite.metrics; 18 19 import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID; 20 21 import android.annotation.NonNull; 22 import android.telephony.satellite.SatelliteManager; 23 import android.util.Log; 24 25 import com.android.internal.telephony.metrics.SatelliteStats; 26 27 /** 28 * Stats to log to satellite metrics 29 */ 30 public class ProvisionMetricsStats { 31 private static final String TAG = ProvisionMetricsStats.class.getSimpleName(); 32 33 private static ProvisionMetricsStats sInstance = null; 34 35 public static final int INVALID_TIME = -1; 36 37 private int mResultCode; 38 private int mProvisioningStartTimeSec; 39 private boolean mIsProvisionRequest; 40 private boolean mIsCanceled; 41 private int mCarrierId; 42 private boolean mIsNtnOnlyCarrier; 43 ProvisionMetricsStats()44 private ProvisionMetricsStats() { 45 initializeProvisionParams(); 46 } 47 48 /** 49 * Returns the Singleton instance of ProvisionMetricsStats class. 50 * If an instance of the Singleton class has not been created, 51 * it creates a new instance and returns it. Otherwise, it returns 52 * the existing instance. 53 * @return the Singleton instance of ProvisionMetricsStats 54 */ getOrCreateInstance()55 public static ProvisionMetricsStats getOrCreateInstance() { 56 if (sInstance == null) { 57 logd("Create new ProvisionMetricsStats."); 58 sInstance = new ProvisionMetricsStats(); 59 } 60 return sInstance; 61 } 62 63 /** Sets the resultCode for provision metrics */ setResultCode(@atelliteManager.SatelliteResult int error)64 public ProvisionMetricsStats setResultCode(@SatelliteManager.SatelliteResult int error) { 65 mResultCode = error; 66 return this; 67 } 68 69 /** Sets the start time of provisioning */ setProvisioningStartTime()70 public void setProvisioningStartTime() { 71 mProvisioningStartTimeSec = (int) (System.currentTimeMillis() / 1000); 72 } 73 74 /** Sets the isProvisionRequest to indicate whether provision or de-provision */ setIsProvisionRequest(boolean isProvisionRequest)75 public ProvisionMetricsStats setIsProvisionRequest(boolean isProvisionRequest) { 76 mIsProvisionRequest = isProvisionRequest; 77 return this; 78 } 79 80 /** Sets the isCanceled to know whether the provision is canceled */ setIsCanceled(boolean isCanceled)81 public ProvisionMetricsStats setIsCanceled(boolean isCanceled) { 82 mIsCanceled = isCanceled; 83 return this; 84 } 85 86 /** Sets the Carrier of NTN satellite */ setCarrierId(int carrierId)87 public ProvisionMetricsStats setCarrierId(int carrierId) { 88 mCarrierId = carrierId; 89 return this; 90 } 91 92 /** Capture the latest provisioned state for satellite service */ setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier)93 public ProvisionMetricsStats setIsNtnOnlyCarrier(boolean isNtnOnlyCarrier) { 94 mIsNtnOnlyCarrier = isNtnOnlyCarrier; 95 return this; 96 } 97 98 /** Report the provision metrics atoms to PersistAtomsStorage in telephony */ reportProvisionMetrics()99 public void reportProvisionMetrics() { 100 SatelliteStats.SatelliteProvisionParams provisionParams = 101 new SatelliteStats.SatelliteProvisionParams.Builder() 102 .setResultCode(mResultCode) 103 .setProvisioningTimeSec((int) 104 (System.currentTimeMillis() / 1000) - mProvisioningStartTimeSec) 105 .setIsProvisionRequest(mIsProvisionRequest) 106 .setIsCanceled(mIsCanceled) 107 .setCarrierId(mCarrierId) 108 .setIsNtnOnlyCarrier(mIsNtnOnlyCarrier) 109 .build(); 110 SatelliteStats.getInstance().onSatelliteProvisionMetrics(provisionParams); 111 logd("reportProvisionMetrics: " + provisionParams); 112 initializeProvisionParams(); 113 } 114 initializeProvisionParams()115 private void initializeProvisionParams() { 116 mResultCode = -1; 117 mProvisioningStartTimeSec = INVALID_TIME; 118 mIsProvisionRequest = false; 119 mIsCanceled = false; 120 mCarrierId = UNKNOWN_CARRIER_ID; 121 mIsNtnOnlyCarrier = false; 122 } 123 logd(@onNull String log)124 private static void logd(@NonNull String log) { 125 Log.d(TAG, log); 126 } 127 } 128