Refactor signal strength in SIM status

- Move data logic into repository for better testing
- Check carrier config first, if not shows some items, we don't need to
  load data
- Tests in SimStatusDialogControllerTest will be fixed in later cls

Bug: 337417520
Test: manual - on SIM status
Test: unit test
Change-Id: Iccd209fd455d66d4f6438652ee7481d2a0e72a99
This commit is contained in:
Chaohui Wang
2024-05-27 20:30:17 +08:00
parent 3b925a0cfe
commit 33d73862bf
7 changed files with 290 additions and 246 deletions

View File

@@ -32,10 +32,8 @@ import android.telephony.Annotation;
import android.telephony.CarrierConfigManager;
import android.telephony.CellBroadcastIntents;
import android.telephony.CellBroadcastService;
import android.telephony.CellSignalStrength;
import android.telephony.ICellBroadcastService;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
@@ -113,7 +111,6 @@ public class SimStatusDialogController implements DefaultLifecycleObserver {
private SubscriptionInfo mSubscriptionInfo;
private TelephonyDisplayInfo mTelephonyDisplayInfo;
private ServiceState mPreviousServiceState;
private final int mSlotIndex;
private TelephonyManager mTelephonyManager;
@@ -219,11 +216,9 @@ public class SimStatusDialogController implements DefaultLifecycleObserver {
// getServiceState() may return null when the subscription is inactive
// or when there was an error communicating with the phone process.
final ServiceState serviceState = getTelephonyManager().getServiceState();
final SignalStrength signalStrength = getTelephonyManager().getSignalStrength();
updatePhoneNumber();
updateServiceState(serviceState);
updateSignalStrength(signalStrength);
updateNetworkType();
updateRoamingStatus(serviceState);
updateIccidNumber();
@@ -419,12 +414,6 @@ public class SimStatusDialogController implements DefaultLifecycleObserver {
private void updateServiceState(ServiceState serviceState) {
final int state = Utils.getCombinedServiceState(serviceState);
if (!Utils.isInService(serviceState)) {
resetSignalStrength();
} else if (!Utils.isInService(mPreviousServiceState)) {
// If ServiceState changed from out of service -> in service, update signal strength.
updateSignalStrength(getTelephonyManager().getSignalStrength());
}
String serviceStateValue;
@@ -449,49 +438,11 @@ public class SimStatusDialogController implements DefaultLifecycleObserver {
mDialog.setText(SERVICE_STATE_VALUE_ID, serviceStateValue);
}
private void updateSignalStrength(SignalStrength signalStrength) {
if (signalStrength == null) {
return;
}
// by default we show the signal strength
boolean showSignalStrength = true;
if (mSubscriptionInfo != null) {
final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
final PersistableBundle carrierConfig =
mCarrierConfigManager.getConfigForSubId(subscriptionId);
if (carrierConfig != null) {
showSignalStrength = carrierConfig.getBoolean(
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL);
}
}
if (!showSignalStrength) {
mDialog.removeSettingFromScreen(SIGNAL_STRENGTH_LABEL_ID);
mDialog.removeSettingFromScreen(SIGNAL_STRENGTH_VALUE_ID);
return;
}
ServiceState serviceState = getTelephonyManager().getServiceState();
if (!Utils.isInService(serviceState)) {
return;
}
int signalDbm = getDbm(signalStrength);
int signalAsu = getAsuLevel(signalStrength);
if (signalDbm == -1) {
signalDbm = 0;
}
if (signalAsu == -1) {
signalAsu = 0;
}
mDialog.setText(SIGNAL_STRENGTH_VALUE_ID, mRes.getString(R.string.sim_signal_strength,
signalDbm, signalAsu));
}
private void resetSignalStrength() {
mDialog.setText(SIGNAL_STRENGTH_VALUE_ID, "0");
private void updateSignalStrength(@Nullable String signalStrength) {
boolean isVisible = signalStrength != null;
mDialog.setSettingVisibility(SIGNAL_STRENGTH_LABEL_ID, isVisible);
mDialog.setSettingVisibility(SIGNAL_STRENGTH_VALUE_ID, isVisible);
mDialog.setText(SIGNAL_STRENGTH_VALUE_ID, signalStrength);
}
private void updateNetworkType() {
@@ -593,6 +544,7 @@ public class SimStatusDialogController implements DefaultLifecycleObserver {
private void collectSimStatusDialogInfo(@NonNull LifecycleOwner owner) {
new SimStatusDialogRepository(mContext).collectSimStatusDialogInfo(
owner, mSlotIndex, (simStatusDialogInfo) -> {
updateSignalStrength(simStatusDialogInfo.getSignalStrength());
updateImsRegistrationState(simStatusDialogInfo.getImsRegistered());
return Unit.INSTANCE;
}
@@ -603,44 +555,9 @@ public class SimStatusDialogController implements DefaultLifecycleObserver {
return SubscriptionManager.from(mContext).getActiveSubscriptionInfoForSimSlotIndex(slotId);
}
private int getDbm(SignalStrength signalStrength) {
List<CellSignalStrength> cellSignalStrengthList = signalStrength.getCellSignalStrengths();
int dbm = -1;
if (cellSignalStrengthList == null) {
return dbm;
}
for (CellSignalStrength cell : cellSignalStrengthList) {
if (cell.getDbm() != -1) {
dbm = cell.getDbm();
break;
}
}
return dbm;
}
private int getAsuLevel(SignalStrength signalStrength) {
List<CellSignalStrength> cellSignalStrengthList = signalStrength.getCellSignalStrengths();
int asu = -1;
if (cellSignalStrengthList == null) {
return asu;
}
for (CellSignalStrength cell : cellSignalStrengthList) {
if (cell.getAsuLevel() != -1) {
asu = cell.getAsuLevel();
break;
}
}
return asu;
}
@VisibleForTesting
class SimStatusDialogTelephonyCallback extends TelephonyCallback implements
TelephonyCallback.DataConnectionStateListener,
TelephonyCallback.SignalStrengthsListener,
TelephonyCallback.ServiceStateListener,
TelephonyCallback.DisplayInfoListener {
@Override
@@ -649,17 +566,11 @@ public class SimStatusDialogController implements DefaultLifecycleObserver {
updateNetworkType();
}
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
updateSignalStrength(signalStrength);
}
@Override
public void onServiceStateChanged(ServiceState serviceState) {
updateNetworkProvider();
updateServiceState(serviceState);
updateRoamingStatus(serviceState);
mPreviousServiceState = serviceState;
}
@Override