Fix incorrect mapping to get subscriptioninfo

getActiveSubscriptionInfoList() returns a list of active subscription.
It doesn't 1:1 mapping with slotId. So it is not correct to use slotId
as index to get subscriptioninfo from list.
Use framework interface getActiveSubscriptionInfoForSimSlotIndex() to
get subscriptioninfo per slotid instead.

Fixes: 129038597
Test: robotest
Change-Id: If4277c425e6145e0e3ba716551d0dce46cdb61ab
This commit is contained in:
Fan Zhang
2019-04-24 14:56:00 -07:00
parent 8c16ef2906
commit f61db6e9d7
2 changed files with 42 additions and 15 deletions

View File

@@ -26,6 +26,7 @@ import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.TtsSpan;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -33,10 +34,10 @@ import androidx.annotation.VisibleForTesting;
import com.android.internal.telephony.PhoneConstants;
import com.android.settings.R;
import java.util.List;
public class ImeiInfoDialogController {
private static final String TAG = "ImeiInfoDialog";
@VisibleForTesting
static final int ID_PRL_VERSION_VALUE = R.id.prl_version_value;
private static final int ID_MIN_NUMBER_LABEL = R.id.min_number_label;
@@ -75,15 +76,24 @@ public class ImeiInfoDialogController {
mDialog = dialog;
mSlotId = slotId;
final Context context = dialog.getContext();
mTelephonyManager = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
mSubscriptionInfo = getSubscriptionInfo(context, slotId);
mSubscriptionInfo = context.getSystemService(SubscriptionManager.class)
.getActiveSubscriptionInfoForSimSlotIndex(slotId);
if (mSubscriptionInfo != null) {
mTelephonyManager = context.getSystemService(TelephonyManager.class)
.createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
} else {
mTelephonyManager = null;
}
}
/**
* Sets IMEI/MEID information based on whether the device is CDMA or GSM.
*/
public void populateImeiInfo() {
if (mTelephonyManager == null) {
Log.w(TAG, "TelephonyManager for this slot is null. Invalid slot? id=" + mSlotId);
return;
}
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
updateDialogForCdmaPhone();
} else {
@@ -94,9 +104,9 @@ public class ImeiInfoDialogController {
private void updateDialogForCdmaPhone() {
final Resources res = mDialog.getContext().getResources();
mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid());
mDialog.setText(ID_MIN_NUMBER_VALUE,
mSubscriptionInfo != null ? mTelephonyManager.getCdmaMin(
mSubscriptionInfo.getSubscriptionId()) : "");
mDialog.setText(ID_MIN_NUMBER_VALUE, mSubscriptionInfo != null
? mTelephonyManager.getCdmaMin(mSubscriptionInfo.getSubscriptionId())
: "");
if (res.getBoolean(R.bool.config_msid_enable)) {
mDialog.setText(ID_MIN_NUMBER_LABEL,
@@ -125,10 +135,6 @@ public class ImeiInfoDialogController {
mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
}
private SubscriptionInfo getSubscriptionInfo(Context context, int slotId) {
return SubscriptionManager.from(context).getActiveSubscriptionInfoForSimSlotIndex(slotId);
}
@VisibleForTesting
String getCdmaPrlVersion() {
return mTelephonyManager.getCdmaPrlVersion();