blob: 7728cd5dc7e3b94d5674649c26814a491218a678 [file] [log] [blame]
Eric Erfanian2ca43182017-08-31 06:57:16 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package com.android.incallui;
18
19import android.os.Bundle;
yuegb841a6e2018-02-08 16:14:30 -080020import android.support.annotation.NonNull;
Eric Erfanian2ca43182017-08-31 06:57:16 -070021import android.support.annotation.Nullable;
22import android.support.v4.app.FragmentActivity;
yuegf539f782017-12-18 16:20:58 -080023import android.telecom.CallAudioState;
24import com.android.dialer.logging.DialerImpression;
25import com.android.dialer.logging.Logger;
Eric Erfanian2ca43182017-08-31 06:57:16 -070026import com.android.incallui.audiomode.AudioModeProvider;
27import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment;
28import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter;
yuegf539f782017-12-18 16:20:58 -080029import com.android.incallui.call.CallList;
yuegb841a6e2018-02-08 16:14:30 -080030import com.android.incallui.call.CallList.Listener;
yuegf539f782017-12-18 16:20:58 -080031import com.android.incallui.call.DialerCall;
Eric Erfanian2ca43182017-08-31 06:57:16 -070032import com.android.incallui.call.TelecomAdapter;
33
34/** Simple activity that just shows the audio route selector fragment */
35public class AudioRouteSelectorActivity extends FragmentActivity
yuegb841a6e2018-02-08 16:14:30 -080036 implements AudioRouteSelectorPresenter, Listener {
yuegf539f782017-12-18 16:20:58 -080037
Eric Erfanian2ca43182017-08-31 06:57:16 -070038 @Override
39 protected void onCreate(@Nullable Bundle bundle) {
40 super.onCreate(bundle);
41 AudioRouteSelectorDialogFragment.newInstance(AudioModeProvider.getInstance().getAudioState())
yueg6a80c822017-09-05 11:31:47 -070042 .show(getSupportFragmentManager(), AudioRouteSelectorDialogFragment.TAG);
yuegb841a6e2018-02-08 16:14:30 -080043
44 CallList.getInstance().addListener(this);
Eric Erfanian2ca43182017-08-31 06:57:16 -070045 }
46
47 @Override
48 public void onAudioRouteSelected(int audioRoute) {
49 TelecomAdapter.getInstance().setAudioRoute(audioRoute);
yuegbfd6b1f2017-10-16 10:31:11 -070050 finish();
yuegf539f782017-12-18 16:20:58 -080051
yuegf539f782017-12-18 16:20:58 -080052 // Log the select action with audio route and call
53 DialerImpression.Type impressionType = null;
54 if ((audioRoute & CallAudioState.ROUTE_WIRED_OR_EARPIECE) != 0) {
55 impressionType = DialerImpression.Type.BUBBLE_V2_WIRED_OR_EARPIECE;
56 } else if (audioRoute == CallAudioState.ROUTE_SPEAKER) {
57 impressionType = DialerImpression.Type.BUBBLE_V2_SPEAKERPHONE;
58 } else if (audioRoute == CallAudioState.ROUTE_BLUETOOTH) {
59 impressionType = DialerImpression.Type.BUBBLE_V2_BLUETOOTH;
60 }
61 if (impressionType == null) {
62 return;
63 }
64
yuegb841a6e2018-02-08 16:14:30 -080065 DialerCall call = getCall();
yuegf539f782017-12-18 16:20:58 -080066 if (call != null) {
67 Logger.get(this)
68 .logCallImpression(impressionType, call.getUniqueCallId(), call.getTimeAddedMs());
69 } else {
70 Logger.get(this).logImpression(impressionType);
71 }
Eric Erfanian2ca43182017-08-31 06:57:16 -070072 }
73
74 @Override
75 public void onAudioRouteSelectorDismiss() {
76 finish();
77 }
yueg6a80c822017-09-05 11:31:47 -070078
79 @Override
80 protected void onPause() {
81 super.onPause();
82 AudioRouteSelectorDialogFragment audioRouteSelectorDialogFragment =
83 (AudioRouteSelectorDialogFragment)
84 getSupportFragmentManager().findFragmentByTag(AudioRouteSelectorDialogFragment.TAG);
85 // If Android back button is pressed, the fragment is dismissed and removed. If home button is
86 // pressed, we have to manually dismiss the fragment here. The fragment is also removed when
87 // dismissed.
88 if (audioRouteSelectorDialogFragment != null) {
89 audioRouteSelectorDialogFragment.dismiss();
90 }
yueg90b570e2017-09-28 15:06:58 -070091 // We don't expect the activity to resume, except for orientation change.
92 if (!isChangingConfigurations()) {
93 finish();
94 }
yueg6a80c822017-09-05 11:31:47 -070095 }
yuegb841a6e2018-02-08 16:14:30 -080096
97 @Override
98 protected void onDestroy() {
99 CallList.getInstance().removeListener(this);
100 super.onDestroy();
101 }
102
103 private DialerCall getCall() {
104 DialerCall dialerCall = CallList.getInstance().getOutgoingCall();
105 if (dialerCall == null) {
106 dialerCall = CallList.getInstance().getActiveOrBackgroundCall();
107 }
108 return dialerCall;
109 }
110
111 @Override
112 public void onDisconnect(DialerCall call) {
113 if (getCall() == null) {
114 finish();
115 }
116 }
117
118 @Override
119 public void onIncomingCall(DialerCall call) {}
120
121 @Override
122 public void onUpgradeToVideo(DialerCall call) {}
123
124 @Override
125 public void onSessionModificationStateChange(DialerCall call) {}
126
127 @Override
128 public void onCallListChange(CallList callList) {}
129
130 @Override
131 public void onWiFiToLteHandover(DialerCall call) {}
132
133 @Override
134 public void onHandoverToWifiFailed(DialerCall call) {}
135
136 @Override
137 public void onInternationalCallOnWifi(@NonNull DialerCall call) {}
Eric Erfanian2ca43182017-08-31 06:57:16 -0700138}