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