private SparseArray<List<IMAddress>> getIMAddressesMap() { SparseArray<List<IMAddress>> idImAddressMap = new SparseArray<>(); Cursor cur = getCursorFromContentType(new String[]{ID_KEY, MAIN_DATA_KEY, Im.PROTOCOL, Im.CUSTOM_PROTOCOL}, Im.CONTENT_ITEM_TYPE); if (cur != null) { while (cur.moveToNext()) { int id = cur.getInt(cur.getColumnIndex(ID_KEY)); String data = cur.getString(cur.getColumnIndex(MAIN_DATA_KEY)); int labelId = cur.getInt(cur.getColumnIndex(Im.PROTOCOL)); String customLabel = cur.getString(cur.getColumnIndex(Im.CUSTOM_PROTOCOL)); IMAddress current; if (customLabel == null) current = new IMAddress(mCtx, data, labelId); else current = new IMAddress(data, customLabel); List<IMAddress> currentWebsiteList = idImAddressMap.get(id); if (currentWebsiteList == null) { currentWebsiteList = new ArrayList<>(); currentWebsiteList.add(current); idImAddressMap.put(id, currentWebsiteList); } else currentWebsiteList.add(current); } cur.close(); } return idImAddressMap; }
private void initColumnNameConstantsMap() { if (mColumnNameConstantsMap != null) { return; } mColumnNameConstantsMap = new HashMap<String, String>(); mColumnNameConstantsMap.put("name", StructuredName.DISPLAY_NAME); mColumnNameConstantsMap.put("givenname", StructuredName.GIVEN_NAME); mColumnNameConstantsMap.put("familyname", StructuredName.FAMILY_NAME); mColumnNameConstantsMap.put("honorificprefix", StructuredName.PREFIX); mColumnNameConstantsMap.put("honorificsuffix", StructuredName.SUFFIX); mColumnNameConstantsMap.put("additionalname", CUSTOM_DATA_COLUMN); mColumnNameConstantsMap.put("nickname", Nickname.NAME); mColumnNameConstantsMap.put("adr", StructuredPostal.STREET); mColumnNameConstantsMap.put("email", Email.ADDRESS); mColumnNameConstantsMap.put("url", Website.URL); mColumnNameConstantsMap.put("category", GroupMembership.GROUP_ROW_ID); mColumnNameConstantsMap.put("tel", Phone.NUMBER); mColumnNameConstantsMap.put("org", Organization.COMPANY); mColumnNameConstantsMap.put("jobTitle", Organization.TITLE); mColumnNameConstantsMap.put("note", Note.NOTE); mColumnNameConstantsMap.put("impp", Im.DATA); mColumnNameConstantsMap.put("sex", CUSTOM_DATA_COLUMN); mColumnNameConstantsMap.put("genderidentity", CUSTOM_DATA_COLUMN); mColumnNameConstantsMap.put("key", CUSTOM_DATA_COLUMN); }
private void initMimeTypeConstantsMap() { if (mMimeTypeConstantsMap != null) { return; } mMimeTypeConstantsMap = new HashMap<String, String>(); mMimeTypeConstantsMap.put("name", StructuredName.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("givenname", StructuredName.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("familyname", StructuredName.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("honorificprefix", StructuredName.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("honorificsuffix", StructuredName.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("additionalname", MIMETYPE_ADDITIONAL_NAME); mMimeTypeConstantsMap.put("nickname", Nickname.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("email", Email.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("url", Website.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("category", GroupMembership.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("tel", Phone.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("org", Organization.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("jobTitle", Organization.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("note", Note.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("impp", Im.CONTENT_ITEM_TYPE); mMimeTypeConstantsMap.put("sex", MIMETYPE_SEX); mMimeTypeConstantsMap.put("genderidentity", MIMETYPE_GENDER_IDENTITY); mMimeTypeConstantsMap.put("key", MIMETYPE_KEY); }
public ContactOperations addIm(String data, int type, String label, boolean isPrimary, boolean isSuperPrimary, int imProtocolType, String customProtocolName) { mValues.clear(); if (!TextUtils.isEmpty(data)) { mValues.put(Im.DATA, data); mValues.put(Im.TYPE, type); mValues.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE); if (!TextUtils.isEmpty(label)) { mValues.put(Im.LABEL, label); } if (isSuperPrimary) { mValues.put(Email.IS_SUPER_PRIMARY, 1); } if (isPrimary) { mValues.put(Email.IS_PRIMARY, 1); } mValues.put(Im.PROTOCOL, imProtocolType); if (!TextUtils.isEmpty(customProtocolName)) { mValues.put(Im.CUSTOM_PROTOCOL, customProtocolName); } addInsertOp(); } return this; }
public static int getAndroidImProtocolType(ImProtocolType type) { switch (type) { case PROTOCOL_AIM: return Im.PROTOCOL_AIM; case PROTOCOL_CUSTOM: return Im.PROTOCOL_CUSTOM; case PROTOCOL_GOOGLE_TALK: return Im.PROTOCOL_GOOGLE_TALK; case PROTOCOL_ICQ: return Im.PROTOCOL_ICQ; case PROTOCOL_JABBER: return Im.PROTOCOL_JABBER; case PROTOCOL_MSN: return Im.PROTOCOL_MSN; case PROTOCOL_NETMEETING: return Im.PROTOCOL_NETMEETING; case PROTOCOL_QQ: return Im.PROTOCOL_QQ; case PROTOCOL_SKYPE: return Im.PROTOCOL_SKYPE; case PROTOCOL_YAHOO: return Im.PROTOCOL_YAHOO; default: return Im.PROTOCOL_CUSTOM; } }
public static ImProtocolType getImProtocolType(int androidType) { switch (androidType) { case Im.PROTOCOL_AIM: return ImProtocolType.PROTOCOL_AIM; case Im.PROTOCOL_CUSTOM: return ImProtocolType.PROTOCOL_CUSTOM; case Im.PROTOCOL_GOOGLE_TALK: return ImProtocolType.PROTOCOL_GOOGLE_TALK; case Im.PROTOCOL_ICQ: return ImProtocolType.PROTOCOL_ICQ; case Im.PROTOCOL_JABBER: return ImProtocolType.PROTOCOL_JABBER; case Im.PROTOCOL_MSN: return ImProtocolType.PROTOCOL_MSN; case Im.PROTOCOL_NETMEETING: return ImProtocolType.PROTOCOL_NETMEETING; case Im.PROTOCOL_QQ: return ImProtocolType.PROTOCOL_QQ; case Im.PROTOCOL_SKYPE: return ImProtocolType.PROTOCOL_SKYPE; case Im.PROTOCOL_YAHOO: return ImProtocolType.PROTOCOL_YAHOO; default: return ImProtocolType.PROTOCOL_CUSTOM; } }
public Assets(Context context, long contactId) { this.context = context; cursor = context.getContentResolver().query( Data.CONTENT_URI, new String[]{Data._ID, Data.RAW_CONTACT_ID, Data.MIMETYPE, Data.IS_PRIMARY, Data.IS_SUPER_PRIMARY, Data.DATA_VERSION, Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5, Data.DATA6, Data.DATA7, Data.DATA8, Data.DATA9, Data.DATA10, Data.DATA11, Data.DATA12, Data.DATA13, Data.DATA14, Data.DATA15, Data.SYNC1, Data.SYNC2, Data.SYNC3, Data.SYNC4, }, Data.RAW_CONTACT_ID + "=? AND " + Data.MIMETYPE + " IN ( ?, ?, ?, ?, ?, ? )", new String[]{ String.valueOf(contactId), Nickname.CONTENT_ITEM_TYPE, Im.CONTENT_ITEM_TYPE, Photo.CONTENT_ITEM_TYPE, }, null); //cursor.moveToFirst(); columnNames = cursor.getColumnNames(); }
@Override public boolean addIM(ContactStruct contact, Cursor ims, Context ctx, boolean removeMatches) { boolean ret = false; String data = ims.getString(ims.getColumnIndexOrThrow(Im.DATA)); String protocol = ims.getString(ims.getColumnIndexOrThrow(Im.PROTOCOL)); String label = ims.getString(ims.getColumnIndexOrThrow(Im.LABEL)); int type = ims.getInt(ims.getColumnIndexOrThrow(Im.TYPE)); boolean primary = (ims.getInt(ims.getColumnIndexOrThrow(Im.IS_PRIMARY)) != 0); int prot = 0; if (!TextUtils.isEmpty(protocol) && !TextUtils.isEmpty(data)) { String value = data; prot = Integer.valueOf(protocol); if (prot == Im.PROTOCOL_CUSTOM) { return false; } else { label = lookupProviderNameFromId(prot).toLowerCase(Locale.US); } if (!TextUtils.isEmpty(label) && isImNew(contact, value, label, removeMatches)) { contact.addContactmethod(Contacts.KIND_IM, type, value, label, primary); ret = true; } } return ret; }
@Override public String lookupProviderNameFromId(int protocol) { switch (protocol) { case Im.PROTOCOL_GOOGLE_TALK: return GTALK; case Im.PROTOCOL_AIM: return AIM; case Im.PROTOCOL_MSN: return MSN; case Im.PROTOCOL_YAHOO: return YAHOO; case Im.PROTOCOL_ICQ: return ICQ; case Im.PROTOCOL_JABBER: return JABBER; case Im.PROTOCOL_SKYPE: return SKYPE; case Im.PROTOCOL_QQ: return QQ; case Im.PROTOCOL_NETMEETING: return NETMEETING; } return null; }
@Override public int lookupProviderIdFromName(String name) { if (GTALK.equalsIgnoreCase(name)) return Im.PROTOCOL_GOOGLE_TALK; else if (AIM.equalsIgnoreCase(name)) return Im.PROTOCOL_AIM; else if (MSN.equalsIgnoreCase(name)) return Im.PROTOCOL_MSN; else if (YAHOO.equalsIgnoreCase(name)) return Im.PROTOCOL_YAHOO; else if (ICQ.equalsIgnoreCase(name)) return Im.PROTOCOL_ICQ; else if (JABBER.equalsIgnoreCase(name)) return Im.PROTOCOL_JABBER; else if (SKYPE.equalsIgnoreCase(name)) return Im.PROTOCOL_SKYPE; else if (QQ.equalsIgnoreCase(name)) return Im.PROTOCOL_QQ; else if (NETMEETING.equalsIgnoreCase(name)) return Im.PROTOCOL_NETMEETING; else return Im.PROTOCOL_CUSTOM; }
/** * Retrieve the Protocol instance for a given raw database value. * @param id The raw database value. * @return The corresponding Protocol instance, or null. */ public static Protocol byProtocolId(int id) { switch(id) { case Im.PROTOCOL_CUSTOM: return CUSTOM; case Im.PROTOCOL_AIM: return AIM; case Im.PROTOCOL_MSN: return MSN; case Im.PROTOCOL_YAHOO: return YAHOO; case Im.PROTOCOL_SKYPE: return SKYPE; case Im.PROTOCOL_QQ: return QQ; case Im.PROTOCOL_GOOGLE_TALK: return GOOGLE_TALK; case Im.PROTOCOL_ICQ: return ICQ; case Im.PROTOCOL_JABBER: return JABBER; case Im.PROTOCOL_NETMEETING: return NETMEETING; } return null; }
/** * Add an im to a list of database actions to be performed * * @param ops the list of database actions * @param im the item to be inserted */ private void insertIm(ArrayList<ContentProviderOperation> ops, JSONObject im) { ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Im.CONTENT_ITEM_TYPE) .withValue(CommonDataKinds.Im.DATA, getJsonString(im, "value")) .withValue(CommonDataKinds.Im.PROTOCOL, getImType(getJsonString(im, "type"))) .withValue(CommonDataKinds.Im.CUSTOM_PROTOCOL, getJsonString(im, "type")) .build()); }
/** * Converts a string from the W3C Contact API to it's Android int value. * @param string * @return Android int value */ private int getImType(String string) { int type = CommonDataKinds.Im.PROTOCOL_CUSTOM; if (string != null) { String lowerType = string.toLowerCase(Locale.getDefault()); if ("aim".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_AIM; } else if ("google talk".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_GOOGLE_TALK; } else if ("icq".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_ICQ; } else if ("jabber".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_JABBER; } else if ("msn".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_MSN; } else if ("netmeeting".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_NETMEETING; } else if ("qq".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_QQ; } else if ("skype".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_SKYPE; } else if ("yahoo".equals(lowerType)) { return CommonDataKinds.Im.PROTOCOL_YAHOO; } } return type; }
/** * getPhoneType converts an Android phone type into a string * @param type * @return phone type as string. */ @SuppressWarnings("unused") private String getImType(int type) { String stringType; switch (type) { case CommonDataKinds.Im.PROTOCOL_AIM: stringType = "AIM"; break; case CommonDataKinds.Im.PROTOCOL_GOOGLE_TALK: stringType = "Google Talk"; break; case CommonDataKinds.Im.PROTOCOL_ICQ: stringType = "ICQ"; break; case CommonDataKinds.Im.PROTOCOL_JABBER: stringType = "Jabber"; break; case CommonDataKinds.Im.PROTOCOL_MSN: stringType = "MSN"; break; case CommonDataKinds.Im.PROTOCOL_NETMEETING: stringType = "NetMeeting"; break; case CommonDataKinds.Im.PROTOCOL_QQ: stringType = "QQ"; break; case CommonDataKinds.Im.PROTOCOL_SKYPE: stringType = "Skype"; break; case CommonDataKinds.Im.PROTOCOL_YAHOO: stringType = "Yahoo"; break; default: stringType = "custom"; break; } return stringType; }
private String getProtocolName(String protocolId, String customProtocol) { if (protocolId == null) { throw new InvalidCursorTypeException(); } switch (Integer.valueOf(protocolId)) { case Im.PROTOCOL_AIM: return "AIM"; case Im.PROTOCOL_MSN: return "MSN"; case Im.PROTOCOL_YAHOO: return "Yahoo"; case Im.PROTOCOL_SKYPE: return "Skype"; case Im.PROTOCOL_QQ: return "QQ"; case Im.PROTOCOL_GOOGLE_TALK: return "Google Talk"; case Im.PROTOCOL_ICQ: return "ICQ"; case Im.PROTOCOL_JABBER: return "Jabber"; case Im.PROTOCOL_NETMEETING: return "NetMeeting"; case Im.PROTOCOL_CUSTOM: return customProtocol; default: return "Other"; } }
private void getImsValues(final JSONArray ims, List<ContentValues> newContactValues) throws JSONException { if (ims == null) { return; } for (int i = 0; i < ims.length(); i++) { JSONObject im = ims.getJSONObject(i); JSONArray imTypes = im.optJSONArray("type"); if (imTypes != null && imTypes.length() > 0) { for (int j = 0; j < imTypes.length(); j++) { // Translate the IM type string to an integer constant // provided by the ContactsContract API final String type = imTypes.getString(j); final int typeConstant = getImType(type); newContactValues.add(createContentValues(Im.CONTENT_ITEM_TYPE, im.optString("value"), typeConstant, type, im.optBoolean("pref"))); } } else { newContactValues.add(createContentValues(Im.CONTENT_ITEM_TYPE, im.optString("value"), -1, null, im.optBoolean("pref"))); } } }
private void initImTypesMap() { if (mImTypesMap != null) { return; } mImTypesMap = new HashMap<String, Integer>(); mImTypesMap.put("home", Im.TYPE_HOME); mImTypesMap.put("work", Im.TYPE_WORK); }
public ContactOperations updateIm(String imAddress, String label, boolean isPrimary, boolean isSuperPrimary, int proType, String customProName, Uri uri) { mValues.clear(); mValues.put(Im.DATA, imAddress); mValues.put(Im.LABEL, label); mValues.put(Im.PROTOCOL, proType); mValues.put(Im.CUSTOM_PROTOCOL, customProName); mValues.put(Im.IS_PRIMARY, isPrimary ? 1 : 0); mValues.put(Im.IS_SUPER_PRIMARY, isSuperPrimary ? 1 : 0); addUpdateOp(uri); return this; }
public static int getAndroidImType(ImType type) { switch (type) { case TYPE_CUSTOM: return Im.TYPE_CUSTOM; case TYPE_HOME: return Im.TYPE_HOME; case TYPE_OTHER: return Im.TYPE_OTHER; case TYPE_WORK: return Im.TYPE_WORK; default: return Im.TYPE_OTHER; } }
public static ImType getImType(int androidType) { switch (androidType) { case Im.TYPE_CUSTOM: return ImType.TYPE_CUSTOM; case Im.TYPE_HOME: return ImType.TYPE_HOME; case Im.TYPE_OTHER: return ImType.TYPE_OTHER; case Im.TYPE_WORK: return ImType.TYPE_WORK; default: return ImType.TYPE_OTHER; } }
public void insertIdentityKey(Context context, List<Long> rawContactIds, IdentityKey identityKey) { for (long rawContactId : rawContactIds) { Log.w("ContactAccessorNewApi", "Inserting data for raw contact id: " + rawContactId); ContentValues contentValues = new ContentValues(); contentValues.put(Data.RAW_CONTACT_ID, rawContactId); contentValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); contentValues.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); contentValues.put(Im.CUSTOM_PROTOCOL, "TextSecure-IdentityKey"); contentValues.put(Im.DATA, Base64.encodeBytes(identityKey.serialize())); context.getContentResolver().insert(Data.CONTENT_URI, contentValues); } }
@Override public String[] getProjIM() { return new String[] { Im.MIMETYPE, Im.DATA, Im.TYPE, Im.PROTOCOL, Im.CUSTOM_PROTOCOL, Im.IS_PRIMARY, Im.LABEL }; }
private boolean updateIm(ContactMethod cmethod, String rawContactId, Context ctx) { int protocol = lookupProviderIdFromName(cmethod.label); boolean isCustom = isCustomIm(cmethod.label); String custom = isCustom ? cmethod.label : null; // seek for raw contact + data + label/type = same String[] proj = new String[] { Im.RAW_CONTACT_ID, Data.MIMETYPE, Im.PROTOCOL, Im.CUSTOM_PROTOCOL }; String where = null; String[] args = null; if (isCustom) { where = Im.RAW_CONTACT_ID + "=? AND " + Data.MIMETYPE + "=? AND " + Im.PROTOCOL + "=? AND " + Im.CUSTOM_PROTOCOL + "=?"; args = new String[] { rawContactId, Im.CONTENT_ITEM_TYPE, String.valueOf(protocol), custom }; } else { where = Im.RAW_CONTACT_ID + "=? AND " + Data.MIMETYPE + "=? AND " + Im.PROTOCOL + "=?"; args = new String[] { rawContactId, Im.CONTENT_ITEM_TYPE, String.valueOf(protocol) }; } ContentValues values = valuesIm(cmethod); values.put(Im.RAW_CONTACT_ID, rawContactId); return updateDataRow(ctx, proj, where, args, values); }
/** * Retrieve a type instalce for a given database value, or null. * @param id The database value. * @return A corresponding Type instance, or null. */ private static Type byTypeId(int id) { switch(id) { case Im.TYPE_CUSTOM: return CUSTOM; case Im.TYPE_HOME: return HOME; case Im.TYPE_OTHER: return OTHER; case Im.TYPE_WORK: return WORK; } return null; }
private void fillFromCursor() { data = getString(Im.DATA); final String protocolId = getString(Im.PROTOCOL); final String customProtocol = getString(Im.CUSTOM_PROTOCOL); protocol = getProtocolName(protocolId, customProtocol); }
private int getImType(String imType) { initImTypesMap(); Integer type = mImTypesMap.get(imType.toLowerCase()); return type != null ? type : Im.TYPE_CUSTOM; }
protected Builder buildIMPP(Builder builder, Impp impp) { int typeCode = 0; String typeLabel = null; for (ImppType type : impp.getTypes()) if (type == ImppType.HOME) typeCode = Im.TYPE_HOME; else if (type == ImppType.WORK || type == ImppType.BUSINESS) typeCode = Im.TYPE_WORK; if (typeCode == 0) if (impp.getTypes().isEmpty()) typeCode = Im.TYPE_OTHER; else { typeCode = Im.TYPE_CUSTOM; typeLabel = xNameToLabel(impp.getTypes().iterator().next().getValue()); } int protocolCode = 0; String protocolLabel = null; String protocol = impp.getProtocol(); if (protocol == null) { Log.w(TAG, "Ignoring IMPP address without protocol"); return null; } // SIP addresses are IMPP entries in the VCard but locally stored in SipAddress rather than Im boolean sipAddress = false; if (impp.isAim()) protocolCode = Im.PROTOCOL_AIM; else if (impp.isMsn()) protocolCode = Im.PROTOCOL_MSN; else if (impp.isYahoo()) protocolCode = Im.PROTOCOL_YAHOO; else if (impp.isSkype()) protocolCode = Im.PROTOCOL_SKYPE; else if (protocol.equalsIgnoreCase("qq")) protocolCode = Im.PROTOCOL_QQ; else if (protocol.equalsIgnoreCase("google-talk")) protocolCode = Im.PROTOCOL_GOOGLE_TALK; else if (impp.isIcq()) protocolCode = Im.PROTOCOL_ICQ; else if (impp.isXmpp() || protocol.equalsIgnoreCase("jabber")) protocolCode = Im.PROTOCOL_JABBER; else if (protocol.equalsIgnoreCase("netmeeting")) protocolCode = Im.PROTOCOL_NETMEETING; else if (protocol.equalsIgnoreCase("sip")) sipAddress = true; else { protocolCode = Im.PROTOCOL_CUSTOM; protocolLabel = protocol; } if (sipAddress) // save as SIP address builder = builder .withValue(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE) .withValue(Im.DATA, impp.getHandle()) .withValue(Im.TYPE, typeCode); else { // save as IM address builder = builder .withValue(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE) .withValue(Im.DATA, impp.getHandle()) .withValue(Im.TYPE, typeCode) .withValue(Im.PROTOCOL, protocolCode); if (protocolLabel != null) builder = builder.withValue(Im.CUSTOM_PROTOCOL, protocolLabel); } if (typeLabel != null) builder = builder.withValue(Im.LABEL, typeLabel); return builder; }
private boolean doCleanupOldKeyData(String[] keyNames) { if (!SafeSlinger.doesUserHavePermission(Manifest.permission.READ_CONTACTS)) { return true; } if (keyNames == null || keyNames.length == 0) return false; String[] args = new String[2 + keyNames.length]; StringBuilder where = new StringBuilder(); where.append(Data.MIMETYPE); where.append(" = ? AND "); args[0] = (Im.CONTENT_ITEM_TYPE); where.append(Im.PROTOCOL); where.append(" = ? AND "); args[1] = (String.valueOf(Im.PROTOCOL_CUSTOM)); where.append("("); for (int i = 0; i < keyNames.length; i++) { where.append(Im.CUSTOM_PROTOCOL); where.append(" LIKE ?"); args[2 + i] = (keyNames[i]); if ((1 + i) < keyNames.length) where.append(" OR "); } where.append(")"); String query = where.toString(); Cursor c = getContentResolver().query(Data.CONTENT_URI, null, query, args, null); if (c != null) { try { int rowsOutdated = c.getCount(); if (rowsOutdated > 0) { MyLog.d(TAG, String.format("%d deprecated IM rows found", rowsOutdated)); int deletedRows = getContentResolver().delete(Data.CONTENT_URI, query, args); MyLog.d(TAG, String.format("%d deprecated IM rows removed", deletedRows)); } } finally { c.close(); } } return true; }
@Override public String getQueryIM() { return Im.MIMETYPE + " = " + DatabaseUtils.sqlEscapeString("" + Im.CONTENT_ITEM_TYPE); }
@Override public boolean isCustomIm(String label) { int protocol = lookupProviderIdFromName(label); return (protocol == Im.PROTOCOL_CUSTOM); }
@Override public Intent getShowOrCreateIntent( String email ) { Intent intent = criteria.getShowOrCreateIntent( email ); intent.putExtra( Insert.NAME, getDisplayName( email ) ); intent.putExtra( Insert.IM_PROTOCOL, Im.PROTOCOL_JABBER ); intent.putExtra( Insert.IM_HANDLE, email ); return intent; }