summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGary Mai <garymai@google.com>2019-05-07 17:44:03 -0700
committerGary Mai <garymai@google.com>2019-05-09 14:12:35 -0700
commite4cfadf5f40012890fa964b15af5bf7f72e43a6b (patch)
treed45d92a717de263c77496eb17946ad2396768c1c
parentcaabbee24ed2faa16191ab2462c7e525e595f25a (diff)
downloadpackages_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.java27
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) {