blob: 14190fa752c3463633d850ede16ccdc6a41071f4 [file] [log] [blame]
/*
* 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;
}
}