IMS Modify Call (2) receive request 收到视频升级请求

来源:互联网 发布:linux查询外网ip地址 编辑:程序博客网 时间:2024/06/06 04:15
主要内容为MT收到视频升级的请求的过程,也是MT消息上传的过程。

流程图

SequenceDiagram1.jpg

可以看到信息上报跨了4个模块,没有经过service/Telecom

看关键log方便跟踪


<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone V/ImsSenderRxr: Read packet: 24 bytes</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone V/ImsSenderRxr: processResponse[SUB1]</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone D/ImsSenderRxr: Response data: [12, 13, -1, -1, -1, -1, 16, 3, 24, -49, 1, 32, 0, 21, 1, 0, 0, 0, 26, 4, 8, 3, 16, 2][SUB1]</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone D/ImsSenderRxr:  Tag -1 3 207 0[SUB1]</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone D/ImsSenderRxr: responseModifyCall  1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0[SUB1]</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.438 3329-4362/com.android.phone D/ImsSenderRxr: [UNSL]< <span style="background-color:rgb(192,192,192)">UNSOL_MODIFY_CALL</span>  1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code <span style="background-color:rgb(192,192,192)"><span style="color:#ff0000;">0 0</span></span>[SUB1]</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.438 3329-3329/com.android.phone D/ImsServiceSub: Message received: what = 13</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.438 3329-3329/com.android.phone D/ImsServiceSub: handleCallModifyRequest( 1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0)</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.438 3329-3329/com.android.phone D/VideoCall_ImsCallModification: onReceivedCallModify( 1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0)</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.438 3329-3329/com.android.phone D/VideoCall_ImsCallModification: validateIncomingModifyConnectionType newCallType = 3</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.438 3329-3329/com.android.phone D/VideoCall_ImsCallModification: validateIncomingModifyConnectionType modifyToCurrCallType = false isIndexValid = true isLowBattery = false</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.439 3329-3329/com.android.phone D/VideoCall_ImsVideoCallProviderImpl: (1) onCallTypeChanged session= callid= 1 mediaId=5 </span></code></div></div>

代码段

vendor/qcom/proprietary/telephony-apps/ims

高通私有代码,略。

frameworks/opt/net/ims

android/frameworks/opt/net/ims/src/java/com/android/ims/internal/ImsVideoCallProvider.java
看到方法名带receive request字样,直译就是收到请求,在响应之后方法名中就会换上类似response。
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/** @see Connection.VideoProvider#receiveSessionModifyRequest */</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> receiveSessionModifyRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mCallback </span><span class="pun" style="color:#93a1a1;">!=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">null</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">try</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                mCallback</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">receiveSessionModifyRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">RemoteException</span><span class="pln" style="color:#48484c;"> ignored</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>

android/frameworks/opt/net/ims/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * IImsVideoCallCallback stub implementation.</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">private</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">class</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">ImsVideoCallCallback</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">extends</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">IImsVideoCallCallback</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">Stub</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> receiveSessionModifyRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            mHandler</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">obtainMessage</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">MSG_RECEIVE_SESSION_MODIFY_REQUEST</span><span class="pun" style="color:#93a1a1;">,</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    </span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">).</span><span class="pln" style="color:#48484c;">sendToTarget</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/** Default handler used to consolidate binder method calls onto a single thread. */</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">private</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Handler</span><span class="pln" style="color:#48484c;"> mHandler </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">new</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Handler</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Looper</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getMainLooper</span><span class="pun" style="color:#93a1a1;">())</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> handleMessage</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Message</span><span class="pln" style="color:#48484c;"> msg</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">SomeArgs</span><span class="pln" style="color:#48484c;"> args</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">switch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">msg</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">what</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="kwd" style="color:#1e347b;">case</span><span class="pln" style="color:#48484c;"> MSG_RECEIVE_SESSION_MODIFY_REQUEST</span><span class="pun" style="color:#93a1a1;">:</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    <span style="background-color:rgb(192,192,192)">receiveSessionModifyRequest</span></span><span class="pun" style="color:#93a1a1;">((</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> msg</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">obj</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    </span><span class="kwd" style="color:#1e347b;">break</span><span class="pun" style="color:#93a1a1;">;</span></code></div></div>

