1 /* 2 * Copyright (C) 2021 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.systemui.util; 18 19 import android.content.BroadcastReceiver; 20 import android.content.Context; 21 import android.content.Intent; 22 import android.content.IntentFilter; 23 import android.os.PersistableBundle; 24 import android.telephony.CarrierConfigManager; 25 import android.telephony.SubscriptionManager; 26 import android.util.SparseBooleanArray; 27 28 import com.android.systemui.broadcast.BroadcastDispatcher; 29 import com.android.systemui.dagger.SysUISingleton; 30 31 import javax.inject.Inject; 32 33 /** 34 * Tracks the Carrier Config values. 35 */ 36 @SysUISingleton 37 public class CarrierConfigTracker extends BroadcastReceiver { 38 private final SparseBooleanArray mCallStrengthConfigs = new SparseBooleanArray(); 39 private final SparseBooleanArray mNoCallingConfigs = new SparseBooleanArray(); 40 private final SparseBooleanArray mCarrierProvisionsWifiMergedNetworks = 41 new SparseBooleanArray(); 42 private final CarrierConfigManager mCarrierConfigManager; 43 private boolean mDefaultCallStrengthConfigLoaded; 44 private boolean mDefaultCallStrengthConfig; 45 private boolean mDefaultNoCallingConfigLoaded; 46 private boolean mDefaultNoCallingConfig; 47 private boolean mDefaultCarrierProvisionsWifiMergedNetworksLoaded; 48 private boolean mDefaultCarrierProvisionsWifiMergedNetworks; 49 50 @Inject CarrierConfigTracker(Context context, BroadcastDispatcher broadcastDispatcher)51 public CarrierConfigTracker(Context context, BroadcastDispatcher broadcastDispatcher) { 52 mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); 53 broadcastDispatcher.registerReceiver( 54 this, new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)); 55 } 56 57 @Override onReceive(Context context, Intent intent)58 public void onReceive(Context context, Intent intent) { 59 if (!CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(intent.getAction())) { 60 return; 61 } 62 63 final int subId = intent.getIntExtra( 64 CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, 65 SubscriptionManager.INVALID_SUBSCRIPTION_ID); 66 if (!SubscriptionManager.isValidSubscriptionId(subId)) { 67 return; 68 } 69 70 final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId); 71 if (config == null) { 72 return; 73 } 74 75 synchronized (mCallStrengthConfigs) { 76 mCallStrengthConfigs.put(subId, config.getBoolean( 77 CarrierConfigManager.KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL)); 78 } 79 synchronized (mNoCallingConfigs) { 80 mNoCallingConfigs.put(subId, config.getBoolean( 81 CarrierConfigManager.KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL)); 82 } 83 synchronized (mCarrierProvisionsWifiMergedNetworks) { 84 mCarrierProvisionsWifiMergedNetworks.put(subId, config.getBoolean( 85 CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL)); 86 } 87 } 88 89 /** 90 * Returns the KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL value for the given subId. 91 */ getCallStrengthConfig(int subId)92 public boolean getCallStrengthConfig(int subId) { 93 synchronized (mCallStrengthConfigs) { 94 if (mCallStrengthConfigs.indexOfKey(subId) >= 0) { 95 return mCallStrengthConfigs.get(subId); 96 } 97 } 98 if (!mDefaultCallStrengthConfigLoaded) { 99 mDefaultCallStrengthConfig = 100 CarrierConfigManager.getDefaultConfig().getBoolean( 101 CarrierConfigManager.KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL); 102 mDefaultCallStrengthConfigLoaded = true; 103 } 104 return mDefaultCallStrengthConfig; 105 } 106 107 /** 108 * Returns the KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL value for the given subId. 109 */ getNoCallingConfig(int subId)110 public boolean getNoCallingConfig(int subId) { 111 synchronized (mNoCallingConfigs) { 112 if (mNoCallingConfigs.indexOfKey(subId) >= 0) { 113 return mNoCallingConfigs.get(subId); 114 } 115 } 116 if (!mDefaultNoCallingConfigLoaded) { 117 mDefaultNoCallingConfig = 118 CarrierConfigManager.getDefaultConfig().getBoolean( 119 CarrierConfigManager.KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL); 120 mDefaultNoCallingConfigLoaded = true; 121 } 122 return mDefaultNoCallingConfig; 123 } 124 125 /** 126 * Returns the KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL value for the given subId. 127 */ getCarrierProvisionsWifiMergedNetworksBool(int subId)128 public boolean getCarrierProvisionsWifiMergedNetworksBool(int subId) { 129 synchronized (mCarrierProvisionsWifiMergedNetworks) { 130 if (mCarrierProvisionsWifiMergedNetworks.indexOfKey(subId) >= 0) { 131 return mCarrierProvisionsWifiMergedNetworks.get(subId); 132 } 133 } 134 if (!mDefaultCarrierProvisionsWifiMergedNetworksLoaded) { 135 mDefaultCarrierProvisionsWifiMergedNetworks = 136 CarrierConfigManager.getDefaultConfig().getBoolean( 137 CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL); 138 mDefaultCarrierProvisionsWifiMergedNetworksLoaded = true; 139 } 140 return mDefaultCarrierProvisionsWifiMergedNetworks; 141 } 142 } 143