• 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 com.android.internal.telephony.metrics.MetricsCollector.getPhonesIfAny;
20 import static com.android.internal.telephony.metrics.PerSimStatus.isVonrEnabled;
21 
22 import android.annotation.NonNull;
23 import android.os.Handler;
24 import android.os.HandlerThread;
25 
26 import com.android.internal.annotations.VisibleForTesting;
27 import com.android.internal.os.BackgroundThread;
28 import com.android.internal.telephony.Phone;
29 import com.android.internal.telephony.flags.FeatureFlags;
30 
31 import java.util.Map;
32 import java.util.concurrent.ConcurrentHashMap;
33 
34 /**
35  * Vonr state handler.
36  *
37  * <p>This class is instantiated in {@link MetricsCollector}.
38 */
39 public class VonrHelper {
40     private final @NonNull FeatureFlags mFlags;
41 
42     private Handler mHandler;
43     private Handler mHandlerThread;
44     private Map<Integer, Boolean> mPhoneVonrState = new ConcurrentHashMap<>();
45 
VonrHelper(@onNull FeatureFlags featureFlags)46     public VonrHelper(@NonNull FeatureFlags featureFlags) {
47         this.mFlags = featureFlags;
48         if (mFlags.threadShred()) {
49             mHandler = new Handler(BackgroundThread.get().getLooper());
50         } else {
51             HandlerThread mHandlerThread = new HandlerThread("VonrHelperThread");
52             mHandlerThread.start();
53             mHandler = new Handler(mHandlerThread.getLooper());
54         }
55     }
56 
57     /** Update vonr_enabled state */
updateVonrEnabledState()58     public void updateVonrEnabledState() {
59         mHandler.post(mVonrRunnable);
60     }
61 
62     @VisibleForTesting
63     protected Runnable mVonrRunnable =
64             new Runnable() {
65                 @Override
66                 public void run() {
67                     mPhoneVonrState.clear();
68                     for (Phone phone : getPhonesIfAny()) {
69                         mPhoneVonrState.put(phone.getSubId(), isVonrEnabled(phone));
70                     }
71                 }
72             };
73 
74     /** Get vonr_enabled per subId */
getVonrEnabled(int subId)75     public boolean getVonrEnabled(int subId) {
76         return mPhoneVonrState.getOrDefault(subId, false);
77     }
78 }
79