All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.android.ims.rcs.uce.UceStatsWriter Maven / Gradle / Ivy

Go to download

A library jar that provides APIs for Applications written for the Google Android Platform.

There is a newer version: 15-robolectric-12650502
Show newest version
/*
 * Copyright (C) 2021 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.ims.rcs.uce;

import android.annotation.IntDef;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.RcsCapabilityExchangeImplBase;
import android.telephony.ims.RcsContactPresenceTuple;
import android.telephony.ims.RcsContactUceCapability;
import com.android.internal.annotations.VisibleForTesting;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

/**
 * The UceStatsWriter should be a singleton class for storing atoms in RcsStats.
 * ims-common provides an interface for setting atoms to telephony-common.
 **/
public class UceStatsWriter {
    private static UceStatsWriter sInstance = null;
    private UceStatsCallback mCallBack;

    /**
     * @hide
     */
    // Defines which UCE event occurred.
    @IntDef(value = {
        PUBLISH_EVENT,
        SUBSCRIBE_EVENT,
        INCOMING_OPTION_EVENT,
        OUTGOING_OPTION_EVENT
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface UceEventType {}
    /**
     * UCE events related to Publish Method.
     */
    public static final int PUBLISH_EVENT = 0;
    /**
     * UCE events related to Subscribe Method.
     */
    public static final int SUBSCRIBE_EVENT = 1;
    /**
     * UCE events related to incoming Options Method.
     */
    public static final int INCOMING_OPTION_EVENT = 2;
    /**
     * UCE events related to outgoing Options Method.
     */
    public static final int OUTGOING_OPTION_EVENT = 3;

    /**
     * The callback interface is called by the Metrics data creator to receive information from
     * others controllers.
     */
    public interface UceStatsCallback {
        /**
         * Notify the callback listener that the feature tag associated with
         * IMS registration of this device have changed.
         */
        public void onImsRegistrationFeatureTagStats(int subId, List featureTagList,
            int registrationTech);

        /**
         * Notify that the active IMS registration to the carrier network has been terminated.
         */
        public void onStoreCompleteImsRegistrationFeatureTagStats(int subId);

        /**
         * Notify the callback listener that the PIDF ServiceDescriptions associated with
         * the UCE presence of this device have changed.
         */
        void onImsRegistrationServiceDescStats(int subId, List serviceIdList,
            List serviceIdVersionList, int registrationTech);

        /**
         * Notify the callback listener that a subscribe response received.
         */
        void onSubscribeResponse(int subId, long taskId, int networkResponse);

        /**
         * Notify the callback listener that a UCE Network Event has occurred.
         */
        void onUceEvent(int subId, int type, boolean successful, int commandCode,
            int networkResponse);

        /**
         * Notify the callback listener that a subscribe has ended.
         */
        void onSubscribeTerminated(int subId, long taskId, String reason);

        /**
         * Notify that the Presence Notify Event has changed.
         */
        void onPresenceNotifyEvent(int subId, long taskId,
            List updatedCapList);

        /**
         * Notify that the active UCE PUBLISH to the carrier network has been terminated.
         */
        void onStoreCompleteImsRegistrationServiceDescStats(int subId);
    }

    /**
     * create an instance of UceStatsWriter
     */
    public static UceStatsWriter init(UceStatsCallback callback) {
        synchronized (UceStatsWriter.class) {
            if (sInstance == null) {
                sInstance = new UceStatsWriter(callback);
            }
            return sInstance;
        }
    }

    /**
     * get the current instance of UceStatsWriter
     */
    public static UceStatsWriter getInstance() {
        synchronized (UceStatsWriter.class) {
            return sInstance;
        }
    }

    /**
     * Stats about each Feature tag that was included in IMS registration received from
     * the network during register.
     * @param subId The subId associated with the event.
     * @param featureTagList Ims Feature tag list.
     * @param registrationTech The registration tech associated with the feature tag.
     */
    public void setImsRegistrationFeatureTagStats(int subId, List featureTagList,
        @ImsRegistrationImplBase.ImsRegistrationTech int registrationTech) {
        if (mCallBack == null) {
            return;
        }
        mCallBack.onImsRegistrationFeatureTagStats(subId, featureTagList, registrationTech);
    }

    /**
     * Update time of stats for each stored feature tag.
     * @param subId The subId associated with the event.
     */
    public void setStoreCompleteImsRegistrationFeatureTagStats(int subId) {
        if (mCallBack == null) {
            return;
        }
        mCallBack.onStoreCompleteImsRegistrationFeatureTagStats(subId);
    }

    /**
     * Stats about each ServiceDescription that was included in the PIDF XML sent to
     * the network during publish
     * @param subId The subId associated with the event.
     * @param tupleList Tuple information set in PIDF.
     * @param registrationTech The registration tech associated with the feature tag.
     */
    public void setImsRegistrationServiceDescStats(int subId,
        List tupleList,
        @ImsRegistrationImplBase.ImsRegistrationTech int registrationTech) {
        if (mCallBack == null) {
            return;
        }
        ArrayList svcId = new ArrayList<>();
        ArrayList svcVersion = new ArrayList<>();

        for (RcsContactPresenceTuple tuple : tupleList) {
            svcId.add(tuple.getServiceId());
            svcVersion.add(tuple.getServiceVersion());
        }
        mCallBack.onImsRegistrationServiceDescStats(subId, svcId, svcVersion, registrationTech);
    }

    /**
     * Stats related to UCE queries to the network
     * @param subId The subId associated with the event.
     * @param taskId The taskId associate with the event.
     * @param networkResponse The network response code for the Uce event
     */
    public void setSubscribeResponse(int subId, long taskId, int networkResponse) {
        if (mCallBack != null) {
            mCallBack.onSubscribeResponse(subId, taskId, networkResponse);
        }
    }

    /**
     * Stats related to UCE queries to the network
     * @param subId The subId associated with the event.
     * @param type Used to identify the message type.
     * @param successful Whether the UCE event is successfully finished.
     * @param commandCode The command error code for the Uce event
     * @param networkResponse The network response code for the Uce event
     */
    public void setUceEvent(int subId, @UceEventType int type, boolean successful,
        @RcsCapabilityExchangeImplBase.CommandCode int commandCode, int networkResponse) {
        if (mCallBack != null) {
            mCallBack.onUceEvent(subId, type, successful, commandCode, networkResponse);
        }
    }

    /**
     * The result of processing received notify messages.
     * @param subId The subId associated with the event.
     * @param taskId The taskId associate with the event.
     * @param updatedCapList Capability information of the user contained in Presence Notify.
     */
    public void setPresenceNotifyEvent(int subId, long taskId,
        List updatedCapList) {
        if (mCallBack == null || updatedCapList == null || updatedCapList.isEmpty()) {
            return;
        }
        mCallBack.onPresenceNotifyEvent(subId, taskId, updatedCapList);
    }

    /**
     * Indicates that the subscription request has become a terminated state.
     * @param subId The subId associated with the event.
     * @param taskId The taskId associate with the event.
     * @param reason The terminated reason associated with the subscription state.
     */
    public void setSubscribeTerminated(int subId, long taskId, String reason) {
        if (mCallBack != null) {
            mCallBack.onSubscribeTerminated(subId, taskId, reason);
        }
    }

    /**
     * indicates that the device has removed an existing PUBLISH from the carrier's network
     * containing the device's RCS capabilities state.
     * The registered time of publication must be set in ImsRegistrationServiceDescStats,
     * which is the life time of publication, so it can be set only when publication is over.
     * @param subId The subId associated with the event.
     */
    public void setUnPublish(int subId) {
        if (mCallBack != null) {
            mCallBack.onStoreCompleteImsRegistrationServiceDescStats(subId);
        }
    }

    @VisibleForTesting
    protected UceStatsWriter(UceStatsCallback callback) {
        mCallBack = callback;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy