aboutsummaryrefslogtreecommitdiff
path: root/src/java/com/android/ims/rcs/uce/util/FeatureTags.java
blob: ed2eef4aff8872e1796ca452e2a62fdcd00e47c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
 * 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.util;

import android.net.Uri;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsContactUceCapability.OptionsBuilder;
import android.telephony.ims.RcsContactUceCapability.SourceType;

import java.util.List;
import java.util.Set;

/**
 * The util class of the feature tags.
 */
public class FeatureTags {

    public static final String FEATURE_TAG_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,urn%3Aurn-7%3A3gpp-"
                    + "service.ims.icsi.oma.cpm.deferred\";+g.gsma.rcs.cpm.pager-large";

    public static final String FEATURE_TAG_PAGER_MODE =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg\"";

    public static final String FEATURE_TAG_LARGE_MODE =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.largemsg\"";

    public static final String FEATURE_TAG_DEFERRED_MESSAGING =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.deferred\"";

    public static final String FEATURE_TAG_LARGE_PAGER_MODE =
            "+g.gsma.rcs.cpm.pager-large";

    public static final String FEATURE_TAG_CHAT_IM =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.im\"";

    public static final String FEATURE_TAG_CHAT_SESSION =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session\"";

    public static final String FEATURE_TAG_FILE_TRANSFER =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.fthttp\"";

    public static final String FEATURE_TAG_FILE_TRANSFER_VIA_SMS =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.ftsms\"";

    public static final String FEATURE_TAG_CALL_COMPOSER_ENRICHED_CALLING =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.gsma.callcomposer\"";

    public static final String FEATURE_TAG_CALL_COMPOSER_VIA_TELEPHONY = "+g.gsma.callcomposer";

    public static final String FEATURE_TAG_POST_CALL =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.gsma.callunanswered\"";

    public static final String FEATURE_TAG_SHARED_MAP =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.gsma.sharedmap\"";

    public static final String FEATURE_TAG_SHARED_SKETCH =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.gsma.sharedsketch\"";

    public static final String FEATURE_TAG_GEO_PUSH =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.geopush\"";

    public static final String FEATURE_TAG_GEO_PUSH_VIA_SMS =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.geosms\"";

    public static final String FEATURE_TAG_CHATBOT_COMMUNICATION_USING_SESSION =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot\"";

    public static final String FEATURE_TAG_CHATBOT_COMMUNICATION_USING_STANDALONE_MSG =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot.sa\"";

    public static final String FEATURE_TAG_CHATBOT_VERSION_SUPPORTED =
            "+g.gsma.rcs.botversion=\"#=1\"";

    public static final String FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED =
            "+g.gsma.rcs.botversion=\"#=1,#=2\"";

    public static final String FEATURE_TAG_CHATBOT_ROLE = "+g.gsma.rcs.isbot";

    public static final String FEATURE_TAG_MMTEL =
            "+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel\"";

    public static final String FEATURE_TAG_VIDEO = "video";

    public static final String FEATURE_TAG_PRESENCE =
            "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcse.dp\"";

    /**
     * Add the feature tags to the given RcsContactUceCapability OPTIONS builder.
     * @param optionsBuilder The OptionsBuilder to add the feature tags
     * @param mmtelAudioSupport If the audio capability is supported
     * @param mmtelVideoSupport If the video capability is supported
     * @param presenceSupport If presence is also supported
     * @param callComposerSupport If call composer via telephony is supported
     * @param registrationTags The other feature tags included in the IMS registration.
     */
    public static void addFeatureTags(final OptionsBuilder optionsBuilder,
            boolean mmtelAudioSupport, boolean mmtelVideoSupport,
            boolean presenceSupport, boolean callComposerSupport, Set<String> registrationTags) {
        if (presenceSupport) {
            registrationTags.add(FEATURE_TAG_PRESENCE);
        } else {
            registrationTags.remove(FEATURE_TAG_PRESENCE);
        }
        if (mmtelAudioSupport && mmtelVideoSupport) {
            registrationTags.add(FEATURE_TAG_MMTEL);
            registrationTags.add(FEATURE_TAG_VIDEO);
        } else if (mmtelAudioSupport) {
            registrationTags.add(FEATURE_TAG_MMTEL);
            registrationTags.remove(FEATURE_TAG_VIDEO);
        } else {
            registrationTags.remove(FEATURE_TAG_MMTEL);
            registrationTags.remove(FEATURE_TAG_VIDEO);
        }
        if (callComposerSupport) {
            registrationTags.add(FEATURE_TAG_CALL_COMPOSER_VIA_TELEPHONY);
        } else {
            registrationTags.remove(FEATURE_TAG_CALL_COMPOSER_VIA_TELEPHONY);
        }
        if (!registrationTags.isEmpty()) {
            optionsBuilder.addFeatureTags(registrationTags);
        }
    }

    /**
     * Get RcsContactUceCapabilities from the given feature tags.
     */
    public static RcsContactUceCapability getContactCapability(Uri contact,
            @SourceType int sourceType, List<String> featureTags) {
        OptionsBuilder builder = new OptionsBuilder(contact, sourceType);
        builder.setRequestResult(RcsContactUceCapability.REQUEST_RESULT_FOUND);
        featureTags.forEach(feature -> builder.addFeatureTag(feature));
        return builder.build();
    }
}