/* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.util; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.util.SparseBooleanArray; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import javax.inject.Inject; /** * Tracks the Carrier Config values. */ @SysUISingleton public class CarrierConfigTracker extends BroadcastReceiver { private final SparseBooleanArray mCallStrengthConfigs = new SparseBooleanArray(); private final SparseBooleanArray mNoCallingConfigs = new SparseBooleanArray(); private final SparseBooleanArray mCarrierProvisionsWifiMergedNetworks = new SparseBooleanArray(); private final CarrierConfigManager mCarrierConfigManager; private boolean mDefaultCallStrengthConfigLoaded; private boolean mDefaultCallStrengthConfig; private boolean mDefaultNoCallingConfigLoaded; private boolean mDefaultNoCallingConfig; private boolean mDefaultCarrierProvisionsWifiMergedNetworksLoaded; private boolean mDefaultCarrierProvisionsWifiMergedNetworks; @Inject public CarrierConfigTracker(Context context, BroadcastDispatcher broadcastDispatcher) { mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); broadcastDispatcher.registerReceiver( this, new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)); } @Override public void onReceive(Context context, Intent intent) { if (!CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(intent.getAction())) { return; } final int subId = intent.getIntExtra( CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, SubscriptionManager.INVALID_SUBSCRIPTION_ID); if (!SubscriptionManager.isValidSubscriptionId(subId)) { return; } final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId); if (config == null) { return; } synchronized (mCallStrengthConfigs) { mCallStrengthConfigs.put(subId, config.getBoolean( CarrierConfigManager.KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL)); } synchronized (mNoCallingConfigs) { mNoCallingConfigs.put(subId, config.getBoolean( CarrierConfigManager.KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL)); } synchronized (mCarrierProvisionsWifiMergedNetworks) { mCarrierProvisionsWifiMergedNetworks.put(subId, config.getBoolean( CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL)); } } /** * Returns the KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL value for the given subId. */ public boolean getCallStrengthConfig(int subId) { synchronized (mCallStrengthConfigs) { if (mCallStrengthConfigs.indexOfKey(subId) >= 0) { return mCallStrengthConfigs.get(subId); } } if (!mDefaultCallStrengthConfigLoaded) { mDefaultCallStrengthConfig = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL); mDefaultCallStrengthConfigLoaded = true; } return mDefaultCallStrengthConfig; } /** * Returns the KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL value for the given subId. */ public boolean getNoCallingConfig(int subId) { synchronized (mNoCallingConfigs) { if (mNoCallingConfigs.indexOfKey(subId) >= 0) { return mNoCallingConfigs.get(subId); } } if (!mDefaultNoCallingConfigLoaded) { mDefaultNoCallingConfig = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL); mDefaultNoCallingConfigLoaded = true; } return mDefaultNoCallingConfig; } /** * Returns the KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL value for the given subId. */ public boolean getCarrierProvisionsWifiMergedNetworksBool(int subId) { synchronized (mCarrierProvisionsWifiMergedNetworks) { if (mCarrierProvisionsWifiMergedNetworks.indexOfKey(subId) >= 0) { return mCarrierProvisionsWifiMergedNetworks.get(subId); } } if (!mDefaultCarrierProvisionsWifiMergedNetworksLoaded) { mDefaultCarrierProvisionsWifiMergedNetworks = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL); mDefaultCarrierProvisionsWifiMergedNetworksLoaded = true; } return mDefaultCarrierProvisionsWifiMergedNetworks; } }