Read contacts in background

pull/159/head
M66B 6 years ago
parent 6104ecfadb
commit 00400d7ef6

@ -105,7 +105,7 @@ public class ApplicationEx extends Application {
CookieManager.getInstance().setAcceptCookie(false); CookieManager.getInstance().setAcceptCookie(false);
MessageHelper.setSystemProperties(); MessageHelper.setSystemProperties();
ContactInfo.init(this, new Handler()); ContactInfo.init(this);
try { try {
WorkerWatchdog.init(this); WorkerWatchdog.init(this);

@ -36,6 +36,7 @@ import android.graphics.Rect;
import android.graphics.RectF; import android.graphics.RectF;
import android.net.Uri; import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.provider.ContactsContract; import android.provider.ContactsContract;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@ -45,6 +46,8 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.mail.Address; import javax.mail.Address;
import javax.mail.internet.InternetAddress; import javax.mail.internet.InternetAddress;
@ -59,6 +62,9 @@ public class ContactInfo {
private static Map<String, Uri> emailLookup = new ConcurrentHashMap<>(); private static Map<String, Uri> emailLookup = new ConcurrentHashMap<>();
private static Map<String, ContactInfo> emailContactInfo = new HashMap<>(); private static Map<String, ContactInfo> emailContactInfo = new HashMap<>();
private static final ExecutorService executor =
Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory);
private static final long CACHE_CONTACT_DURATION = 120 * 1000L; private static final long CACHE_CONTACT_DURATION = 120 * 1000L;
private ContactInfo() { private ContactInfo() {
@ -211,29 +217,42 @@ public class ContactInfo {
return info; return info;
} }
static void init(final Context context, Handler handler) { static void init(final Context context) {
if (Helper.hasPermission(context, Manifest.permission.READ_CONTACTS)) if (Helper.hasPermission(context, Manifest.permission.READ_CONTACTS)) {
try { Handler handler = new Handler(Looper.getMainLooper());
ContentObserver observer = new ContentObserver(handler) {
@Override ContentObserver observer = new ContentObserver(handler) {
public void onChange(boolean selfChange, Uri uri) { @Override
Log.i("Contact changed uri=" + uri); public void onChange(boolean selfChange, Uri uri) {
try { Log.i("Contact changed uri=" + uri);
emailLookup = getEmailLookup(context); executor.submit(new Runnable() {
} catch (Throwable ex) { @Override
Log.e(ex); public void run() {
try {
emailLookup = getEmailLookup(context);
} catch (Throwable ex) {
Log.e(ex);
}
} }
});
}
};
executor.submit(new Runnable() {
@Override
public void run() {
try {
emailLookup = getEmailLookup(context);
} catch (Throwable ex) {
Log.e(ex);
} }
}; }
});
emailLookup = getEmailLookup(context);
Uri uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI; Uri uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
Log.i("Observing uri=" + uri); Log.i("Observing uri=" + uri);
context.getContentResolver().registerContentObserver(uri, true, observer); context.getContentResolver().registerContentObserver(uri, true, observer);
} catch (Throwable ex) { }
Log.e(ex);
}
} }
static Uri getLookupUri(Context context, Address[] addresses) { static Uri getLookupUri(Context context, Address[] addresses) {
@ -253,6 +272,7 @@ public class ContactInfo {
Map<String, Uri> all = new ConcurrentHashMap<>(); Map<String, Uri> all = new ConcurrentHashMap<>();
if (Helper.hasPermission(context, Manifest.permission.READ_CONTACTS)) { if (Helper.hasPermission(context, Manifest.permission.READ_CONTACTS)) {
Log.i("Reading email/uri");
ContentResolver resolver = context.getContentResolver(); ContentResolver resolver = context.getContentResolver();
long untrusted = -1; long untrusted = -1;

@ -385,6 +385,9 @@ public class FragmentSetup extends FragmentBase {
break; break;
} }
if (has)
ContactInfo.init(getContext());
tvPermissionsDone.setText(has ? R.string.title_setup_done : R.string.title_setup_to_do); tvPermissionsDone.setText(has ? R.string.title_setup_done : R.string.title_setup_to_do);
tvPermissionsDone.setTextColor(has ? textColorPrimary : colorWarning); tvPermissionsDone.setTextColor(has ? textColorPrimary : colorWarning);
tvPermissionsDone.setCompoundDrawablesWithIntrinsicBounds(has ? check : null, null, null, null); tvPermissionsDone.setCompoundDrawablesWithIntrinsicBounds(has ? check : null, null, null, null);

Loading…
Cancel
Save