Merge "selectConflictingRow iterates through unique fields"
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 0e6ac11..4e9b9d0 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -112,6 +112,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -189,6 +190,7 @@
private static final int INVALID_APN_ID = -1;
private static final List<String> CARRIERS_UNIQUE_FIELDS = new ArrayList<String>();
+ private static final Map<String, String> CARRIERS_UNIQUE_FIELDS_DEFAULTS = new HashMap();
private static Boolean s_apnSourceServiceExists;
@@ -200,24 +202,26 @@
// Columns not included in UNIQUE constraint: name, current, edited, user, server, password,
// authtype, type, protocol, roaming_protocol, sub_id, modem_cognitive, max_conns,
// wait_time, max_conns_time, mtu, bearer_bitmask, user_visible
- CARRIERS_UNIQUE_FIELDS.add(NUMERIC);
- CARRIERS_UNIQUE_FIELDS.add(MCC);
- CARRIERS_UNIQUE_FIELDS.add(MNC);
- CARRIERS_UNIQUE_FIELDS.add(APN);
- CARRIERS_UNIQUE_FIELDS.add(PROXY);
- CARRIERS_UNIQUE_FIELDS.add(PORT);
- CARRIERS_UNIQUE_FIELDS.add(MMSPROXY);
- CARRIERS_UNIQUE_FIELDS.add(MMSPORT);
- CARRIERS_UNIQUE_FIELDS.add(MMSC);
- CARRIERS_UNIQUE_FIELDS.add(CARRIER_ENABLED);
- CARRIERS_UNIQUE_FIELDS.add(BEARER);
- CARRIERS_UNIQUE_FIELDS.add(MVNO_TYPE);
- CARRIERS_UNIQUE_FIELDS.add(MVNO_MATCH_DATA);
- CARRIERS_UNIQUE_FIELDS.add(PROFILE_ID);
- CARRIERS_UNIQUE_FIELDS.add(PROTOCOL);
- CARRIERS_UNIQUE_FIELDS.add(ROAMING_PROTOCOL);
- CARRIERS_UNIQUE_FIELDS.add(USER_EDITABLE);
- CARRIERS_UNIQUE_FIELDS.add(OWNED_BY);
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(NUMERIC, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MCC, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MNC, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(APN, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PROXY, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PORT, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MMSPROXY, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MMSPORT, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MMSC, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(CARRIER_ENABLED, "1");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(BEARER, "0");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MVNO_TYPE, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MVNO_MATCH_DATA, "");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PROFILE_ID, "0");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PROTOCOL, "IP");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(ROAMING_PROTOCOL, "IP");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(USER_EDITABLE, "1");
+ CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(OWNED_BY, String.valueOf(OWNED_BY_OTHERS));
+
+ CARRIERS_UNIQUE_FIELDS.addAll(CARRIERS_UNIQUE_FIELDS_DEFAULTS.keySet());
}
@VisibleForTesting
@@ -1638,32 +1642,19 @@
PROFILE_ID };
String selection = TextUtils.join("=? AND ", CARRIERS_UNIQUE_FIELDS) + "=?";
int i = 0;
- String[] selectionArgs = new String[18];
- selectionArgs[i++] = row.getAsString(NUMERIC);
- selectionArgs[i++] = row.getAsString(MCC);
- selectionArgs[i++] = row.getAsString(MNC);
- selectionArgs[i++] = row.containsKey(APN) ? row.getAsString(APN) : "";
- selectionArgs[i++] = row.containsKey(PROXY) ? row.getAsString(PROXY) : "";
- selectionArgs[i++] = row.containsKey(PORT) ? row.getAsString(PORT) : "";
- selectionArgs[i++] = row.containsKey(MMSPROXY) ? row.getAsString(MMSPROXY) : "";
- selectionArgs[i++] = row.containsKey(MMSPORT) ? row.getAsString(MMSPORT) : "";
- selectionArgs[i++] = row.containsKey(MMSC) ? row.getAsString(MMSC) : "";
- selectionArgs[i++] = row.containsKey(CARRIER_ENABLED) &&
- (row.getAsString(CARRIER_ENABLED).equals("0") ||
- row.getAsString(CARRIER_ENABLED).equals("false")) ?
- "0" : "1";
- selectionArgs[i++] = row.containsKey(BEARER) ? row.getAsString(BEARER) : "0";
- selectionArgs[i++] = row.containsKey(MVNO_TYPE) ? row.getAsString(MVNO_TYPE) : "";
- selectionArgs[i++] = row.containsKey(MVNO_MATCH_DATA) ?
- row.getAsString(MVNO_MATCH_DATA) : "";
- selectionArgs[i++] = row.containsKey(PROFILE_ID) ? row.getAsString(PROFILE_ID) : "0";
- selectionArgs[i++] = row.containsKey(PROTOCOL) ? row.getAsString(PROTOCOL) : "IP";
- selectionArgs[i++] = row.containsKey(ROAMING_PROTOCOL) ? row.getAsString(
- ROAMING_PROTOCOL) : "IP";
- selectionArgs[i++] = row.containsKey(USER_EDITABLE) ? row.getAsString(
- USER_EDITABLE) : "1";
- selectionArgs[i++] = row.containsKey(OWNED_BY) ? row.getAsString(
- OWNED_BY) : Integer.toString(OWNED_BY_OTHERS);
+ String[] selectionArgs = new String[CARRIERS_UNIQUE_FIELDS.size()];
+ for (String field : CARRIERS_UNIQUE_FIELDS) {
+ if (CARRIER_ENABLED.equals(field)) {
+ // for CARRIER_ENABLED we overwrite the value "false" with "0"
+ selectionArgs[i++] = row.containsKey(CARRIER_ENABLED) &&
+ (row.getAsString(CARRIER_ENABLED).equals("0") ||
+ row.getAsString(CARRIER_ENABLED).equals("false")) ?
+ "0" : CARRIERS_UNIQUE_FIELDS_DEFAULTS.get(CARRIER_ENABLED);
+ } else {
+ selectionArgs[i++] = row.containsKey(field) ?
+ row.getAsString(field) : CARRIERS_UNIQUE_FIELDS_DEFAULTS.get(field);
+ }
+ }
Cursor c = db.query(table, columns, selection, selectionArgs, null, null, null);