Get shortcuts on the background

pull/153/head
M66B 6 years ago
parent e5d4a42c69
commit 013cb9e965

@ -20,6 +20,7 @@ package eu.faircode.email;
*/ */
import android.Manifest; import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@ -37,6 +38,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
@ -781,74 +783,93 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N_MR1) if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N_MR1)
return; return;
ShortcutManager sm = (ShortcutManager) getSystemService(Context.SHORTCUT_SERVICE); new SimpleTask<List<ShortcutInfo>>() {
@Override
List<ShortcutInfo> shortcuts = new ArrayList<>(); @TargetApi(Build.VERSION_CODES.N_MR1)
protected List<ShortcutInfo> onExecute(Context context, Bundle args) {
if (hasPermission(Manifest.permission.READ_CONTACTS)) { ShortcutManager sm = (ShortcutManager) getSystemService(Context.SHORTCUT_SERVICE);
// https://developer.android.com/guide/topics/providers/contacts-provider#ObsoleteData int count = sm.getMaxShortcutCountPerActivity() - sm.getManifestShortcuts().size();
try (Cursor cursor = getContentResolver().query( Log.i("Shortcuts count=" + count +
ContactsContract.CommonDataKinds.Email.CONTENT_URI, " app=" + sm.getMaxShortcutCountPerActivity() +
new String[]{ " manifest=" + sm.getManifestShortcuts().size());
ContactsContract.RawContacts._ID,
ContactsContract.Contacts.LOOKUP_KEY, List<ShortcutInfo> shortcuts = new ArrayList<>();
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Email.DATA, if (hasPermission(Manifest.permission.READ_CONTACTS)) {
ContactsContract.Contacts.STARRED, // https://developer.android.com/guide/topics/providers/contacts-provider#ObsoleteData
ContactsContract.Contacts.TIMES_CONTACTED, try (Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.LAST_TIME_CONTACTED ContactsContract.CommonDataKinds.Email.CONTENT_URI,
}, new String[]{
ContactsContract.CommonDataKinds.Email.DATA + " <> ''", ContactsContract.RawContacts._ID,
null, ContactsContract.Contacts.LOOKUP_KEY,
ContactsContract.Contacts.STARRED + " DESC" + ContactsContract.Contacts.DISPLAY_NAME,
", " + ContactsContract.Contacts.TIMES_CONTACTED + " DESC" + ContactsContract.CommonDataKinds.Email.DATA,
", " + ContactsContract.Contacts.LAST_TIME_CONTACTED + " DESC")) { ContactsContract.Contacts.STARRED,
while (cursor != null && cursor.moveToNext()) ContactsContract.Contacts.TIMES_CONTACTED,
try { ContactsContract.Contacts.LAST_TIME_CONTACTED
long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts._ID)); },
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); ContactsContract.CommonDataKinds.Email.DATA + " <> ''",
String email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); null,
int starred = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.STARRED)); ContactsContract.Contacts.STARRED + " DESC" +
int times = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.TIMES_CONTACTED)); ", " + ContactsContract.Contacts.TIMES_CONTACTED + " DESC" +
long last = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts.LAST_TIME_CONTACTED)); ", " + ContactsContract.Contacts.LAST_TIME_CONTACTED + " DESC")) {
while (cursor != null && cursor.moveToNext() && shortcuts.size() < count)
Log.i("Shortcut id=" + id + " email=" + email + try {
" starred=" + starred + " times=" + times + " last=" + last); long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (starred == 0 && times == 0 && last == 0) String email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
continue; int starred = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.STARRED));
int times = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.TIMES_CONTACTED));
Uri uri = ContactsContract.Contacts.getLookupUri( long last = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts.LAST_TIME_CONTACTED));
cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts._ID)),
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY))); Log.i("Shortcut id=" + id + " email=" + email +
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream( " starred=" + starred + " times=" + times + " last=" + last);
getContentResolver(), uri);
Bitmap bitmap = BitmapFactory.decodeStream(is); if (starred == 0 && times == 0 && last == 0)
Icon icon = (bitmap == null continue;
? Icon.createWithResource(this, R.drawable.ic_shortcut_email)
: Icon.createWithBitmap(bitmap)); Uri uri = ContactsContract.Contacts.getLookupUri(
cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts._ID)),
Intent intent = new Intent(this, ActivityCompose.class); cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)));
intent.setAction(Intent.ACTION_SEND); InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(
intent.setData(Uri.parse("mailto:" + email)); getContentResolver(), uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
shortcuts.add( Icon icon = (bitmap == null
new ShortcutInfo.Builder(this, Long.toString(id)) ? Icon.createWithResource(context, R.drawable.ic_shortcut_email)
.setIcon(icon) : Icon.createWithBitmap(bitmap));
.setRank(shortcuts.size() + 1)
.setShortLabel(name) Intent intent = new Intent(context, ActivityCompose.class);
.setIntent(intent) intent.setAction(Intent.ACTION_SEND);
.build()); intent.setData(Uri.parse("mailto:" + email));
if (sm.getManifestShortcuts().size() + shortcuts.size() >= sm.getMaxShortcutCountPerActivity()) shortcuts.add(
break; new ShortcutInfo.Builder(context, Long.toString(id))
} catch (Throwable ex) { .setIcon(icon)
Log.e(ex); .setRank(shortcuts.size() + 1)
.setShortLabel(name)
.setIntent(intent)
.build());
} catch (Throwable ex) {
Log.e(ex);
}
} }
}
return shortcuts;
}
@Override
@TargetApi(Build.VERSION_CODES.N_MR1)
protected void onExecuted(Bundle args, List<ShortcutInfo> shortcuts) {
ShortcutManager sm = (ShortcutManager) getSystemService(Context.SHORTCUT_SERVICE);
sm.setDynamicShortcuts(shortcuts);
} }
}
sm.setDynamicShortcuts(shortcuts); @Override
protected void onException(Bundle args, Throwable ex) {
Helper.unexpectedError(ActivityView.this, ActivityView.this, ex);
}
}.execute(this, this, new Bundle(), "shortcuts:get");
} }
private Intent getIntentInvite() { private Intent getIntentInvite() {

Loading…
Cancel
Save