IMS: Add support to display IMS related call logs.
1) Add config to enable/disable IMS call log.
2) Add IMS call type in call log activities.
3) Show "4G voice call" in call log details for VoLTE calls.
Change-Id: I5bc5f3651b27ed6a64d081188e45af492c72aa61
CRs-Fixed: 938465
diff --git a/InCallUI/res/values-mcc460-mnc00/qticonfig.xml b/InCallUI/res/values-mcc460-mnc00/qticonfig.xml
index 9adbd11..c0f6e217 100644
--- a/InCallUI/res/values-mcc460-mnc00/qticonfig.xml
+++ b/InCallUI/res/values-mcc460-mnc00/qticonfig.xml
@@ -35,4 +35,6 @@
<bool name="config_display_data_usage_toast">false</bool>
<!-- Config to show/hide call duration in call detail -->
<bool name="call_duration_enabled">false</bool>
+ <!-- Config to enable/disable ims call log -->
+ <bool name="ims_call_type_enabled">true</bool>
</resources>
diff --git a/InCallUI/res/values-mcc460-mnc02/qticonfig.xml b/InCallUI/res/values-mcc460-mnc02/qticonfig.xml
index 6115c7b..e2ba8a9 100644
--- a/InCallUI/res/values-mcc460-mnc02/qticonfig.xml
+++ b/InCallUI/res/values-mcc460-mnc02/qticonfig.xml
@@ -35,4 +35,6 @@
<bool name="config_display_data_usage_toast">false</bool>
<!-- Config to show/hide call duration in call detail -->
<bool name="call_duration_enabled">false</bool>
+ <!-- Config to enable/disable ims call log -->
+ <bool name="ims_call_type_enabled">true</bool>
</resources>
diff --git a/InCallUI/res/values-mcc460-mnc07/qticonfig.xml b/InCallUI/res/values-mcc460-mnc07/qticonfig.xml
index 9adbd11..c0f6e217 100644
--- a/InCallUI/res/values-mcc460-mnc07/qticonfig.xml
+++ b/InCallUI/res/values-mcc460-mnc07/qticonfig.xml
@@ -35,4 +35,6 @@
<bool name="config_display_data_usage_toast">false</bool>
<!-- Config to show/hide call duration in call detail -->
<bool name="call_duration_enabled">false</bool>
+ <!-- Config to enable/disable ims call log -->
+ <bool name="ims_call_type_enabled">true</bool>
</resources>
diff --git a/InCallUI/res/values-mcc460-mnc08/qticonfig.xml b/InCallUI/res/values-mcc460-mnc08/qticonfig.xml
index 9adbd11..c0f6e217 100644
--- a/InCallUI/res/values-mcc460-mnc08/qticonfig.xml
+++ b/InCallUI/res/values-mcc460-mnc08/qticonfig.xml
@@ -35,4 +35,6 @@
<bool name="config_display_data_usage_toast">false</bool>
<!-- Config to show/hide call duration in call detail -->
<bool name="call_duration_enabled">false</bool>
+ <!-- Config to enable/disable ims call log -->
+ <bool name="ims_call_type_enabled">true</bool>
</resources>
diff --git a/InCallUI/res/values/qticonfig.xml b/InCallUI/res/values/qticonfig.xml
index 557fa90..259454c 100644
--- a/InCallUI/res/values/qticonfig.xml
+++ b/InCallUI/res/values/qticonfig.xml
@@ -42,4 +42,6 @@
<bool name="def_incallui_clearcode_enabled">false</bool>
<!-- Config to show/hide call duration in call detail -->
<bool name="call_duration_enabled">true</bool>
+ <!-- Config to enable/disable ims call log -->
+ <bool name="ims_call_type_enabled">false</bool>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 200b6fe..9682095 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -110,6 +110,9 @@
<string name="type_incoming_video" msgid="82323391702796181">"视频通话来电"</string>
<string name="type_outgoing_video" msgid="2858140021680755266">"拨出的视频通话"</string>
<string name="type_missed_video" msgid="954396897034220545">"错过的视频通话"</string>
+ <string name="type_incoming_volte">4G语音通话来电</string>
+ <string name="type_outgoing_volte">外拨4G语音通话</string>
+ <string name="type_missed_volte">未接4G语音通话</string>
<string name="type_voicemail" msgid="5153139450668549908">"语音信箱"</string>
<string name="type_rejected" msgid="7783201828312472691">"拒接的来电"</string>
<string name="type_blocked" msgid="3521686227115330015">"屏蔽的来电"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cb85684..c2fe867 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -365,6 +365,15 @@
<!-- Title for missed video call in call details screen [CHAR LIMIT=60] -->
<string name="type_missed_video">Missed video call</string>
+ <!-- Title for incoming 4G voice call in call details screen [CHAR LIMIT=60] -->
+ <string name="type_incoming_volte">Incoming 4G voice call</string>
+
+ <!-- Title for outgoing 4G voice call in call details screen [CHAR LIMIT=60] -->
+ <string name="type_outgoing_volte">Outgoing 4G voice call</string>
+
+ <!-- Title for missed 4G voice call in call details screen [CHAR LIMIT=60] -->
+ <string name="type_missed_volte">Missed 4G voice call</string>
+
<!-- Title for voicemail details screen -->
<string name="type_voicemail">Voicemail</string>
diff --git a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
index 8af66af..85039f7 100644
--- a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
@@ -20,6 +20,7 @@
import android.provider.CallLog.Calls;
import android.text.format.DateUtils;
import android.text.format.Formatter;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -30,6 +31,7 @@
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.R;
import com.android.dialer.util.DialerUtils;
+import com.android.dialer.util.AppCompatConstants;
import com.google.common.collect.Lists;
import java.util.ArrayList;
@@ -107,10 +109,30 @@
int callType = details.callTypes[0];
boolean isVideoCall = (details.features & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO
&& CallUtil.isVideoEnabled(mContext);
-
+ boolean isVoLTE = (callType == AppCompatConstants.INCOMING_IMS_TYPE) ||
+ (callType == AppCompatConstants.OUTGOING_IMS_TYPE) ||
+ (callType == AppCompatConstants.MISSED_IMS_TYPE);
+ Log.d("CallDetailHistoryAdapter", "isVideoCall = " + isVideoCall
+ + ", isVoLTE = " + isVoLTE);
callTypeIconView.clear();
callTypeIconView.add(callType);
callTypeIconView.setShowVideo(isVideoCall);
+ boolean imsCallLogEnabled = mContext.getResources()
+ .getBoolean(R.bool.ims_call_type_enabled);
+ if (!imsCallLogEnabled && isVoLTE) {
+ switch (callType) {
+ case AppCompatConstants.INCOMING_IMS_TYPE:
+ callType = Calls.INCOMING_TYPE;
+ break;
+ case AppCompatConstants.OUTGOING_IMS_TYPE:
+ callType = Calls.OUTGOING_TYPE;
+ break;
+ case AppCompatConstants.MISSED_IMS_TYPE:
+ callType = Calls.MISSED_TYPE;
+ break;
+ default:
+ }
+ }
callTypeTextView.setText(mCallTypeHelper.getCallTypeText(callType, isVideoCall));
// Set the date.
CharSequence dateValue = DateUtils.formatDateRange(mContext, details.date, details.date,
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index cf86bad..853767b 100644
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -195,13 +195,32 @@
}
if (callType > CALL_TYPE_ALL) {
- where.append(" AND (").append(Calls.TYPE).append(" = ?)");
+ if (where.length() > 0) {
+ where.append(" AND ");
+ }
+
+ if ((callType == Calls.INCOMING_TYPE) || (callType == Calls.OUTGOING_TYPE)
+ || (callType == Calls.MISSED_TYPE)) {
+ where.append(String.format("(%s = ? OR %s = ?)",
+ Calls.TYPE, Calls.TYPE));
+ } else {
+ where.append(String.format("(%s = ?)", Calls.TYPE));
+ }
selectionArgs.add(Integer.toString(callType));
+ if (callType == Calls.INCOMING_TYPE) {
+ selectionArgs.add(Integer.toString(AppCompatConstants.INCOMING_IMS_TYPE));
+ } else if (callType == Calls.OUTGOING_TYPE) {
+ selectionArgs.add(Integer.toString(AppCompatConstants.OUTGOING_IMS_TYPE));
+ } else if (callType == Calls.MISSED_TYPE) {
+ selectionArgs.add(Integer.toString(AppCompatConstants.MISSED_IMS_TYPE));
+ }
} else {
+ // Add a clause to fetch only items of type voicemail.
where.append(" AND NOT ");
where.append("(" + Calls.TYPE + " = " + AppCompatConstants.CALLS_VOICEMAIL_TYPE + ")");
}
+ // Add a clause to fetch only items newer than the requested date
if (newerThan > 0) {
where.append(" AND (").append(Calls.DATE).append(" > ?)");
selectionArgs.add(Long.toString(newerThan));
diff --git a/src/com/android/dialer/calllog/CallTypeHelper.java b/src/com/android/dialer/calllog/CallTypeHelper.java
index acc114c..10736b2 100644
--- a/src/com/android/dialer/calllog/CallTypeHelper.java
+++ b/src/com/android/dialer/calllog/CallTypeHelper.java
@@ -37,6 +37,12 @@
private final CharSequence mOutgoingVideoName;
/** Name used to identify missed video calls. */
private final CharSequence mMissedVideoName;
+ /** Name used to identify incoming video calls. */
+ private final CharSequence mIncomingVoLTEName;
+ /** Name used to identify outgoing video calls. */
+ private final CharSequence mOutgoingVoLTEName;
+ /** Name used to identify missed video calls. */
+ private final CharSequence mMissedVoLTEName;
/** Name used to identify voicemail calls. */
private final CharSequence mVoicemailName;
/** Name used to identify rejected calls. */
@@ -56,6 +62,9 @@
mIncomingVideoName = resources.getString(R.string.type_incoming_video);
mOutgoingVideoName = resources.getString(R.string.type_outgoing_video);
mMissedVideoName = resources.getString(R.string.type_missed_video);
+ mIncomingVoLTEName = resources.getString(R.string.type_incoming_volte);
+ mOutgoingVoLTEName = resources.getString(R.string.type_outgoing_volte);
+ mMissedVoLTEName = resources.getString(R.string.type_missed_volte);
mVoicemailName = resources.getString(R.string.type_voicemail);
mRejectedName = resources.getString(R.string.type_rejected);
mBlockedName = resources.getString(R.string.type_blocked);
@@ -73,6 +82,13 @@
return mIncomingName;
}
+ case AppCompatConstants.INCOMING_IMS_TYPE:
+ if (isVideoCall) {
+ return mIncomingVideoName;
+ } else {
+ return mIncomingVoLTEName;
+ }
+
case AppCompatConstants.CALLS_OUTGOING_TYPE:
if (isVideoCall) {
return mOutgoingVideoName;
@@ -80,6 +96,13 @@
return mOutgoingName;
}
+ case AppCompatConstants.OUTGOING_IMS_TYPE:
+ if (isVideoCall) {
+ return mOutgoingVideoName;
+ } else {
+ return mOutgoingVoLTEName;
+ }
+
case AppCompatConstants.CALLS_MISSED_TYPE:
if (isVideoCall) {
return mMissedVideoName;
@@ -87,6 +110,13 @@
return mMissedName;
}
+ case AppCompatConstants.MISSED_IMS_TYPE:
+ if (isVideoCall) {
+ return mMissedVideoName;
+ } else {
+ return mMissedVoLTEName;
+ }
+
case AppCompatConstants.CALLS_VOICEMAIL_TYPE:
return mVoicemailName;
@@ -105,14 +135,17 @@
public Integer getHighlightedColor(int callType) {
switch (callType) {
case AppCompatConstants.CALLS_INCOMING_TYPE:
+ case AppCompatConstants.INCOMING_IMS_TYPE:
// New incoming calls are not highlighted.
return null;
case AppCompatConstants.CALLS_OUTGOING_TYPE:
+ case AppCompatConstants.OUTGOING_IMS_TYPE:
// New outgoing calls are not highlighted.
return null;
case AppCompatConstants.CALLS_MISSED_TYPE:
+ case AppCompatConstants.MISSED_IMS_TYPE:
return mNewMissedColor;
case AppCompatConstants.CALLS_VOICEMAIL_TYPE:
@@ -129,6 +162,8 @@
public static boolean isMissedCallType(int callType) {
return (callType != AppCompatConstants.CALLS_INCOMING_TYPE
&& callType != AppCompatConstants.CALLS_OUTGOING_TYPE
+ && callType != AppCompatConstants.INCOMING_IMS_TYPE
+ && callType != AppCompatConstants.OUTGOING_IMS_TYPE
&& callType != AppCompatConstants.CALLS_VOICEMAIL_TYPE);
}
}
diff --git a/src/com/android/dialer/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index 1474843..b272ff6 100644
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -110,10 +110,13 @@
private Drawable getCallTypeDrawable(int callType) {
switch (callType) {
case AppCompatConstants.CALLS_INCOMING_TYPE:
+ case AppCompatConstants.INCOMING_IMS_TYPE:
return sResources.incoming;
case AppCompatConstants.CALLS_OUTGOING_TYPE:
+ case AppCompatConstants.OUTGOING_IMS_TYPE:
return sResources.outgoing;
case AppCompatConstants.CALLS_MISSED_TYPE:
+ case AppCompatConstants.MISSED_IMS_TYPE:
return sResources.missed;
case AppCompatConstants.CALLS_VOICEMAIL_TYPE:
return sResources.voicemail;
diff --git a/src/com/android/dialer/util/AppCompatConstants.java b/src/com/android/dialer/util/AppCompatConstants.java
index 1d52eee..15c1460 100644
--- a/src/com/android/dialer/util/AppCompatConstants.java
+++ b/src/com/android/dialer/util/AppCompatConstants.java
@@ -27,4 +27,7 @@
public static final int CALLS_REJECTED_TYPE = 5;
// Added to android.provider.CallLog.Calls in N+.
public static final int CALLS_BLOCKED_TYPE = 6;
+ public static final int INCOMING_IMS_TYPE = 8;
+ public static final int OUTGOING_IMS_TYPE = 9;
+ public static final int MISSED_IMS_TYPE = 10;
}