diff options
| author | Gary Mai <garymai@google.com> | 2019-05-07 17:44:03 -0700 |
|---|---|---|
| committer | Gary Mai <garymai@google.com> | 2019-05-09 14:12:35 -0700 |
| commit | e4cfadf5f40012890fa964b15af5bf7f72e43a6b (patch) | |
| tree | d45d92a717de263c77496eb17946ad2396768c1c | |
| parent | caabbee24ed2faa16191ab2462c7e525e595f25a (diff) | |
| download | packages_apps_Contacts-e4cfadf5f40012890fa964b15af5bf7f72e43a6b.tar.gz packages_apps_Contacts-e4cfadf5f40012890fa964b15af5bf7f72e43a6b.tar.bz2 packages_apps_Contacts-e4cfadf5f40012890fa964b15af5bf7f72e43a6b.zip | |
Send broadcast to request high res photo sync
For GoogleAccountTypes don't start the service to notify the
adapter that the contact was viewed. Instead send a broadcast
to request a high res photo sync.
Fallback to original code path if there are no receivers.
Test: Manual test with debug logging enabled. Viewing a low res
photo synced the high res photo after the broadcast was received
and the job intent service was run.
Tested on Q build: QP1A.190430.002
Bug:131899328
Change-Id: I85212d6173567a305868a631a610f003b8cbc7a7
| -rw-r--r-- | src/com/android/contacts/model/ContactLoader.java | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/com/android/contacts/model/ContactLoader.java b/src/com/android/contacts/model/ContactLoader.java index bf1ac741e..cf5442f80 100644 --- a/src/com/android/contacts/model/ContactLoader.java +++ b/src/com/android/contacts/model/ContactLoader.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; import android.content.res.AssetFileDescriptor; import android.content.res.Resources; import android.database.Cursor; @@ -42,6 +43,7 @@ import com.android.contacts.GroupMetaDataLoader; import com.android.contacts.compat.CompatUtils; import com.android.contacts.group.GroupMetaData; import com.android.contacts.model.account.AccountType; +import com.android.contacts.model.account.GoogleAccountType; import com.android.contacts.model.dataitem.DataItem; import com.android.contacts.model.dataitem.PhoneDataItem; import com.android.contacts.model.dataitem.PhotoDataItem; @@ -881,13 +883,34 @@ public class ContactLoader extends AsyncTaskLoader<Contact> { mNotifiedRawContactIds.add(rawContactId); final AccountType accountType = rawContact.getAccountType(context); final String serviceName = accountType.getViewContactNotifyServiceClassName(); - final String servicePackageName = accountType.getViewContactNotifyServicePackageName(); + final String servicePackageName = accountType + .getViewContactNotifyServicePackageName(); if (!TextUtils.isEmpty(serviceName) && !TextUtils.isEmpty(servicePackageName)) { final Uri uri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); final Intent intent = new Intent(); + intent.setDataAndType(uri, RawContacts.CONTENT_ITEM_TYPE); + if (accountType instanceof GoogleAccountType) { + intent.setPackage(servicePackageName); + intent + .setAction("com.google.android.syncadapters.contacts.SYNC_HIGH_RES_PHOTO"); + List<ResolveInfo> broadcastReceivers = + context.getPackageManager().queryBroadcastReceivers(intent, 0); + if (!broadcastReceivers.isEmpty()) { + if (Log.isLoggable(TAG, Log.DEBUG)) { + for (ResolveInfo broadcastReceiver : broadcastReceivers) { + Log.d(TAG, broadcastReceiver.activityInfo.toString()); + } + } + context.sendBroadcast(intent); + continue; + } + } + // TODO: Social Stream API is deprecated, and once the opted-in + // sync adapters target Android O+, we won't be able to start their services + // since they'll likely be in the background, so we'll need to remove the + // startService call. intent.setClassName(servicePackageName, serviceName); intent.setAction(Intent.ACTION_VIEW); - intent.setDataAndType(uri, RawContacts.CONTENT_ITEM_TYPE); try { context.startService(intent); } catch (Exception e) { |
