blob: f5c4b1f5dbe92bc44106ee5f6cf80f8332556aaf [file] [log] [blame]
/*
* Copyright (c) 2016 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.internal.uce.common;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Bundle;
import java.util.Map;
import java.util.HashMap;
/** Class for capability discovery information.
* @hide */
public class CapInfo implements Parcelable {
/** IM session support. */
private boolean mImSupported = false;
/** File transfer support. */
private boolean mFtSupported = false;
/** File transfer Thumbnail support. */
private boolean mFtThumbSupported = false;
/** File transfer Store and forward support. */
private boolean mFtSnFSupported = false;
/** File transfer HTTP support. */
private boolean mFtHttpSupported = false;
/** Image sharing support. */
private boolean mIsSupported = false;
/** Video sharing during a CS call support -- IR-74. */
private boolean mVsDuringCSSupported = false;
/** Video sharing outside of voice call support -- IR-84. */
private boolean mVsSupported = false;
/** Social presence support. */
private boolean mSpSupported = false;
/** Presence discovery support. */
private boolean mCdViaPresenceSupported = false;
/** IP voice call support (IR-92/IR-58). */
private boolean mIpVoiceSupported = false;
/** IP video call support (IR-92/IR-58). */
private boolean mIpVideoSupported = false;
/** IP Geo location Pull using File Transfer support. */
private boolean mGeoPullFtSupported = false;
/** IP Geo location Pull support. */
private boolean mGeoPullSupported = false;
/** IP Geo location Push support. */
private boolean mGeoPushSupported = false;
/** Standalone messaging support. */
private boolean mSmSupported = false;
/** Full Store and Forward Group Chat information. */
private boolean mFullSnFGroupChatSupported = false;
/** RCS IP Voice call support . */
private boolean mRcsIpVoiceCallSupported = false;
/** RCS IP Video call support . */
private boolean mRcsIpVideoCallSupported = false;
/** RCS IP Video call support . */
private boolean mRcsIpVideoOnlyCallSupported = false;
/** IP Geo location Push using SMS. */
private boolean mGeoSmsSupported = false;
/** RCS call composer support. */
private boolean mCallComposerSupported = false;
/** RCS post-call support. */
private boolean mPostCallSupported = false;
/** Shared map support. */
private boolean mSharedMapSupported = false;
/** Shared Sketch supported. */
private boolean mSharedSketchSupported = false;
/** Chatbot communication support. */
private boolean mChatbotSupported = false;
/** Chatbot role support. */
private boolean mChatbotRoleSupported = false;
/** Standalone Chatbot communication support. */
private boolean mSmChatbotSupported = false;
/** MMtel based call composer support. */
private boolean mMmtelCallComposerSupported = false;
/** List of supported extensions. */
private String[] mExts = new String[10];
/** Time used to compute when to query again. */
private long mCapTimestamp = 0;
private Map<String, String> mCapInfoMap = new HashMap<String, String>();
/** IM session feature tag key. */
public static final String INSTANT_MSG =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.im\"";
/** File transfer feature tag key. */
public static final String FILE_TRANSFER =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.ft\"";
/** File transfer Thumbnail feature tag key. */
public static final String FILE_TRANSFER_THUMBNAIL =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.ftthumb\"";
/** File transfer Store and forward feature tag key. */
public static final String FILE_TRANSFER_SNF =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.ftstandfw\"";
/** File transfer HTTP feature tag key. */
public static final String FILE_TRANSFER_HTTP =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.fthttp\"";
/** Image sharing feature tag key. */
public static final String IMAGE_SHARE =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.gsma-is\"";
/** Video sharing during a CS call feature tag key-- IR-74. */
public static final String VIDEO_SHARE_DURING_CS = "+g.3gpp.cs-voice";
/** Video sharing outside of voice call feature tag key-- IR-84. */
public static final String VIDEO_SHARE =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.gsma-vs\"";
/** Social presence feature tag key. */
public static final String SOCIAL_PRESENCE =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.sp\"";
/** Presence discovery feature tag key. */
public static final String CAPDISC_VIA_PRESENCE =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.dp\"";
/** IP voice call feature tag key (IR-92/IR-58). */
public static final String IP_VOICE =
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel\"";
/** IP video call feature tag key (IR-92/IR-58). */
public static final String IP_VIDEO =
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel\";video";
/** IP Geo location Pull using File Transfer feature tag key. */
public static final String GEOPULL_FT =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.geopullft\"";
/** IP Geo location Pull feature tag key. */
public static final String GEOPULL =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.geopull\"";
/** IP Geo location Push feature tag key. */
public static final String GEOPUSH =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.geopush\"";
/** Standalone messaging feature tag key. */
public static final String STANDALONE_MSG =
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg;" +
"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.largemsg\"";
/** Full Store and Forward Group Chat information feature tag key. */
public static final String FULL_SNF_GROUPCHAT =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.fullsfgroupchat\"";
/** RCS IP Voice call feature tag key. */
public static final String RCS_IP_VOICE_CALL =
"+g.gsma.rcs.ipcall";
/** RCS IP Video call feature tag key. */
public static final String RCS_IP_VIDEO_CALL =
"+g.gsma.rcs.ipvideocall";
/** RCS IP Video only call feature tag key. */
public static final String RCS_IP_VIDEO_ONLY_CALL =
"+g.gsma.rcs.ipvideoonlycall";
/** IP Geo location Push using SMS feature tag key. */
public static final String GEOSMS =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gppapplication.ims.iari.rcs.geosms\"";
/** RCS call composer feature tag key. */
public static final String CALLCOMPOSER =
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gppservice.ims.icsi.gsma.callcomposer\"";
/** RCS post-call feature tag key. */
public static final String POSTCALL =
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gppservice.ims.icsi.gsma.callunanswered\"";
/** Shared map feature tag key. */
public static final String SHAREDMAP =
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gppservice.ims.icsi.gsma.sharedmap\"";
/** Shared Sketch feature tag key. */
public static final String SHAREDSKETCH =
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gppservice.ims.icsi.gsma.sharedsketch\"";
/** Chatbot communication feature tag key. */
public static final String CHATBOT =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gppapplication.ims.iari.rcs.chatbot\"";
/** Chatbot role feature tag key. */
public static final String CHATBOTROLE = "+g.gsma.rcs.isbot";
/** Standalone Chatbot communication feature tag key. */
public static final String STANDALONE_CHATBOT =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot.sa\"";
/** MMtel based call composer feature tag key. */
public static final String MMTEL_CALLCOMPOSER = "+g.gsma.callcomposer";
/**
* Constructor for the CapInfo class.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public CapInfo() {
};
/**
* Checks whether IM is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isImSupported() {
return mImSupported;
}
/**
* Sets IM as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setImSupported(boolean imSupported) {
this.mImSupported = imSupported;
}
/**
* Checks whether FT Thumbnail is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isFtThumbSupported() {
return mFtThumbSupported;
}
/**
* Sets FT thumbnail as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setFtThumbSupported(boolean ftThumbSupported) {
this.mFtThumbSupported = ftThumbSupported;
}
/**
* Checks whether FT Store and Forward is supported
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isFtSnFSupported() {
return mFtSnFSupported;
}
/**
* Sets FT Store and Forward as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setFtSnFSupported(boolean ftSnFSupported) {
this.mFtSnFSupported = ftSnFSupported;
}
/**
* Checks whether File transfer HTTP is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isFtHttpSupported() {
return mFtHttpSupported;
}
/**
* Sets File transfer HTTP as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setFtHttpSupported(boolean ftHttpSupported) {
this.mFtHttpSupported = ftHttpSupported;
}
/**
* Checks whether FT is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isFtSupported() {
return mFtSupported;
}
/**
* Sets FT as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setFtSupported(boolean ftSupported) {
this.mFtSupported = ftSupported;
}
/**
* Checks whether IS is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isIsSupported() {
return mIsSupported;
}
/**
* Sets IS as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setIsSupported(boolean isSupported) {
this.mIsSupported = isSupported;
}
/**
* Checks whether video sharing is supported during a CS call.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isVsDuringCSSupported() {
return mVsDuringCSSupported;
}
/**
* Sets video sharing as supported or not supported during a CS
* call.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setVsDuringCSSupported(boolean vsDuringCSSupported) {
this.mVsDuringCSSupported = vsDuringCSSupported;
}
/**
* Checks whether video sharing outside a voice call is
* supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isVsSupported() {
return mVsSupported;
}
/**
* Sets video sharing as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setVsSupported(boolean vsSupported) {
this.mVsSupported = vsSupported;
}
/**
* Checks whether social presence is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isSpSupported() {
return mSpSupported;
}
/**
* Sets social presence as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setSpSupported(boolean spSupported) {
this.mSpSupported = spSupported;
}
/**
* Checks whether capability discovery via presence is
* supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isCdViaPresenceSupported() {
return mCdViaPresenceSupported;
}
/**
* Sets capability discovery via presence as supported or not
* supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setCdViaPresenceSupported(boolean cdViaPresenceSupported) {
this.mCdViaPresenceSupported = cdViaPresenceSupported;
}
/**
* Checks whether IP voice call is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isIpVoiceSupported() {
return mIpVoiceSupported;
}
/**
* Sets IP voice call as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setIpVoiceSupported(boolean ipVoiceSupported) {
this.mIpVoiceSupported = ipVoiceSupported;
}
/**
* Checks whether IP video call is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isIpVideoSupported() {
return mIpVideoSupported;
}
/**
* Sets IP video call as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setIpVideoSupported(boolean ipVideoSupported) {
this.mIpVideoSupported = ipVideoSupported;
}
/**
* Checks whether Geo location Pull using File Transfer is
* supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isGeoPullFtSupported() {
return mGeoPullFtSupported;
}
/**
* Sets Geo location Pull using File Transfer as supported or
* not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setGeoPullFtSupported(boolean geoPullFtSupported) {
this.mGeoPullFtSupported = geoPullFtSupported;
}
/**
* Checks whether Geo Pull is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isGeoPullSupported() {
return mGeoPullSupported;
}
/**
* Sets Geo Pull as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setGeoPullSupported(boolean geoPullSupported) {
this.mGeoPullSupported = geoPullSupported;
}
/**
* Checks whether Geo Push is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isGeoPushSupported() {
return mGeoPushSupported;
}
/**
* Sets Geo Push as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setGeoPushSupported(boolean geoPushSupported) {
this.mGeoPushSupported = geoPushSupported;
}
/**
* Checks whether short messaging is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isSmSupported() {
return mSmSupported;
}
/**
* Sets short messaging as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setSmSupported(boolean smSupported) {
this.mSmSupported = smSupported;
}
/**
* Checks whether store/forward and group chat are supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isFullSnFGroupChatSupported() {
return mFullSnFGroupChatSupported;
}
/**
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isRcsIpVoiceCallSupported() {
return mRcsIpVoiceCallSupported;
}
/**
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isRcsIpVideoCallSupported() {
return mRcsIpVideoCallSupported;
}
/**
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isRcsIpVideoOnlyCallSupported() {
return mRcsIpVideoOnlyCallSupported;
}
/**
* Sets store/forward and group chat supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setFullSnFGroupChatSupported(boolean fullSnFGroupChatSupported) {
this.mFullSnFGroupChatSupported = fullSnFGroupChatSupported;
}
/**
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setRcsIpVoiceCallSupported(boolean rcsIpVoiceCallSupported) {
this.mRcsIpVoiceCallSupported = rcsIpVoiceCallSupported;
}
/**
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setRcsIpVideoCallSupported(boolean rcsIpVideoCallSupported) {
this.mRcsIpVideoCallSupported = rcsIpVideoCallSupported;
}
/**
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setRcsIpVideoOnlyCallSupported(boolean rcsIpVideoOnlyCallSupported) {
this.mRcsIpVideoOnlyCallSupported = rcsIpVideoOnlyCallSupported;
}
/**
* Checks whether Geo Push via SMS is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isGeoSmsSupported() {
return mGeoSmsSupported;
}
/**
* Sets Geolocation Push via SMS as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setGeoSmsSupported(boolean geoSmsSupported) {
this.mGeoSmsSupported = geoSmsSupported;
}
/**
* Checks whether RCS call composer is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isCallComposerSupported() {
return mCallComposerSupported;
}
/**
* Sets call composer as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setCallComposerSupported(boolean callComposerSupported) {
this.mCallComposerSupported = callComposerSupported;
}
/**
* Checks whether post call is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isPostCallSupported(){
return mPostCallSupported;
}
/**
* Sets post call as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setPostCallSupported(boolean postCallSupported) {
this.mPostCallSupported = postCallSupported;
}
/**
* Checks whether shared map is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isSharedMapSupported() {
return mSharedMapSupported;
}
/**
* Sets shared map as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setSharedMapSupported(boolean sharedMapSupported) {
this.mSharedMapSupported = sharedMapSupported;
}
/**
* Checks whether shared sketch is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isSharedSketchSupported() {
return mSharedSketchSupported;
}
/**
* Sets shared sketch as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setSharedSketchSupported(boolean sharedSketchSupported) {
this.mSharedSketchSupported = sharedSketchSupported;
}
/**
* Checks whether chatbot communication is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isChatbotSupported() {
return mChatbotSupported;
}
/**
* Sets chatbot communication as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setChatbotSupported(boolean chatbotSupported) {
this.mChatbotSupported = chatbotSupported;
}
/**
* Checks whether chatbot role is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isChatbotRoleSupported() {
return mChatbotRoleSupported;
}
/**
* Sets chatbot role as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setChatbotRoleSupported(boolean chatbotRoleSupported) {
this.mChatbotRoleSupported = chatbotRoleSupported;
}
/**
* Checks whether standalone chatbot communication is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isSmChatbotSupported() {
return mSmChatbotSupported;
}
/**
* Sets standalone chatbot communication as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setSmChatbotSupported(boolean smChatbotSupported) {
this.mSmChatbotSupported = smChatbotSupported;
}
/**
* Checks whether Mmtel based call composer is supported.
* @deprecated Use {@link #isCapabilitySupported(String)} instead.
*/
public boolean isMmtelCallComposerSupported() {
return mMmtelCallComposerSupported;
}
/**
* Sets Mmtel based call composer as supported or not supported.
* @deprecated Use {@link #addCapability(String, String)} instead.
*/
public void setMmtelCallComposerSupported(boolean mmtelCallComposerSupported) {
this.mMmtelCallComposerSupported = mmtelCallComposerSupported;
}
/** Gets the list of supported extensions. */
public String[] getExts() {
return mExts;
}
/** Sets the list of supported extensions. */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setExts(String[] exts) {
this.mExts = exts;
}
/** Gets the time stamp for when to query again. */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public long getCapTimestamp() {
return mCapTimestamp;
}
/** Sets the time stamp for when to query again. */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setCapTimestamp(long capTimestamp) {
this.mCapTimestamp = capTimestamp;
}
/**
* Adds the feature tag string with supported versions to
* the mCapInfoMap.
* Map<String featureType, String versions>
* Versions format:
* "+g.gsma.rcs.botversion=\"#=1" -> Version 1 supported
* "+g.gsma.rcs.botversion=\"#=1,#=2\"" -> Versions 1 and 2 are supported
*
* Example #1: Add standard feature tag with one version support
* addCapability(CapInfo.STANDALONE_CHATBOT, "+g.gsma.rcs.botversion=\"#=1");
* The above example indicates standalone chatbot feature tag is supported
* in version 1.
*
* Example #2: Add standard feature tag with multiple version support
* addCapability(CapInfo.CHATBOT, "+g.gsma.rcs.botversion=\"#=1,#=2\"");
* The above example indicates session based chatbot feature tag is supported
* in versions 1 and 2.
*
* Example #3: Add standard feature tag with no version support
* addCapability(CapInfo.INSTANT_MSG, "");
* The above example indicates im feature tag does not have version support.
*
* Example #4: Add custom/extension feature tag with no version support
* addCapability("+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.custom_im\"",
* "");
* Call setNewFeatureTag(int presenceServiceHdl, String featureTag,
* in PresServiceInfo serviceInfo, int userData) API
* in IPresenceService.aidl before calling addCapability() API
*/
public void addCapability(String featureTagName, String versions) {
this.mCapInfoMap.put(featureTagName, versions);
}
/**
* Returns String of versions of the feature tag passed.
* Returns "" if versioning support is not present for the feature tag passed.
* Returns null if feature tag is not present.
*
* Example # 1:
* getCapabilityVersions(CapInfo.STANDALONE_CHATBOT);
* The above returns String in this format "+g.gsma.rcs.botversion=\"#=1,#=2\"",
* indicating more than one versions are supported for standalone chatbot feature tag
*
* Example # 2:
* getCapabilityVersions(CapInfo.INSTANT_MSG);
* The above returns empty String in this format "",
* indicating versions support is not present for im feature tag
*
* Example #3:
* getCapabilityVersions(
* "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.custom_im\");
* The above returns String "",
* indicating version supported is not present for the custom feature tag passed.
*/
public String getCapabilityVersions(String featureTagName) {
return mCapInfoMap.get(featureTagName);
}
/** Removes the entry of the feature tag passed, from the Map. */
public void removeCapability(String featureTagName) {
this.mCapInfoMap.remove(featureTagName);
}
/** Sets Map of feature tag string and string of supported versions. */
public void setCapInfoMap(Map<String, String> capInfoMap) {
this.mCapInfoMap = capInfoMap;
}
/** Gets Map of feature tag string and string of supported versions. */
public Map<String, String> getCapInfoMap() {
return mCapInfoMap;
}
/** Checks whether the featureTag is supported or not. */
public boolean isCapabilitySupported(String featureTag) {
return mCapInfoMap.containsKey(featureTag);
}
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mImSupported ? 1 : 0);
dest.writeInt(mFtSupported ? 1 : 0);
dest.writeInt(mFtThumbSupported ? 1 : 0);
dest.writeInt(mFtSnFSupported ? 1 : 0);
dest.writeInt(mFtHttpSupported ? 1 : 0);
dest.writeInt(mIsSupported ? 1 : 0);
dest.writeInt(mVsDuringCSSupported ? 1 : 0);
dest.writeInt(mVsSupported ? 1 : 0);
dest.writeInt(mSpSupported ? 1 : 0);
dest.writeInt(mCdViaPresenceSupported ? 1 : 0);
dest.writeInt(mIpVoiceSupported ? 1 : 0);
dest.writeInt(mIpVideoSupported ? 1 : 0);
dest.writeInt(mGeoPullFtSupported ? 1 : 0);
dest.writeInt(mGeoPullSupported ? 1 : 0);
dest.writeInt(mGeoPushSupported ? 1 : 0);
dest.writeInt(mSmSupported ? 1 : 0);
dest.writeInt(mFullSnFGroupChatSupported ? 1 : 0);
dest.writeInt(mGeoSmsSupported ? 1 : 0);
dest.writeInt(mCallComposerSupported ? 1 : 0);
dest.writeInt(mPostCallSupported ? 1 : 0);
dest.writeInt(mSharedMapSupported ? 1 : 0);
dest.writeInt(mSharedSketchSupported ? 1 : 0);
dest.writeInt(mChatbotSupported ? 1 : 0);
dest.writeInt(mChatbotRoleSupported ? 1 : 0);
dest.writeInt(mSmChatbotSupported ? 1 : 0);
dest.writeInt(mMmtelCallComposerSupported ? 1 : 0);
dest.writeInt(mRcsIpVoiceCallSupported ? 1 : 0);
dest.writeInt(mRcsIpVideoCallSupported ? 1 : 0);
dest.writeInt(mRcsIpVideoOnlyCallSupported ? 1 : 0);
dest.writeStringArray(mExts);
dest.writeLong(mCapTimestamp);
Bundle capInfoBundle = new Bundle();
for (Map.Entry<String, String> entry : mCapInfoMap.entrySet()) {
capInfoBundle.putString(entry.getKey(), entry.getValue());
}
dest.writeBundle(capInfoBundle);
}
public static final Parcelable.Creator<CapInfo> CREATOR = new Parcelable.Creator<CapInfo>() {
public CapInfo createFromParcel(Parcel source) {
return new CapInfo(source);
}
public CapInfo[] newArray(int size) {
return new CapInfo[size];
}
};
private CapInfo(Parcel source) {
readFromParcel(source);
}
public void readFromParcel(Parcel source) {
mImSupported = (source.readInt() == 0) ? false : true;
mFtSupported = (source.readInt() == 0) ? false : true;
mFtThumbSupported = (source.readInt() == 0) ? false : true;
mFtSnFSupported = (source.readInt() == 0) ? false : true;
mFtHttpSupported = (source.readInt() == 0) ? false : true;
mIsSupported = (source.readInt() == 0) ? false : true;
mVsDuringCSSupported = (source.readInt() == 0) ? false : true;
mVsSupported = (source.readInt() == 0) ? false : true;
mSpSupported = (source.readInt() == 0) ? false : true;
mCdViaPresenceSupported = (source.readInt() == 0) ? false : true;
mIpVoiceSupported = (source.readInt() == 0) ? false : true;
mIpVideoSupported = (source.readInt() == 0) ? false : true;
mGeoPullFtSupported = (source.readInt() == 0) ? false : true;
mGeoPullSupported = (source.readInt() == 0) ? false : true;
mGeoPushSupported = (source.readInt() == 0) ? false : true;
mSmSupported = (source.readInt() == 0) ? false : true;
mFullSnFGroupChatSupported = (source.readInt() == 0) ? false : true;
mGeoSmsSupported = (source.readInt() == 0) ? false : true;
mCallComposerSupported = (source.readInt() == 0) ? false : true;
mPostCallSupported = (source.readInt() == 0) ? false : true;
mSharedMapSupported = (source.readInt() == 0) ? false : true;
mSharedSketchSupported = (source.readInt() == 0) ? false : true;
mChatbotSupported = (source.readInt() == 0) ? false : true;
mChatbotRoleSupported = (source.readInt() == 0) ? false : true;
mSmChatbotSupported = (source.readInt() == 0) ? false : true;
mMmtelCallComposerSupported = (source.readInt() == 0) ? false : true;
mRcsIpVoiceCallSupported = (source.readInt() == 0) ? false : true;
mRcsIpVideoCallSupported = (source.readInt() == 0) ? false : true;
mRcsIpVideoOnlyCallSupported = (source.readInt() == 0) ? false : true;
mExts = source.createStringArray();
mCapTimestamp = source.readLong();
Bundle capInfoBundle = source.readBundle();
for (String key: capInfoBundle.keySet()) {
mCapInfoMap.put(key, capInfoBundle.getString(key));
}
}
}