blob: 837f974e628562ce8ff9fd211a711c089360060f [file] [log] [blame]
/*
* 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.telephony.qns;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.Annotation;
import android.telephony.TelephonyManager;
import android.telephony.ims.ImsMmTelManager;
/** This class is a collection of constants */
class QnsConstants {
static final String QNS_TAG = "QNS";
static final int INVALID_VALUE = -1;
static final int INVALID_ID = -1;
static final int KEY_DEFAULT_VALUE = 0;
static final int KEY_DEFAULT_HYST_TIMER = 30000;
static final int CONFIG_DEFAULT_MIN_HANDOVER_GUARDING_TIMER = 3000;
static final int CONFIG_DEFAULT_MIN_HANDOVER_GUARDING_TIMER_LIMIT = 5000;
static final int KEY_DEFAULT_PACKET_LOSS_TIME_MILLIS = 5000;
static final int KEY_DEFAULT_IWLAN_AVOID_TIME_LOW_RTP_QUALITY_MILLIS = 60000;
static final int KEY_DEFAULT_WWAN_AVOID_TIME_LOW_RTP_QUALITY_MILLIS = 60000;
static final int KEY_DEFAULT_THRESHOLD_SSRSRP_GOOD = -110;
static final int KEY_DEFAULT_THRESHOLD_SSRSRP_BAD = -115;
static final int KEY_DEFAULT_THRESHOLD_RSRP_GOOD = -115;
static final int KEY_DEFAULT_THRESHOLD_RSRP_BAD = -120;
static final int KEY_DEFAULT_THRESHOLD_RSCP_GOOD = -105;
static final int KEY_DEFAULT_THRESHOLD_RSCP_BAD = -115;
static final int KEY_DEFAULT_THRESHOLD_GERAN_RSSI_GOOD = -100;
static final int KEY_DEFAULT_THRESHOLD_GERAN_RSSI_BAD = -105;
static final int KEY_DEFAULT_THRESHOLD_WIFI_RSSI_GOOD = -75;
static final int KEY_DEFAULT_THRESHOLD_WIFI_RSSI_BAD = -80;
static final int CALL_TYPE_IDLE = 0;
static final int CALL_TYPE_VOICE = 1;
static final int CALL_TYPE_VIDEO = 2;
static final int CALL_TYPE_EMERGENCY = 3;
@IntDef(
value = {
CALL_TYPE_IDLE,
CALL_TYPE_VOICE,
CALL_TYPE_VIDEO,
CALL_TYPE_EMERGENCY,
})
@interface QnsCallType {}
static final int COVERAGE_HOME = 0;
static final int COVERAGE_ROAM = 1;
static final int COVERAGE_BOTH = 2;
@IntDef(value = {COVERAGE_HOME, COVERAGE_ROAM, COVERAGE_BOTH})
@interface CellularCoverage {}
// These(RTP_LOW_QUALITY_) constants are used to @code worseThanBefore(),
// be caution before change.
static final int RTP_LOW_QUALITY_REASON_JITTER = 1;
static final int RTP_LOW_QUALITY_REASON_PACKET_LOSS = 2;
static final int RTP_LOW_QUALITY_REASON_NO_RTP = 3;
@IntDef(
value = {
RTP_LOW_QUALITY_REASON_JITTER,
RTP_LOW_QUALITY_REASON_PACKET_LOSS,
RTP_LOW_QUALITY_REASON_NO_RTP,
})
@interface RtpLowQualityReason {}
static final int FALLBACK_REASON_INVALID = -1;
static final int FALLBACK_REASON_RTP_ONLY = 0;
static final int FALLBACK_REASON_WIFI_ONLY = 1;
static final int FALLBACK_REASON_RTP_OR_WIFI = 2;
@IntDef(
value = {
FALLBACK_REASON_INVALID,
FALLBACK_REASON_RTP_ONLY,
FALLBACK_REASON_WIFI_ONLY,
FALLBACK_REASON_RTP_OR_WIFI,
})
@interface QnsFallbackReason {}
static final int MAX_COUNT_INVALID = -1;
static final int MIN_THRESHOLD_GAP = 3;
static final int WIFI_ONLY = ImsMmTelManager.WIFI_MODE_WIFI_ONLY;
static final int WIFI_PREF = ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED;
static final int CELL_PREF = ImsMmTelManager.WIFI_MODE_CELLULAR_PREFERRED;
@IntDef(
value = {
WIFI_ONLY, WIFI_PREF, CELL_PREF,
})
@interface WfcModePreference {}
static final int ROVE_OUT = 0;
static final int ROVE_IN = 1;
@IntDef(
value = {
ROVE_OUT, ROVE_IN,
})
@interface RoveDirection {}
static final int POLICY_GOOD = 0;
static final int POLICY_BAD = 1;
static final int POLICY_TOLERABLE = 2;
@IntDef(
value = {
POLICY_GOOD,
POLICY_BAD,
POLICY_TOLERABLE,
})
@interface QnsQualityType {}
static final int GUARDING_NONE = 0;
static final int GUARDING_CELLULAR = 1;
static final int GUARDING_WIFI = 2;
@IntDef(
value = {
GUARDING_NONE,
GUARDING_WIFI,
GUARDING_CELLULAR,
})
@interface QnsGuarding {}
static final int IMS_REGISTRATION_CHANGED_UNREGISTERED = 0;
static final int IMS_REGISTRATION_CHANGED_ACCESS_NETWORK_CHANGE_FAILED = 1;
static final int IMS_REGISTRATION_CHANGED_REGISTERED = 2;
@IntDef(
value = {
IMS_REGISTRATION_CHANGED_UNREGISTERED,
IMS_REGISTRATION_CHANGED_ACCESS_NETWORK_CHANGE_FAILED,
IMS_REGISTRATION_CHANGED_REGISTERED,
})
@interface QnsImsRegiEvent {}
static final int SIP_DIALOG_SESSION_POLICY_NONE = 0;
static final int SIP_DIALOG_SESSION_POLICY_FOLLOW_VOICE_CALL = 1;
static final int SIP_DIALOG_SESSION_POLICY_FOLLOW_VIDEO_CALL = 2;
@IntDef(
value = {
SIP_DIALOG_SESSION_POLICY_NONE,
SIP_DIALOG_SESSION_POLICY_FOLLOW_VOICE_CALL,
SIP_DIALOG_SESSION_POLICY_FOLLOW_VIDEO_CALL,
})
@interface QnsSipDialogSessionPolicy {}
static final int THRESHOLD_MATCH_TYPE_EQUAL_TO = 0;
static final int THRESHOLD_EQUAL_OR_LARGER = 1;
static final int THRESHOLD_EQUAL_OR_SMALLER = 2;
static final int SIGNAL_MEASUREMENT_AVAILABILITY = 1 << 7;
static final int SIGNAL_UNAVAILABLE = 0;
static final int SIGNAL_AVAILABLE = 1;
static final int DEFAULT_WIFI_BACKHAUL_TIMER = 3000;
static final int TRANSPORT_TYPE_ALLOWED_WWAN = 0;
static final int TRANSPORT_TYPE_ALLOWED_IWLAN = 1;
static final int TRANSPORT_TYPE_ALLOWED_BOTH = 2;
/** Type of Rat Preference. Default value , Follow the system preference. */
static final int RAT_PREFERENCE_DEFAULT = 0;
/** Type of Rat Preference. choose Wi-Fi always */
static final int RAT_PREFERENCE_WIFI_ONLY = 1;
/**
* Type of Rat Preference. choose Wi-Fi when the Wi-Fi Calling is available.(when IMS is
* registered through the Wi-Fi)
*/
static final int RAT_PREFERENCE_WIFI_WHEN_WFC_AVAILABLE = 2;
/** Type of Rat Preference. choose Wi-Fi when no cellular */
static final int RAT_PREFERENCE_WIFI_WHEN_NO_CELLULAR = 3;
/** Type of Rat Preference. choose Wi-Fi when cellular is available at home network. */
static final int RAT_PREFERENCE_WIFI_WHEN_HOME_IS_NOT_AVAILABLE = 4;
@IntDef(
value = {
RAT_PREFERENCE_DEFAULT,
RAT_PREFERENCE_WIFI_ONLY,
RAT_PREFERENCE_WIFI_WHEN_WFC_AVAILABLE,
RAT_PREFERENCE_WIFI_WHEN_NO_CELLULAR,
RAT_PREFERENCE_WIFI_WHEN_HOME_IS_NOT_AVAILABLE,
})
@interface RatPreference {}
static String callTypeToString(@QnsConstants.QnsCallType int callType) {
switch (callType) {
case CALL_TYPE_IDLE:
return "IDLE";
case CALL_TYPE_VOICE:
return "VOICE";
case CALL_TYPE_VIDEO:
return "VIDEO";
case CALL_TYPE_EMERGENCY:
return "SOS";
}
return "";
}
static String coverageToString(@QnsConstants.CellularCoverage int coverage) {
switch (coverage) {
case COVERAGE_HOME:
return "HOME";
case COVERAGE_ROAM:
return "ROAM";
}
return "";
}
static String preferenceToString(@QnsConstants.WfcModePreference int preference) {
switch (preference) {
case WIFI_ONLY:
return "WIFI_ONLY";
case WIFI_PREF:
return "WIFI_PREF";
case CELL_PREF:
return "CELL_PREF";
}
return "";
}
static String directionToString(@QnsConstants.RoveDirection int direction) {
if (direction == ROVE_IN) {
return "ROVE_IN";
}
return "ROVE_OUT";
}
static String guardingToString(@QnsConstants.QnsGuarding int guarding) {
switch (guarding) {
case GUARDING_NONE:
return "GUARDING_NONE";
case GUARDING_CELLULAR:
return "GUARDING_CELL";
case GUARDING_WIFI:
return "GUARDING_WIFI";
}
return "";
}
/**
* This method coverts call state value from int to string
*
* @param state int value of call state.
* @return returns the string value for the given int call state in parameter.
*/
static String callStateToString(@Annotation.CallState int state) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
return "CALL_STATE_IDLE";
case TelephonyManager.CALL_STATE_RINGING:
return "CALL_STATE_RINGING";
case TelephonyManager.CALL_STATE_OFFHOOK:
return "CALL_STATE_OFFHOOK";
default:
return "CALL_STATE_UNKNOWN_" + state;
}
}
static String imsRegistrationEventToString(@QnsConstants.QnsImsRegiEvent int event) {
switch (event) {
case IMS_REGISTRATION_CHANGED_UNREGISTERED:
return "IMS_REGISTRATION_CHANGED_UNREGISTERED";
case IMS_REGISTRATION_CHANGED_ACCESS_NETWORK_CHANGE_FAILED:
return "IMS_REGISTRATION_CHANGED_ACCESS_NETWORK_CHANGE_FAILED";
case IMS_REGISTRATION_CHANGED_REGISTERED:
return "IMS_REGISTRATION_CHANGED_REGISTERED";
}
return "";
}
/**
* This method converts AccessNetworkType from int to string.
*
* @param type int value of AccessNetworkType
* @return String value of the access network type.
*/
static String accessNetworkTypeToString(int type) {
switch (type) {
case AccessNetworkType.UNKNOWN:
return "UNKNOWN";
case AccessNetworkType.GERAN:
return "GERAN";
case AccessNetworkType.UTRAN:
return "UTRAN";
case AccessNetworkType.EUTRAN:
return "EUTRAN";
case AccessNetworkType.CDMA2000:
return "CDMA2000";
case AccessNetworkType.IWLAN:
return "IWLAN";
case AccessNetworkType.NGRAN:
return "NGRAN";
default:
return Integer.toString(type);
}
}
/**
* This method coverts AccessNetworkType from string to int.
*
* @param str String value of AccessNetworkType
* @return Integer value of AccessNetworkType.
*/
static int accessNetworkTypeFromString(@NonNull String str) {
switch (str.toUpperCase()) {
case "GERAN":
return AccessNetworkType.GERAN;
case "UTRAN":
return AccessNetworkType.UTRAN;
case "EUTRAN":
return AccessNetworkType.EUTRAN;
case "CDMA2000":
return AccessNetworkType.CDMA2000;
case "IWLAN":
return AccessNetworkType.IWLAN;
case "NGRAN":
return AccessNetworkType.NGRAN;
default:
return AccessNetworkType.UNKNOWN;
}
}
/**
* This method coverts TransportType from int to string.
*
* @param transportType Integer value of TransportType
* @return String value of TransportType.
*/
static String transportTypeToString(int transportType) {
switch (transportType) {
case AccessNetworkConstants.TRANSPORT_TYPE_WWAN:
return "WWAN";
case AccessNetworkConstants.TRANSPORT_TYPE_WLAN:
return "WLAN";
case AccessNetworkConstants.TRANSPORT_TYPE_INVALID:
return "INVALID";
default:
return Integer.toString(transportType);
}
}
/**
* Convert data state to string
*
* @return The data state in string format.
*/
static String dataStateToString(@Annotation.DataState int state) {
switch (state) {
case TelephonyManager.DATA_DISCONNECTED:
return "DISCONNECTED";
case TelephonyManager.DATA_CONNECTING:
return "CONNECTING";
case TelephonyManager.DATA_CONNECTED:
return "CONNECTED";
case TelephonyManager.DATA_SUSPENDED:
return "SUSPENDED";
case TelephonyManager.DATA_DISCONNECTING:
return "DISCONNECTING";
case TelephonyManager.DATA_HANDOVER_IN_PROGRESS:
return "HANDOVERINPROGRESS";
case TelephonyManager.DATA_UNKNOWN:
return "UNKNOWN";
}
// This is the error case. The well-defined value for UNKNOWN is -1.
return "UNKNOWN(" + state + ")";
}
/**
* This method converts Network Type to AccessNetworkType.
*
* @param networkType integer value of network type
* @return integer value of AccessNetworkType.
*/
static int networkTypeToAccessNetworkType(int networkType) {
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_GSM:
return AccessNetworkType.GERAN;
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPAP:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
return AccessNetworkType.UTRAN;
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
return AccessNetworkType.CDMA2000;
case TelephonyManager.NETWORK_TYPE_LTE:
case TelephonyManager.NETWORK_TYPE_LTE_CA:
return AccessNetworkType.EUTRAN;
case TelephonyManager.NETWORK_TYPE_NR:
return AccessNetworkType.NGRAN;
case TelephonyManager.NETWORK_TYPE_IWLAN:
return AccessNetworkType.IWLAN;
default:
return AccessNetworkType.UNKNOWN;
}
}
/**
* This method converts QnsSipDialogSessionPolicy to string.
*
* @param policy int value of QnsSipDialogSessionPolicy.
* @return String value of QnsSipDialogSessionPolicy.
*/
static String qnsSipDialogSessionPolicyToString(
@QnsConstants.QnsSipDialogSessionPolicy int policy) {
switch (policy) {
case SIP_DIALOG_SESSION_POLICY_NONE:
return "POLICY_NONE";
case SIP_DIALOG_SESSION_POLICY_FOLLOW_VOICE_CALL:
return "POLICY_VOICE";
case SIP_DIALOG_SESSION_POLICY_FOLLOW_VIDEO_CALL:
return "POLICY_VIDEO";
default:
return "NONE";
}
}
}