Changes to make APN fields uneditable based on carrier config.

Bug: 30457714
Change-Id: I682445eab8eb3ff4ff3eaf036964b467217366f0
This commit is contained in:
Amit Mahajan
2016-09-20 10:59:16 -07:00
parent f6e03921f8
commit 7c01344349

View File

@@ -113,6 +113,7 @@ public class ApnEditor extends SettingsPreferenceFragment
private String mMvnoTypeStr; private String mMvnoTypeStr;
private String mMvnoMatchDataStr; private String mMvnoMatchDataStr;
private String[] mReadOnlyApnTypes; private String[] mReadOnlyApnTypes;
private String[] mReadOnlyApnFields;
private boolean mReadOnlyApn; private boolean mReadOnlyApn;
/** /**
@@ -219,6 +220,7 @@ public class ApnEditor extends SettingsPreferenceFragment
mFirstTime = icicle == null; mFirstTime = icicle == null;
mReadOnlyApn = false; mReadOnlyApn = false;
mReadOnlyApnTypes = null; mReadOnlyApnTypes = null;
mReadOnlyApnFields = null;
if (action.equals(Intent.ACTION_EDIT)) { if (action.equals(Intent.ACTION_EDIT)) {
Uri uri = intent.getData(); Uri uri = intent.getData();
@@ -234,6 +236,8 @@ public class ApnEditor extends SettingsPreferenceFragment
if (b != null) { if (b != null) {
mReadOnlyApnTypes = b.getStringArray( mReadOnlyApnTypes = b.getStringArray(
CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY); CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY);
mReadOnlyApnFields = b.getStringArray(
CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY);
} }
} }
mUri = uri; mUri = uri;
@@ -284,9 +288,9 @@ public class ApnEditor extends SettingsPreferenceFragment
Log.d(TAG, "onCreate: apnTypesMatch; read-only APN"); Log.d(TAG, "onCreate: apnTypesMatch; read-only APN");
mReadOnlyApn = true; mReadOnlyApn = true;
disableAllFields(); disableAllFields();
} /* else (if specific fields are read-only) { } else if (!ArrayUtils.isEmpty(mReadOnlyApnFields)) {
disable specific fields disableFields(mReadOnlyApnFields);
} */ }
for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
getPreferenceScreen().getPreference(i).setOnPreferenceChangeListener(this); getPreferenceScreen().getPreference(i).setOnPreferenceChangeListener(this);
@@ -350,6 +354,72 @@ public class ApnEditor extends SettingsPreferenceFragment
return false; return false;
} }
/**
* Function to get Preference obj corresponding to an apnField
* @param apnField apn field name for which pref is needed
* @return Preference obj corresponding to passed in apnField
*/
private Preference getPreferenceFromFieldName(String apnField) {
switch (apnField) {
case Telephony.Carriers.NAME:
return mName;
case Telephony.Carriers.APN:
return mApn;
case Telephony.Carriers.PROXY:
return mProxy;
case Telephony.Carriers.PORT:
return mPort;
case Telephony.Carriers.USER:
return mUser;
case Telephony.Carriers.SERVER:
return mServer;
case Telephony.Carriers.PASSWORD:
return mPassword;
case Telephony.Carriers.MMSPROXY:
return mMmsProxy;
case Telephony.Carriers.MMSPORT:
return mMmsPort;
case Telephony.Carriers.MMSC:
return mMmsc;
case Telephony.Carriers.MCC:
return mMcc;
case Telephony.Carriers.MNC:
return mMnc;
case Telephony.Carriers.TYPE:
return mApnType;
case Telephony.Carriers.AUTH_TYPE:
return mAuthType;
case Telephony.Carriers.PROTOCOL:
return mProtocol;
case Telephony.Carriers.ROAMING_PROTOCOL:
return mRoamingProtocol;
case Telephony.Carriers.CARRIER_ENABLED:
return mCarrierEnabled;
case Telephony.Carriers.BEARER:
case Telephony.Carriers.BEARER_BITMASK:
return mBearerMulti;
case Telephony.Carriers.MVNO_TYPE:
return mMvnoType;
case Telephony.Carriers.MVNO_MATCH_DATA:
return mMvnoMatchData;
}
return null;
}
/**
* Disables given fields so that user cannot modify them
*
* @param apnFields fields to be disabled
*/
private void disableFields(String[] apnFields) {
for (String apnField : apnFields) {
Preference preference = getPreferenceFromFieldName(apnField);
if (preference != null) {
preference.setEnabled(false);
}
}
}
/** /**
* Disables all fields so that user cannot modify the APN * Disables all fields so that user cannot modify the APN
*/ */