frameworks/base/telecomm

android/frameworks/base/telecomm/java/android/telecom/Connection.java
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         * Used to inform listening {@link InCallService} implementations when the</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         * {@link VideoProvider} receives a session modification request.</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         * <p></span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         * Received by the {@link InCallService} via</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         * {@link InCallService.VideoCall.Callback#onSessionModifyRequestReceived(VideoProfile)},</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         *</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         * @param videoProfile The requested video profile.</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         * @see #onSendSessionModifyRequest(VideoProfile, VideoProfile)</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">         */</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> receiveSessionModifyRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pln" style="color:#48484c;"> videoProfile</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mVideoCallbacks </span><span class="pun" style="color:#93a1a1;">!=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">null</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">IVideoCallback</span><span class="pln" style="color:#48484c;"> callback </span><span class="pun" style="color:#93a1a1;">:</span><span class="pln" style="color:#48484c;"> mVideoCallbacks</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">values</span><span class="pun" style="color:#93a1a1;">())</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    </span><span class="kwd" style="color:#1e347b;">try</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                        callback</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">receiveSessionModifyRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">videoProfile</span><span class="pun" style="color:#93a1a1;">);//多处调用</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">RemoteException</span><span class="pln" style="color:#48484c;"> ignored</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">w</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"receiveSessionModifyRequest callback failed"</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> ignored</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
android/frameworks/base/telecomm/java/android/telecom/VideoCallImpl.java
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * IVideoCallback stub implementation.</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">private</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">class</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">VideoCallListenerBinder</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">extends</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">IVideoCallback</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">Stub</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> receiveSessionModifyRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pln" style="color:#48484c;"> videoProfile</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mHandler </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">null</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="kwd" style="color:#1e347b;">return</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            mHandler</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">obtainMessage</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">MessageHandler</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">MSG_RECEIVE_SESSION_MODIFY_REQUEST</span><span class="pun" style="color:#93a1a1;">,</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    videoProfile</span><span class="pun" style="color:#93a1a1;">).</span><span class="pln" style="color:#48484c;">sendToTarget</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
handleMessage
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> handleMessage</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Message</span><span class="pln" style="color:#48484c;"> msg</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mCallback </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">null</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="kwd" style="color:#1e347b;">return</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">SomeArgs</span><span class="pln" style="color:#48484c;"> args</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">switch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">msg</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">what</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="kwd" style="color:#1e347b;">case</span><span class="pln" style="color:#48484c;"> MSG_RECEIVE_SESSION_MODIFY_REQUEST</span><span class="pun" style="color:#93a1a1;">:</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    mCallback</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">onSessionModifyRequestReceived</span><span class="pun" style="color:#93a1a1;">((</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> msg</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">obj</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                    </span><span class="kwd" style="color:#1e347b;">break</span><span class="pun" style="color:#93a1a1;">;</span></code></div></div>
前面几乎都没什么说的,走一条线就是了,然后经InCallService接口回调到InCallUI

packages/apps/InCallUI

一般客户有需求,要修改界面的话也都是该InCallUI,下层的流程是不动的,因此下面一部分比较重要
android/packages/apps/InCallUI/src/com/android/incallui/InCallVideoCallCallback.java
目前为止传想来的消息都只是MODIFY CALL,并没有携带说是升级还是降级,从下面的方法中可以看到有分开两种情况了。
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * Handles an incoming session modification request.</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     *</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * @param videoProfile The requested video call profile.</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> onSessionModifyRequestReceived</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pln" style="color:#48484c;"> videoProfile</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" onSessionModifyRequestReceived videoProfile="</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> videoProfile</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> previousVideoState </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">CallUtils</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getUnPausedVideoState</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mCall</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getVideoState</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> newVideoState </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">CallUtils</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getUnPausedVideoState</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">videoProfile</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getVideoState</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">InCallPresenter</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getInstance</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;">wakeUpScreen</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">boolean</span><span class="pln" style="color:#48484c;"> wasVideoCall </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">CallUtils</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">isVideoCall</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">previousVideoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">boolean</span><span class="pln" style="color:#48484c;"> isVideoCall </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">CallUtils</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">isVideoCall</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">newVideoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="com" style="color:#93a1a1;">// Check for upgrades to video and downgrades to audio.</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">wasVideoCall </span><span class="pun" style="color:#93a1a1;">&&</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">!</span><span class="pln" style="color:#48484c;">isVideoCall</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">InCallVideoCallCallbackNotifier</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getInstance</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">downgradeToAudio</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mCall</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">else</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">previousVideoState </span><span class="pun" style="color:#93a1a1;">!=</span><span class="pln" style="color:#48484c;"> newVideoState</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">InCallVideoCallCallbackNotifier</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getInstance</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">upgradeToVideoRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mCall</span><span class="pun" style="color:#93a1a1;">,</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                newVideoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
升级视频的请求
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * Inform listeners of an upgrade to video request for a call.</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * @param call The call.</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * @param videoState The video state we want to upgrade to.</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> upgradeToVideoRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Call</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"upgradeToVideoRequest call = "</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> call </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" new video state = "</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">SessionModificationListener</span><span class="pln" style="color:#48484c;"> listener </span><span class="pun" style="color:#93a1a1;">:</span><span class="pln" style="color:#48484c;"> mSessionModificationListeners</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            listener</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">onUpgradeToVideoRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">call</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
InCallPresenter
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> onUpgradeToVideoRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Call</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"onUpgradeToVideoRequest call = "</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> call </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" video state = "</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">call </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">null</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        call</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">setSessionModificationTo</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
android/packages/apps/InCallUI/src/com/android/incallui/Call.java
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * This method is called when we request for a video upgrade or downgrade. This handles the</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * session modification state RECEIVED_UPGRADE_TO_VIDEO_REQUEST and sets the video state we</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * want to upgrade/downgrade to.</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> setSessionModificationTo</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"setSessionModificationTo - video state= "</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">videoState </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> getVideoState</span><span class="pun" style="color:#93a1a1;">())</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            mSessionModificationState </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Call</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">SessionModificationState</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">NO_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">w</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="str" style="color:#dd1144;">"setSessionModificationTo - Clearing session modification state"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">else</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            mSessionModificationState </span><span class="pun" style="color:#93a1a1;">=</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="typ" style="color:teal;">Call</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">SessionModificationState</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">RECEIVED_UPGRADE_TO_VIDEO_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            setModifyToVideoState</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">CallList</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getInstance</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">onUpgradeToVideo</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"setSessionModificationTo - mSessionModificationState="</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> mSessionModificationState </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" video state= "</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        update</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>

android/packages/apps/InCallUI/src/com/android/incallui/CallList.java
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> onUpgradeToVideo</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Call</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">){</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"onUpgradeToVideo call="</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Listener</span><span class="pln" style="color:#48484c;"> listener </span><span class="pun" style="color:#93a1a1;">:</span><span class="pln" style="color:#48484c;"> mListeners</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            listener</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">onUpgradeToVideo</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">call</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
看前面的注释
这是modify call的唯一调用的方法,等下我们看下降级的
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">         </span><span class="pun" style="color:#93a1a1;">*</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Called</span><span class="pln" style="color:#48484c;"> when a </span><span class="kwd" style="color:#1e347b;">new</span><span class="pln" style="color:#48484c;"> modify call request comes in</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">         </span><span class="pun" style="color:#93a1a1;">*</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">This</span><span class="pln" style="color:#48484c;"> is the only method that gets called </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> modify requests</span><span class="pun" style="color:#93a1a1;">.</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">         </span><span class="pun" style="color:#93a1a1;">*/</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> onUpgradeToVideo</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Call</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">);</span></code></div></div>
android/packages/apps/InCallUI/src/com/android/incallui/AnswerPresenter.java
界面显示,(在5.1上我们自己做过升级声音提示,在6.0上高通加了一个类实现这个功能,不知道AOSP上有没有那个提示音的功能)
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> onUpgradeToVideo</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Call</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"onUpgradeToVideo: "</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">this</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" call="</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        showAnswerUi</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">true</span><span class="pun" style="color:#93a1a1;">);//一次</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">boolean</span><span class="pln" style="color:#48484c;"> isUpgradePending </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> isVideoUpgradePending</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">call</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">InCallPresenter</span><span class="pln" style="color:#48484c;"> inCallPresenter </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">InCallPresenter</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getInstance</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">isUpgradePending</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="pun" style="color:#93a1a1;">&&</span><span class="pln" style="color:#48484c;"> inCallPresenter</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getInCallState</span><span class="pun" style="color:#93a1a1;">()</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">InCallPresenter</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">InCallState</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">INCOMING</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"declining upgrade request"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="com" style="color:#93a1a1;">//If there is incoming call reject upgrade request</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            inCallPresenter</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">declineUpgradeRequest</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">getUi</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;">getContext</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">else</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">isUpgradePending</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"process upgrade request as no MT call"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            <span style="background-color:rgb(192,192,192)">processVideoUpgradeRequestCall</span></span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">call</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">private</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> processVideoUpgradeRequestCall</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Call</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">d</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" processVideoUpgradeRequestCall call="</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> subId </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getSubId</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> phoneId </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> mCalls</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getPhoneId</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">subId</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        mCallId</span><span class="pun" style="color:#93a1a1;">[</span><span class="pln" style="color:#48484c;">phoneId</span><span class="pun" style="color:#93a1a1;">]</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getId</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        mCall</span><span class="pun" style="color:#93a1a1;">[</span><span class="pln" style="color:#48484c;">phoneId</span><span class="pun" style="color:#93a1a1;">]</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="com" style="color:#93a1a1;">// Listen for call updates for the current call.</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">CallList</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getInstance</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;">addCallUpdateListener</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">mCallId</span><span class="pun" style="color:#93a1a1;">[</span><span class="pln" style="color:#48484c;">phoneId</span><span class="pun" style="color:#93a1a1;">],</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> currentVideoState </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getVideoState</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> modifyToVideoState </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> call</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getModifyToVideoState</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">currentVideoState </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> modifyToVideoState</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">w</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"processVideoUpgradeRequestCall: Video states are same. Return."</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="typ" style="color:teal;">AnswerUi</span><span class="pln" style="color:#48484c;"> ui </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> getUi</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">ui </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">null</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">e</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">this</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"Ui is null. Can't process upgrade request"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        showAnswerUi</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">true</span><span class="pun" style="color:#93a1a1;">);//2次</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        ui</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">showTargets</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">QtiCallUtils</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getSessionModificationOptions</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">getUi</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;">getContext</span><span class="pun" style="color:#93a1a1;">(),</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                currentVideoState</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> modifyToVideoState</span><span class="pun" style="color:#93a1a1;">));</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
QtiCallUtils.java
根据实际情况,在界面AnswerFragment上显示不同选择。
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * Returns the session modification user options based on session modify request video states</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * (current video state and modify request video state)</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">static</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> getSessionModificationOptions</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Context</span><span class="pln" style="color:#48484c;"> context</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> currentVideoState</span><span class="pun" style="color:#93a1a1;">,</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> modifyToVideoState</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(!</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">useExt</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">context</span><span class="pun" style="color:#93a1a1;">))</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">AnswerFragment</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;background-color:rgb(192,192,192)">TARGET_SET_FOR_VIDEO_ACCEPT_REJECT_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">showVideoUpgradeOptions</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">currentVideoState</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> modifyToVideoState</span><span class="pun" style="color:#93a1a1;">))</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">AnswerFragment</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">TARGET_SET_FOR_QTI_VIDEO_ACCEPT_REJECT_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">else</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">isEnabled</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">STATE_BIDIRECTIONAL</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> modifyToVideoState</span><span class="pun" style="color:#93a1a1;">))</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">AnswerFragment</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">TARGET_SET_FOR_QTI_BIDIRECTIONAL_VIDEO_ACCEPT_REJECT_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">else</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">isEnabled</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">STATE_TX_ENABLED</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> modifyToVideoState</span><span class="pun" style="color:#93a1a1;">))</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">AnswerFragment</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">TARGET_SET_FOR_QTI_VIDEO_TRANSMIT_ACCEPT_REJECT_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">else</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">isEnabled</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">STATE_RX_ENABLED</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> modifyToVideoState</span><span class="pun" style="color:#93a1a1;">))</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">return</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">AnswerFragment</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">TARGET_SET_FOR_QTI_VIDEO_RECEIVE_ACCEPT_REJECT_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">return</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">AnswerFragment</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">TARGET_SET_FOR_QTI_VIDEO_ACCEPT_REJECT_REQUEST</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
在我们的代码中,这个返回值后面被修改了,会根据运营商返回不同的值,
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * Checks the boolean flag in config file to figure out if we are going to use Qti extension or</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * not</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">static</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">boolean</span><span class="pln" style="color:#48484c;"> useExt</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Context</span><span class="pln" style="color:#48484c;"> context</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">if</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">context </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">null</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="typ" style="color:teal;">Log</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">w</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">context</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"Context is null..."</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">return</span><span class="pln" style="color:#48484c;"> isConfigEnabled</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">context</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> R</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">bool</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">video_call_use_ext</span><span class="pun" style="color:#93a1a1;">);//这个布尔值默认为true,但是针对mnc为405的都重写成了false</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
AnswerFragment.java
显示到界面上
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * Sets targets on the glowpad according to target set identified by the parameter.</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * @param targetSet Integer identifying the set of targets to use.</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> showTargets</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> targetSet</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        showTargets</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">targetSet</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">VideoProfile</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">STATE_BIDIRECTIONAL</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * Sets targets on the glowpad according to target set identified by the parameter.</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     * @param targetSet Integer identifying the set of targets to use.</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="com" style="color:#93a1a1;">     */</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="lit" style="color:#195f91;">@Override</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">    </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> showTargets</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> targetSet</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> videoState</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> targetResourceId</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> targetDescriptionsResourceId</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> directionDescriptionsResourceId</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> handleDrawableResourceId</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        mGlowpad</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">setVideoState</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">videoState</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">boolean</span><span class="pln" style="color:#48484c;"> isEnhanceUIEnabled </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> getContext</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;">getResources</span><span class="pun" style="color:#93a1a1;">().</span><span class="pln" style="color:#48484c;">getBoolean</span><span class="pun" style="color:#93a1a1;">(</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                R</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">bool</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">config_enable_enhance_video_call_ui</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"> </code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">        </span><span class="kwd" style="color:#1e347b;">switch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">targetSet</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            <span style="color:#1e347b;">...</span></span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">            </span><span class="kwd" style="color:#1e347b;">case</span><span class="pln" style="color:#48484c;"> TARGET_SET_FOR_VIDEO_ACCEPT_REJECT_REQUEST</span><span class="pun" style="color:#93a1a1;">:</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                targetResourceId </span><span class="pun" style="color:#93a1a1;">=</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                        R</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">array</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">incoming_call_widget_video_request_targets</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                targetDescriptionsResourceId </span><span class="pun" style="color:#93a1a1;">=</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                        R</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">array</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">incoming_call_widget_video_request_target_descriptions</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                directionDescriptionsResourceId </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> R</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">array</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                        </span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">incoming_call_widget_video_request_target_direction_descriptions</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                handleDrawableResourceId </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> R</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">drawable</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">ic_incall_video_handle</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-java" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                </span><span class="kwd" style="color:#1e347b;">break</span><span class="pun" style="color:#93a1a1;">;</span></code></div></div>
log
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.622 14182-14182/com.android.dialer I/InCall: StatusBarNotifier - Will show "dismiss upgrade" action in the incoming call Notification</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.624 14182-14182/com.android.dialer I/InCall: StatusBarNotifier - Will show "accept upgrade" action in the incoming call Notification</span></code></div></div>

