Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 817e5398 authored by Youming Ye's avatar Youming Ye
Browse files

Log IMS_MERGED call based on if the conference supports participants

Bug: 132312382
Test: manual
Change-Id: I2dde2571f80aed2799f62d81d519fd0c6f30924d
Merged-In: I2dde2571f80aed2799f62d81d519fd0c6f30924d
parent 219bb92a
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.telecom;

import static android.telephony.CarrierConfigManager.KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL;

import android.annotation.Nullable;
import android.content.Context;
import android.content.Intent;
@@ -35,10 +37,12 @@ import android.telecom.PhoneAccountHandle;
import android.telecom.VideoProfile;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneNumberUtils;
import android.telephony.SubscriptionManager;

// TODO: Needed for move to system service: import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.CallerInfo;
import com.android.internal.telephony.SubscriptionController;
import com.android.server.telecom.callfiltering.CallFilteringResult;

import java.util.Arrays;
@@ -129,6 +133,7 @@ public final class CallLogManager extends CallsManagerListenerBase {
    private static final String TAG = CallLogManager.class.getSimpleName();

    private final Context mContext;
    private final CarrierConfigManager mCarrierConfigManager;
    private final PhoneAccountRegistrar mPhoneAccountRegistrar;
    private final MissedCallNotifier mMissedCallNotifier;
    private static final String ACTION_CALLS_TABLE_ADD_ENTRY =
@@ -144,6 +149,8 @@ public final class CallLogManager extends CallsManagerListenerBase {
    public CallLogManager(Context context, PhoneAccountRegistrar phoneAccountRegistrar,
            MissedCallNotifier missedCallNotifier) {
        mContext = context;
        mCarrierConfigManager = (CarrierConfigManager) mContext
                .getSystemService(Context.CARRIER_CONFIG_SERVICE);
        mPhoneAccountRegistrar = phoneAccountRegistrar;
        mMissedCallNotifier = missedCallNotifier;
        mLock = new Object();
@@ -193,7 +200,7 @@ public final class CallLogManager extends CallsManagerListenerBase {
     * should be logged in its PhoneAccount
     */
    @VisibleForTesting
    public boolean shouldLogDisconnectedCall(Call call, int oldState, boolean isCallCanceled) {
    public boolean shouldLogDisconnectedCall(Call call, int oldState, boolean isCallCancelled) {
        // "Choose account" phase when disconnected
        if (oldState == CallState.SELECT_PHONE_ACCOUNT) {
            return false;
@@ -211,7 +218,7 @@ public final class CallLogManager extends CallsManagerListenerBase {
        }

        DisconnectCause cause = call.getDisconnectCause();
        if (isCallCanceled) {
        if (isCallCancelled) {
            // No log when disconnecting to simulate a single party conference.
            if (cause != null
                    && DisconnectCause.REASON_EMULATING_SINGLE_CALL.equals(cause.getReason())) {
@@ -228,13 +235,27 @@ public final class CallLogManager extends CallsManagerListenerBase {
            return false;
        }

        // Call merged into conferences.
        // Call merged into conferences and marked with IMS_MERGED_SUCCESSFULLY.
        if (cause != null && android.telephony.DisconnectCause.toString(
                android.telephony.DisconnectCause.IMS_MERGED_SUCCESSFULLY)
                .equals(cause.getReason())) {
            int subscriptionId = mPhoneAccountRegistrar
                    .getSubscriptionIdForPhoneAccount(call.getTargetPhoneAccount());
            // By default, the conference should return a list of participants.
            if (subscriptionId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
                return false;
            }

            PersistableBundle b = mCarrierConfigManager.getConfigForSubId(subscriptionId);
            if (b == null) {
                return false;
            }

            if (b.getBoolean(KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL, true)) {
                return false;
            }
        }

        boolean shouldCallSelfManagedLogged = call.isLoggedSelfManaged()
                && (call.getHandoverState() == HandoverState.HANDOVER_NONE
                || call.getHandoverState() == HandoverState.HANDOVER_COMPLETE);