1
0
Fork 0
mirror of https://github.com/M66B/FairEmail.git synced 2025-01-01 12:44:42 +00:00

Use local database for frequently used contacts

This commit is contained in:
M66B 2019-03-14 19:22:13 +00:00
parent 0b10f00368
commit 843cd61e51
2 changed files with 31 additions and 57 deletions

View file

@ -33,7 +33,6 @@ import android.content.SharedPreferences;
import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager; import android.content.pm.ShortcutManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
@ -798,64 +797,34 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
" manifest=" + sm.getManifestShortcuts().size()); " manifest=" + sm.getManifestShortcuts().size());
List<ShortcutInfo> shortcuts = new ArrayList<>(); List<ShortcutInfo> shortcuts = new ArrayList<>();
if (count > 0) {
DB db = DB.getInstance(context);
List<EntityContact> frequently = db.contact().getFrequentlyContacted(count);
for (EntityContact contact : frequently) {
Intent intent = new Intent(context, ActivityCompose.class);
intent.setAction(Intent.ACTION_SEND);
intent.setData(Uri.parse("mailto:" + contact.email));
if (hasPermission(Manifest.permission.READ_CONTACTS)) { Icon icon = null;
// https://developer.android.com/guide/topics/providers/contacts-provider#ObsoleteData if (contact.avatar != null &&
try (Cursor cursor = getContentResolver().query( Helper.hasPermission(context, Manifest.permission.READ_CONTACTS)) {
ContactsContract.CommonDataKinds.Email.CONTENT_URI, // Create icon from bitmap because launcher might not have contacts permission
new String[]{ InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(
ContactsContract.RawContacts._ID, getContentResolver(), Uri.parse(contact.avatar));
ContactsContract.Contacts.LOOKUP_KEY, Bitmap bitmap = BitmapFactory.decodeStream(is);
ContactsContract.Contacts.DISPLAY_NAME, if (bitmap != null)
ContactsContract.CommonDataKinds.Email.DATA, icon = Icon.createWithBitmap(bitmap);
ContactsContract.Contacts.STARRED, }
ContactsContract.Contacts.TIMES_CONTACTED, if (icon == null)
ContactsContract.Contacts.LAST_TIME_CONTACTED icon = Icon.createWithResource(context, R.drawable.ic_shortcut_email);
},
ContactsContract.CommonDataKinds.Email.DATA + " <> ''",
null,
ContactsContract.Contacts.STARRED + " DESC" +
", " + ContactsContract.Contacts.TIMES_CONTACTED + " DESC" +
", " + ContactsContract.Contacts.LAST_TIME_CONTACTED + " DESC")) {
while (cursor != null && cursor.moveToNext() && shortcuts.size() < count)
try {
long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
int starred = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.STARRED));
int times = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.TIMES_CONTACTED));
long last = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts.LAST_TIME_CONTACTED));
Log.i("Shortcut id=" + id + " email=" + email + shortcuts.add(
" starred=" + starred + " times=" + times + " last=" + last); new ShortcutInfo.Builder(context, Long.toString(contact.id))
.setIcon(icon)
if (starred == 0 && times == 0 && last == 0) .setRank(shortcuts.size() + 1)
continue; .setShortLabel(contact.name == null ? contact.email : contact.name)
.setIntent(intent)
Uri uri = ContactsContract.Contacts.getLookupUri( .build());
cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts._ID)),
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)));
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(
getContentResolver(), uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
Icon icon = (bitmap == null
? Icon.createWithResource(context, R.drawable.ic_shortcut_email)
: Icon.createWithBitmap(bitmap));
Intent intent = new Intent(context, ActivityCompose.class);
intent.setAction(Intent.ACTION_SEND);
intent.setData(Uri.parse("mailto:" + email));
shortcuts.add(
new ShortcutInfo.Builder(context, Long.toString(id))
.setIcon(icon)
.setRank(shortcuts.size() + 1)
.setShortLabel(name)
.setIntent(intent)
.build());
} catch (Throwable ex) {
Log.e(ex);
}
} }
} }

View file

@ -38,6 +38,11 @@ public interface DaoContact {
" ORDER BY times_contacted DESC, last_contacted DESC") " ORDER BY times_contacted DESC, last_contacted DESC")
LiveData<List<EntityContact>> liveContacts(); LiveData<List<EntityContact>> liveContacts();
@Query("SELECT * FROM contact" +
" ORDER BY times_contacted DESC, last_contacted DESC" +
" LIMIT :count")
List<EntityContact> getFrequentlyContacted(int count);
@Query("SELECT *" + @Query("SELECT *" +
" FROM contact" + " FROM contact" +
" WHERE email = :email" + " WHERE email = :email" +