关键log

MT receive

收到视频升级请求
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">//receive</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone V/ImsSenderRxr: Read packet: 24 bytes</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone V/ImsSenderRxr: processResponse[SUB1]</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone D/ImsSenderRxr: Response data: [12, 13, -1, -1, -1, -1, 16, 3, 24, -49, 1, 32, 0, 21, 1, 0, 0, 0, 26, 4, 8, 3, 16, 2][SUB1]</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone D/ImsSenderRxr:  Tag -1 3 207 0[SUB1]</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.437 3329-4362/com.android.phone D/ImsSenderRxr: responseModifyCall  1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0[SUB1]</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-19 19:05:41.438 3329-4362/com.android.phone D/ImsSenderRxr: [UNSL]< UNSOL_MODIFY_CALL  1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0[SUB1]</span></code></div></div>

MO send request, accepted, rejected, time out

MT接受升级请求后MO的log
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">//accepted response</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-25 21:37:21.793 3289-4294/com.android.phone V/ImsSenderRxr: Read packet: 12 bytes</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-25 21:37:21.793 3289-4294/com.android.phone V/ImsSenderRxr: processResponse[SUB1]</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-25 21:37:21.793 3289-4294/com.android.phone D/ImsSenderRxr: Response data: [11, 13, 110, 0, 0, 0, 16, 2, 24, 17, 32, 0][SUB1]</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-25 21:37:21.793 3289-4294/com.android.phone D/ImsSenderRxr:  Tag 110 2 17 0[SUB1]</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-25 21:37:21.793 3289-4294/com.android.phone D/ImsSenderRxr: [0110]< MODIFY_CALL_INITIATE [SUB1]</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-25 21:37:21.793 3289-3289/com.android.phone D/VideoCall_ImsCallModification: EVENT_MODIFY_CALL_INITIATE_DONE received</span></code></div></div>

