Merge "Change to not call update() if APN is not modified." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-05-02 01:59:37 +00:00
committed by Android (Google) Code Review

View File

@@ -64,6 +64,7 @@ public class ApnEditor extends SettingsPreferenceFragment
implements OnPreferenceChangeListener, OnKeyListener { implements OnPreferenceChangeListener, OnKeyListener {
private final static String TAG = ApnEditor.class.getSimpleName(); private final static String TAG = ApnEditor.class.getSimpleName();
private final static boolean VDBG = false; // STOPSHIP if true
private final static String SAVED_POS = "pos"; private final static String SAVED_POS = "pos";
private final static String KEY_AUTH_TYPE = "auth_type"; private final static String KEY_AUTH_TYPE = "auth_type";
@@ -784,6 +785,46 @@ public class ApnEditor extends SettingsPreferenceFragment
} }
} }
/**
* Add key, value to cv and compare the value against the value at index in mCursor. Return true
* if values are different. assumeDiff indicates if values can be assumed different in which
* case no comparison is needed.
* @return true if value is different from the value at index in mCursor
*/
boolean setStringValueAndCheckIfDiff(ContentValues cv, String key, String value,
boolean assumeDiff, int index) {
cv.put(key, value);
String valueFromCursor = mCursor.getString(index);
if (VDBG) {
Log.d(TAG, "setStringValueAndCheckIfDiff: assumeDiff: " + assumeDiff
+ " key: " + key
+ " value: '" + value
+ "' valueFromCursor: '" + valueFromCursor + "'");
}
return assumeDiff
|| !((TextUtils.isEmpty(value) && TextUtils.isEmpty(valueFromCursor))
|| (value != null && value.equals(valueFromCursor)));
}
/**
* Add key, value to cv and compare the value against the value at index in mCursor. Return true
* if values are different. assumeDiff indicates if values can be assumed different in which
* case no comparison is needed.
* @return true if value is different from the value at index in mCursor
*/
boolean setIntValueAndCheckIfDiff(ContentValues cv, String key, int value,
boolean assumeDiff, int index) {
cv.put(key, value);
int valueFromCursor = mCursor.getInt(index);
if (VDBG) {
Log.d(TAG, "setIntValueAndCheckIfDiff: assumeDiff: " + assumeDiff
+ " key: " + key
+ " value: '" + value
+ "' valueFromCursor: '" + valueFromCursor + "'");
}
return assumeDiff || value != valueFromCursor;
}
/** /**
* Check the key fields' validity and save if valid. * Check the key fields' validity and save if valid.
* @param force save even if the fields are not valid, if the app is * @param force save even if the fields are not valid, if the app is
@@ -820,33 +861,110 @@ public class ApnEditor extends SettingsPreferenceFragment
} }
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
// call update() if it's a new APN. If not, check if any field differs from the db value;
// if any diff is found update() should be called
boolean callUpdate = mNewApn;
// Add a dummy name "Untitled", if the user exits the screen without adding a name but // Add a dummy name "Untitled", if the user exits the screen without adding a name but
// entered other information worth keeping. // entered other information worth keeping.
values.put(Telephony.Carriers.NAME, callUpdate = setStringValueAndCheckIfDiff(values,
name.length() < 1 ? getResources().getString(R.string.untitled_apn) : name); Telephony.Carriers.NAME,
values.put(Telephony.Carriers.APN, apn); name.length() < 1 ? getResources().getString(R.string.untitled_apn) : name,
values.put(Telephony.Carriers.PROXY, checkNotSet(mProxy.getText())); callUpdate,
values.put(Telephony.Carriers.PORT, checkNotSet(mPort.getText())); NAME_INDEX);
values.put(Telephony.Carriers.MMSPROXY, checkNotSet(mMmsProxy.getText()));
values.put(Telephony.Carriers.MMSPORT, checkNotSet(mMmsPort.getText())); callUpdate = setStringValueAndCheckIfDiff(values,
values.put(Telephony.Carriers.USER, checkNotSet(mUser.getText())); Telephony.Carriers.APN,
values.put(Telephony.Carriers.SERVER, checkNotSet(mServer.getText())); apn,
values.put(Telephony.Carriers.PASSWORD, checkNotSet(mPassword.getText())); callUpdate,
values.put(Telephony.Carriers.MMSC, checkNotSet(mMmsc.getText())); APN_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.PROXY,
checkNotSet(mProxy.getText()),
callUpdate,
PROXY_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.PORT,
checkNotSet(mPort.getText()),
callUpdate,
PORT_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.MMSPROXY,
checkNotSet(mMmsProxy.getText()),
callUpdate,
MMSPROXY_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.MMSPORT,
checkNotSet(mMmsPort.getText()),
callUpdate,
MMSPORT_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.USER,
checkNotSet(mUser.getText()),
callUpdate,
USER_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.SERVER,
checkNotSet(mServer.getText()),
callUpdate,
SERVER_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.PASSWORD,
checkNotSet(mPassword.getText()),
callUpdate,
PASSWORD_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.MMSC,
checkNotSet(mMmsc.getText()),
callUpdate,
MMSC_INDEX);
String authVal = mAuthType.getValue(); String authVal = mAuthType.getValue();
if (authVal != null) { if (authVal != null) {
values.put(Telephony.Carriers.AUTH_TYPE, Integer.parseInt(authVal)); callUpdate = setIntValueAndCheckIfDiff(values,
Telephony.Carriers.AUTH_TYPE,
Integer.parseInt(authVal),
callUpdate,
AUTH_TYPE_INDEX);
} }
values.put(Telephony.Carriers.PROTOCOL, checkNotSet(mProtocol.getValue())); callUpdate = setStringValueAndCheckIfDiff(values,
values.put(Telephony.Carriers.ROAMING_PROTOCOL, checkNotSet(mRoamingProtocol.getValue())); Telephony.Carriers.PROTOCOL,
checkNotSet(mProtocol.getValue()),
callUpdate,
PROTOCOL_INDEX);
values.put(Telephony.Carriers.TYPE, checkNotSet(mApnType.getText())); callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.ROAMING_PROTOCOL,
checkNotSet(mRoamingProtocol.getValue()),
callUpdate,
ROAMING_PROTOCOL_INDEX);
values.put(Telephony.Carriers.MCC, mcc); callUpdate = setStringValueAndCheckIfDiff(values,
values.put(Telephony.Carriers.MNC, mnc); Telephony.Carriers.TYPE,
checkNotSet(mApnType.getText()),
callUpdate,
TYPE_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.MCC,
mcc,
callUpdate,
MCC_INDEX);
callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.MNC,
mnc,
callUpdate,
MNC_INDEX);
values.put(Telephony.Carriers.NUMERIC, mcc + mnc); values.put(Telephony.Carriers.NUMERIC, mcc + mnc);
@@ -866,7 +984,11 @@ public class ApnEditor extends SettingsPreferenceFragment
bearerBitmask |= ServiceState.getBitmaskForTech(Integer.parseInt(bearer)); bearerBitmask |= ServiceState.getBitmaskForTech(Integer.parseInt(bearer));
} }
} }
values.put(Telephony.Carriers.BEARER_BITMASK, bearerBitmask); callUpdate = setIntValueAndCheckIfDiff(values,
Telephony.Carriers.BEARER_BITMASK,
bearerBitmask,
callUpdate,
BEARER_BITMASK_INDEX);
int bearerVal; int bearerVal;
if (bearerBitmask == 0 || mBearerInitialVal == 0) { if (bearerBitmask == 0 || mBearerInitialVal == 0) {
@@ -879,13 +1001,35 @@ public class ApnEditor extends SettingsPreferenceFragment
// random tech from the new bitmask?? // random tech from the new bitmask??
bearerVal = 0; bearerVal = 0;
} }
values.put(Telephony.Carriers.BEARER, bearerVal); callUpdate = setIntValueAndCheckIfDiff(values,
Telephony.Carriers.BEARER,
bearerVal,
callUpdate,
BEARER_INDEX);
values.put(Telephony.Carriers.MVNO_TYPE, checkNotSet(mMvnoType.getValue())); callUpdate = setStringValueAndCheckIfDiff(values,
values.put(Telephony.Carriers.MVNO_MATCH_DATA, checkNotSet(mMvnoMatchData.getText())); Telephony.Carriers.MVNO_TYPE,
checkNotSet(mMvnoType.getValue()),
callUpdate,
MVNO_TYPE_INDEX);
values.put(Telephony.Carriers.CARRIER_ENABLED, mCarrierEnabled.isChecked() ? 1 : 0); callUpdate = setStringValueAndCheckIfDiff(values,
Telephony.Carriers.MVNO_MATCH_DATA,
checkNotSet(mMvnoMatchData.getText()),
callUpdate,
MVNO_MATCH_DATA_INDEX);
callUpdate = setIntValueAndCheckIfDiff(values,
Telephony.Carriers.CARRIER_ENABLED,
mCarrierEnabled.isChecked() ? 1 : 0,
callUpdate,
CARRIER_ENABLED_INDEX);
if (callUpdate) {
getContentResolver().update(mUri, values, null, null); getContentResolver().update(mUri, values, null, null);
} else {
if (VDBG) Log.d(TAG, "validateAndSave: not calling update()");
}
return true; return true;
} }