mirror of
https://github.com/oxen-io/session-android.git
synced 2023-12-14 02:53:01 +01:00
134 lines
3.7 KiB
Java
134 lines
3.7 KiB
Java
package org.thoughtcrime.securesms.contacts;
|
|
|
|
import android.content.Context;
|
|
import android.content.SharedPreferences;
|
|
import android.database.Cursor;
|
|
import android.net.Uri;
|
|
import android.preference.PreferenceManager;
|
|
import android.provider.ContactsContract;
|
|
import android.provider.ContactsContract.Contacts;
|
|
import android.provider.ContactsContract.PhoneLookup;
|
|
import android.provider.ContactsContract.RawContacts;
|
|
import android.telephony.TelephonyManager;
|
|
|
|
import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
|
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
class ContactIdentityManagerGingerbread extends ContactIdentityManager {
|
|
|
|
public ContactIdentityManagerGingerbread(Context context) {
|
|
super(context);
|
|
}
|
|
|
|
@Override
|
|
public Uri getSelfIdentityUri() {
|
|
String contactUriString = TextSecurePreferences.getIdentityContactUri(context);
|
|
|
|
if (hasLocalNumber()) return getContactUriForNumber(getLocalNumber());
|
|
else if (contactUriString != null) return Uri.parse(contactUriString);
|
|
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public boolean isSelfIdentityAutoDetected() {
|
|
return hasLocalNumber() && getContactUriForNumber(getLocalNumber()) != null;
|
|
}
|
|
|
|
@Override
|
|
public List<Long> getSelfIdentityRawContactIds() {
|
|
long selfIdentityContactId = getSelfIdentityContactId();
|
|
|
|
if (selfIdentityContactId == -1)
|
|
return null;
|
|
|
|
Cursor cursor = null;
|
|
ArrayList<Long> rawContactIds = new ArrayList<Long>();
|
|
|
|
try {
|
|
cursor = context.getContentResolver().query(RawContacts.CONTENT_URI,
|
|
new String[] {RawContacts._ID},
|
|
RawContacts.CONTACT_ID + " = ?",
|
|
new String[] {selfIdentityContactId+""},
|
|
null);
|
|
|
|
if (cursor == null || cursor.getCount() == 0)
|
|
return null;
|
|
|
|
while (cursor.moveToNext()) {
|
|
rawContactIds.add(Long.valueOf(cursor.getLong(0)));
|
|
}
|
|
|
|
return rawContactIds;
|
|
|
|
} finally {
|
|
if (cursor != null)
|
|
cursor.close();
|
|
}
|
|
}
|
|
|
|
private Uri getContactUriForNumber(String number) {
|
|
String[] PROJECTION = new String[] {
|
|
PhoneLookup.DISPLAY_NAME,
|
|
PhoneLookup.LOOKUP_KEY,
|
|
PhoneLookup._ID,
|
|
};
|
|
|
|
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
|
|
Cursor cursor = null;
|
|
|
|
try {
|
|
cursor = context.getContentResolver().query(uri, PROJECTION, null, null, null);
|
|
|
|
if (cursor != null && cursor.moveToFirst()) {
|
|
return Contacts.getLookupUri(cursor.getLong(2), cursor.getString(1));
|
|
}
|
|
} finally {
|
|
if (cursor != null)
|
|
cursor.close();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private long getSelfIdentityContactId() {
|
|
Uri contactUri = getSelfIdentityUri();
|
|
|
|
if (contactUri == null)
|
|
return -1;
|
|
|
|
Cursor cursor = null;
|
|
|
|
try {
|
|
cursor = context.getContentResolver().query(contactUri,
|
|
new String[] {ContactsContract.Contacts._ID},
|
|
null, null, null);
|
|
|
|
if (cursor != null && cursor.moveToFirst()) {
|
|
return cursor.getLong(0);
|
|
} else {
|
|
return -1;
|
|
}
|
|
|
|
} finally {
|
|
if (cursor != null)
|
|
cursor.close();
|
|
}
|
|
}
|
|
|
|
private String getLocalNumber() {
|
|
return ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE))
|
|
.getLine1Number();
|
|
}
|
|
|
|
private boolean hasLocalNumber() {
|
|
String number = getLocalNumber();
|
|
return (number != null) && (number.trim().length() > 0);
|
|
}
|
|
|
|
|
|
|
|
}
|