summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calllogutils
diff options
context:
space:
mode:
authorAndroid Dialer <noreply@google.com>2017-10-09 16:15:53 -0700
committerEric Erfanian <erfanian@google.com>2017-10-10 07:12:46 -0700
commit19e6dbd30ae88e68cd68f3d3873440d50d19d902 (patch)
tree021e5dc48597d7bd47e61e9d5e25f4a5a956d9e4 /java/com/android/dialer/calllogutils
parent04ac93d3c9d2f3f4c157bfa1d23d225aa34db9df (diff)
Group calls in the call log according to their corresponding actions.
Currently different types of calls can be grouped together (e.g., 1 voice call and 1 IMS call to/from the same number), which makes it difficult to choose the icon for the call detail UI's call back button. This CL adds an extra constraint that separates different call types (Lightbringer, IMS, and voice). This way calls in the call detail UI are in the same category and an appropriate icon can be set. Bug: 66026167 Test: CallLogGroupBuilderTest.addGroups_MixedEntries_PartiallyGroupedByAction PiperOrigin-RevId: 171602617 Change-Id: Id8170206009ba836a40c38a86914c71d5c7701dc
Diffstat (limited to 'java/com/android/dialer/calllogutils')
-rw-r--r--java/com/android/dialer/calllogutils/CallbackActionHelper.java95
1 files changed, 95 insertions, 0 deletions
diff --git a/java/com/android/dialer/calllogutils/CallbackActionHelper.java b/java/com/android/dialer/calllogutils/CallbackActionHelper.java
new file mode 100644
index 000000000..297d5e649
--- /dev/null
+++ b/java/com/android/dialer/calllogutils/CallbackActionHelper.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.calllogutils;
+
+import android.content.Context;
+import android.provider.CallLog.Calls;
+import android.support.annotation.IntDef;
+import android.text.TextUtils;
+import com.android.dialer.lightbringer.Lightbringer;
+import com.android.dialer.lightbringer.LightbringerComponent;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/** Helper class to determine the callback action associated with a call in the call log. */
+public class CallbackActionHelper {
+
+ /** Specifies the action a user can take to make a callback. */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({
+ CallbackAction.NONE,
+ CallbackAction.IMS_VIDEO,
+ CallbackAction.LIGHTBRINGER,
+ CallbackAction.VOICE
+ })
+ public @interface CallbackAction {
+ int NONE = 0;
+ int IMS_VIDEO = 1;
+ int LIGHTBRINGER = 2;
+ int VOICE = 3;
+ }
+
+ /**
+ * Returns the {@link CallbackAction} that can be associated with a call.
+ *
+ * @param number The phone number in column {@link android.provider.CallLog.Calls#NUMBER}.
+ * @param features Value of features in column {@link android.provider.CallLog.Calls#FEATURES}.
+ * @param phoneAccountComponentName Account name in column {@link
+ * android.provider.CallLog.Calls#PHONE_ACCOUNT_COMPONENT_NAME}.
+ * @param context The context in which the method is called.
+ * @return One of the values in {@link CallbackAction}
+ */
+ public static @CallbackAction int getCallbackAction(
+ String number, int features, String phoneAccountComponentName, Context context) {
+ return getCallbackAction(
+ number, features, isLightbringerCall(phoneAccountComponentName, context));
+ }
+
+ /**
+ * Returns the {@link CallbackAction} that can be associated with a call.
+ *
+ * @param number The phone number in column {@link android.provider.CallLog.Calls#NUMBER}.
+ * @param features Value of features in column {@link android.provider.CallLog.Calls#FEATURES}.
+ * @param isLightbringerCall Whether the call is a Lightbringer call.
+ * @return One of the values in {@link CallbackAction}
+ */
+ public static @CallbackAction int getCallbackAction(
+ String number, int features, boolean isLightbringerCall) {
+ if (TextUtils.isEmpty(number)) {
+ return CallbackAction.NONE;
+ }
+ if (isLightbringerCall) {
+ return CallbackAction.LIGHTBRINGER;
+ }
+
+ boolean isVideoCall = (features & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO;
+ if (isVideoCall) {
+ return CallbackAction.IMS_VIDEO;
+ }
+
+ return CallbackAction.VOICE;
+ }
+
+ private static boolean isLightbringerCall(String phoneAccountComponentName, Context context) {
+ Lightbringer lightBringer = LightbringerComponent.get(context).getLightbringer();
+ return lightBringer.getPhoneAccountComponentName() != null
+ && lightBringer
+ .getPhoneAccountComponentName()
+ .flattenToString()
+ .equals(phoneAccountComponentName);
+ }
+}