升级请求被拒绝和超时,可以看到两者的log是一样的
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">//send request</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-21 16:00:12.167 13623-13623/com.android.phone D/ImsSenderRxr: [0021]> MODIFY_CALL_INITIATE[SUB0]</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">//reject</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-21 16:00:19.129 13623-14690/com.android.phone D/ImsSenderRxr: [0021]< MODIFY_CALL_INITIATE error: 28</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">06-21 16:00:19.129 13623-13623/com.android.phone D/VideoCall_ImsCallModification: EVENT_MODIFY_CALL_INITIATE_DONE received</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;"></span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">/</span></code><span style="color:#48484c;">/send request</span></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><span style="color:#48484c;">07-17 10:00:11.655 2915-2915/com.android.phone D/ImsSenderRxr: [0028]> MODIFY_CALL_INITIATE[SUB1]</span><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;"></span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><span style="color:#48484c;">//time out</span></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">07-17 10:00:27.733 2915-4049/com.android.phone D/ImsSenderRxr: [0028]< MODIFY_CALL_INITIATE error: 2807-17 10:00:27.733 2915-2915/com.android.phone D/VideoCall_ImsCallModification: EVENT_MODIFY_CALL_INITIATE_DONE received</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">07-17 10:00:27.748 13872-13872/com.android.dialer D/InCall: InCallVideoCallCallback - onSessionModifyResponseReceived status=5 requestedProfile=[VideoProfile videoState = Audio Tx Rx</span></code></div></div>
MT不做任何处理的话15秒后(运营商决定)MO收到运营商发来的响应消息,其中包括InCallVideoCallCallback - onSessionModifyResponseReceived status=5,这个5的定义为VideoProvider.SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE(5)意为被远端拒绝了可见对于MO来说超时和reject是一样的,而在MT收到的则是VideoProvider.SESSION_MODIFY_REQUEST_TIMED_OUT(4),所以在MT方 reject和time out是区分的。
然后这个error: 28的定义在imsIF.proto中查到,也证明了timeout和reject的。
<div class="linenums" style="margin:0px; padding-left:30px!important; color:rgb(30,52,123)"><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">E_REJECTED_BY_REMOTE = 28;              /* Remote end rejected a change started by</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important; list-style-type:decimal!important"><code class="language-html" style="margin:8px 0px; font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word"><span class="pln" style="color:#48484c;">                                                   REQUEST_MODIFY_CALL_INITIATE */</span></code></div></div>

小结

整个流程中的log不多,主要是底层ImsSenderRxr.java中的log多些,UNSOL_MODIFY_CALL (未处理的新消息),MODIFY_CALL_CONFIRM(MT界面应答),MODIFY_CALL_INITIATE(MO发起),然后InCall中在一些场景中有些log,AnswerPresenter和CallCardPresenter的log。
如果出问题的话也基本上在从底层和上层判断,中间应该不会有什么问题,底层看消息首发,上层看信息显示。Modify Call已经包括upgrade和downgrade,流程整体也是一样,在需要区分的时候会通过callType(CallMofidy)来区分。


0 0