summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/app/calllog
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/app/calllog')
-rw-r--r--java/com/android/dialer/app/calllog/CallLogAdapter.java72
-rw-r--r--java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java4
-rw-r--r--java/com/android/dialer/app/calllog/CallLogNotificationsService.java16
-rw-r--r--java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java19
-rw-r--r--java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java2
-rw-r--r--java/com/android/dialer/app/calllog/VoicemailQueryHandler.java4
6 files changed, 77 insertions, 40 deletions
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index 8d84e8ea7..b23e18d6b 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -35,7 +35,6 @@ import android.support.annotation.WorkerThread;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.telecom.PhoneAccountHandle;
-import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -74,6 +73,7 @@ import com.android.dialer.phonenumbercache.ContactInfoHelper;
import com.android.dialer.phonenumberutil.PhoneNumberHelper;
import com.android.dialer.spam.Spam;
import com.android.dialer.util.PermissionsUtil;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -141,6 +141,12 @@ public class CallLogAdapter extends GroupingListAdapter
viewHolder.isCallComposerCapable =
capabilities != null && capabilities.supportsCallComposer();
+ CallDetailsEntries callDetailsEntries = viewHolder.getDetailedPhoneDetails();
+ setCallDetailsEntriesHistoryResults(
+ viewHolder.number,
+ callDetailsEntries,
+ getAllHistoricalData(viewHolder.number, callDetailsEntries));
+
if (viewHolder.rowId == mCurrentlyExpandedRowId) {
// Hide actions, if the clicked item is the expanded item.
viewHolder.showActions(false);
@@ -461,6 +467,9 @@ public class CallLogAdapter extends GroupingListAdapter
// the value will be false while capabilities are requested. mExpandCollapseListener will
// attempt to set the field properly in that case
views.isCallComposerCapable = isCallComposerCapable(views.number);
+ setCallDetailsEntriesHistoryResults(
+ views.number, callDetailsEntries, getAllHistoricalData(views.number, callDetailsEntries));
+ views.setDetailedPhoneDetails(callDetailsEntries);
final AsyncTask<Void, Void, Boolean> loadDataTask =
new AsyncTask<Void, Void, Boolean>() {
@Override
@@ -482,35 +491,9 @@ public class CallLogAdapter extends GroupingListAdapter
.checkSpamStatusSynchronous(views.number, views.countryIso);
details.isSpam = views.isSpam;
}
- if (isCancelled()) {
- return false;
- }
- setCallDetailsEntriesHistoryResults(
- PhoneNumberUtils.formatNumberToE164(views.number, views.countryIso),
- callDetailsEntries);
- views.setDetailedPhoneDetails(callDetailsEntries);
return !isCancelled() && loadData(views, rowId, details);
}
- private void setCallDetailsEntriesHistoryResults(
- @Nullable String number, CallDetailsEntries callDetailsEntries) {
- if (number == null) {
- return;
- }
- Map<CallDetailsEntry, List<HistoryResult>> mappedResults =
- getEnrichedCallManager().getAllHistoricalData(number, callDetailsEntries);
- for (CallDetailsEntry entry : callDetailsEntries.entries) {
- List<HistoryResult> results = mappedResults.get(entry);
- if (results != null) {
- entry.historyResults = mappedResults.get(entry).toArray(new HistoryResult[0]);
- LogUtil.v(
- "CallLogAdapter.setCallDetailsEntriesHistoryResults",
- "mapped %d results",
- entry.historyResults.length);
- }
- }
- }
-
@Override
protected void onPostExecute(Boolean success) {
views.isLoaded = true;
@@ -545,6 +528,41 @@ public class CallLogAdapter extends GroupingListAdapter
return capabilities.supportsCallComposer();
}
+ @NonNull
+ private Map<CallDetailsEntry, List<HistoryResult>> getAllHistoricalData(
+ @Nullable String number, @NonNull CallDetailsEntries entries) {
+ if (number == null) {
+ return Collections.emptyMap();
+ }
+
+ Map<CallDetailsEntry, List<HistoryResult>> historicalData =
+ getEnrichedCallManager().getAllHistoricalData(number, entries);
+ if (historicalData == null) {
+ getEnrichedCallManager().requestAllHistoricalData(number, entries);
+ return Collections.emptyMap();
+ }
+ return historicalData;
+ }
+
+ private void setCallDetailsEntriesHistoryResults(
+ @Nullable String number,
+ @NonNull CallDetailsEntries callDetailsEntries,
+ @NonNull Map<CallDetailsEntry, List<HistoryResult>> mappedResults) {
+ if (number == null) {
+ return;
+ }
+ for (CallDetailsEntry entry : callDetailsEntries.entries) {
+ List<HistoryResult> results = mappedResults.get(entry);
+ if (results != null) {
+ entry.historyResults = mappedResults.get(entry).toArray(new HistoryResult[0]);
+ LogUtil.v(
+ "CallLogAdapter.setCallDetailsEntriesHistoryResults",
+ "mapped %d results",
+ entry.historyResults.length);
+ }
+ }
+ }
+
/**
* Initialize PhoneCallDetails by reading all data from cursor. This method must be run on main
* thread since cursor is not thread safe.
diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
index f12837e6f..79a32afe3 100644
--- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
+++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
@@ -215,7 +215,7 @@ public class CallLogNotificationsQueryHelper {
public static final class NewCall {
public final Uri callsUri;
- public final Uri voicemailUri;
+ @Nullable public final Uri voicemailUri;
public final String number;
public final int numberPresentation;
public final String accountComponentName;
@@ -226,7 +226,7 @@ public class CallLogNotificationsQueryHelper {
public NewCall(
Uri callsUri,
- Uri voicemailUri,
+ @Nullable Uri voicemailUri,
String number,
int numberPresentation,
String accountComponentName,
diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsService.java b/java/com/android/dialer/app/calllog/CallLogNotificationsService.java
index b0d48eee5..2f26027f9 100644
--- a/java/com/android/dialer/app/calllog/CallLogNotificationsService.java
+++ b/java/com/android/dialer/app/calllog/CallLogNotificationsService.java
@@ -20,6 +20,8 @@ import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
import android.support.annotation.Nullable;
import com.android.dialer.common.LogUtil;
import com.android.dialer.telecom.TelecomUtil;
@@ -190,10 +192,16 @@ public class CallLogNotificationsService extends IntentService {
String action = intent.getAction();
switch (action) {
case ACTION_MARK_NEW_VOICEMAILS_AS_OLD:
- if (mVoicemailQueryHandler == null) {
- mVoicemailQueryHandler = new VoicemailQueryHandler(this, getContentResolver());
- }
- mVoicemailQueryHandler.markNewVoicemailsAsOld(intent.getData());
+ // VoicemailQueryHandler cannot be created on the IntentService worker thread. The completed
+ // callback might happen when the thread is dead.
+ Handler handler = new Handler(Looper.getMainLooper());
+ handler.post(
+ () -> {
+ if (mVoicemailQueryHandler == null) {
+ mVoicemailQueryHandler = new VoicemailQueryHandler(this, getContentResolver());
+ }
+ mVoicemailQueryHandler.markNewVoicemailsAsOld(intent.getData());
+ });
break;
case ACTION_UPDATE_VOICEMAIL_NOTIFICATIONS:
DefaultVoicemailNotifier.getInstance(this).updateNotification();
diff --git a/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java b/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java
index 02d23e996..b0a6ee135 100644
--- a/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java
@@ -113,8 +113,10 @@ public class DefaultVoicemailNotifier {
context, newCall.number, newCall.countryIso, newCall.dateMs)) {
itr.remove();
- // Delete the voicemail.
- context.getContentResolver().delete(newCall.voicemailUri, null, null);
+ if (newCall.voicemailUri != null) {
+ // Delete the voicemail.
+ context.getContentResolver().delete(newCall.voicemailUri, null, null);
+ }
continue;
}
@@ -137,8 +139,7 @@ public class DefaultVoicemailNotifier {
}
if (newCalls.isEmpty()) {
- // No voicemails to notify about: clear the notification.
- CallLogNotificationsService.markNewVoicemailsAsOld(context, null);
+ // No voicemails to notify about
return;
}
@@ -164,7 +165,7 @@ public class DefaultVoicemailNotifier {
for (NewCall voicemail : newCalls) {
getNotificationManager()
.notify(
- voicemail.voicemailUri.toString(),
+ voicemail.callsUri.toString(),
NOTIFICATION_ID,
createNotificationForVoicemail(voicemail, contactInfos));
}
@@ -234,8 +235,12 @@ public class DefaultVoicemailNotifier {
contactInfo.name))
.setWhen(voicemail.dateMs)
.setSound(notificationInfo.first)
- .setDefaults(notificationInfo.second)
- .setDeleteIntent(createMarkNewVoicemailsAsOldIntent(voicemail.voicemailUri));
+ .setDefaults(notificationInfo.second);
+
+ if (voicemail.voicemailUri != null) {
+ notificationBuilder.setDeleteIntent(
+ createMarkNewVoicemailsAsOldIntent(voicemail.voicemailUri));
+ }
NotificationChannelManager.applyChannel(
notificationBuilder,
diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
index acbccb39f..15f860009 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
@@ -87,6 +87,8 @@ public class PhoneCallDetailsHelper {
(details.features & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO);
views.callTypeIcons.setShowHd(
MotorolaUtils.shouldShowHdIconInCallLog(mContext, details.features));
+ views.callTypeIcons.setShowWifi(
+ MotorolaUtils.shouldShowWifiIconInCallLog(mContext, details.features));
views.callTypeIcons.requestLayout();
views.callTypeIcons.setVisibility(View.VISIBLE);
diff --git a/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java b/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java
index e73684e70..2aa3fb282 100644
--- a/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java
+++ b/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java
@@ -23,8 +23,10 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.CallLog.Calls;
+import android.support.annotation.MainThread;
import android.support.annotation.Nullable;
import com.android.dialer.app.R;
+import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.notification.GroupedNotificationUtil;
@@ -38,8 +40,10 @@ public class VoicemailQueryHandler extends AsyncQueryHandler {
private Context mContext;
+ @MainThread
public VoicemailQueryHandler(Context context, ContentResolver contentResolver) {
super(contentResolver);
+ Assert.isMainThread();
mContext = context;
}