summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSekine Yasuaki <yasuaki.sekine@sony.com>2018-05-31 17:10:12 +0900
committertakeshi tanigawa <takeshi.tanigawa@sony.com>2019-04-05 19:10:59 +0900
commita702084a20b3edc6536c5e3527b065c1d99640e4 (patch)
tree1df976361e9d0a505fbdb698b48da433066e221d
parent381dffd9a95b5c8e3d01a91c676dcfb04cbbd204 (diff)
Fix the issue that automatic mute state remains ON after adding VT call
An issue occurs because InCallFragment#onResume() that release the automatic mute state is not called when switching fragments by adding call. To resolve this issue, handle automatic mute state in InCallActivity. Bug: 110815828 Test: Checked that the mute state is turned OFF when add a video call during a voice call. Change-Id: Ided7c58e1148f6ee12bdfeaa813d596a4716c1d6
-rw-r--r--java/com/android/incallui/CallButtonPresenter.java44
-rw-r--r--java/com/android/incallui/InCallPresenter.java40
-rw-r--r--java/com/android/incallui/callpending/CallPendingActivity.java3
-rw-r--r--java/com/android/incallui/incall/impl/InCallFragment.java1
-rw-r--r--java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java2
-rw-r--r--java/com/android/incallui/rtt/impl/RttChatFragment.java1
-rw-r--r--java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java1
-rw-r--r--java/com/android/incallui/video/impl/VideoCallFragment.java1
8 files changed, 42 insertions, 51 deletions
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index 7d12d5281..8bf234823 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -60,15 +60,9 @@ public class CallButtonPresenter
Listener,
InCallButtonUiDelegate {
- private static final String KEY_AUTOMATICALLY_MUTED_BY_ADD_CALL =
- "incall_key_automatically_muted_by_add_call";
- private static final String KEY_PREVIOUS_MUTE_STATE = "incall_key_previous_mute_state";
-
private final Context context;
private InCallButtonUi inCallButtonUi;
private DialerCall call;
- private boolean automaticallyMutedByAddCall = false;
- private boolean previousMuteState = false;
private boolean isInCallButtonUiReady;
private PhoneAccountHandle otherAccount;
@@ -275,18 +269,7 @@ public class CallButtonPresenter
DialerImpression.Type.IN_CALL_ADD_CALL_BUTTON_PRESSED,
call.getUniqueCallId(),
call.getTimeAddedMs());
- if (automaticallyMutedByAddCall) {
- // Since clicking add call button brings user to MainActivity and coming back refreshes mute
- // state, add call button should only be clicked once during InCallActivity shows. Otherwise,
- // we set previousMuteState wrong.
- return;
- }
- // Automatically mute the current call
- automaticallyMutedByAddCall = true;
- previousMuteState = AudioModeProvider.getInstance().getAudioState().isMuted();
- // Simulate a click on the mute button
- muteClicked(true /* checked */, false /* clickedByUser */);
- TelecomAdapter.getInstance().addCall();
+ InCallPresenter.getInstance().addCallClicked();
}
@Override
@@ -542,31 +525,10 @@ public class CallButtonPresenter
}
@Override
- public void refreshMuteState() {
- // Restore the previous mute state
- if (automaticallyMutedByAddCall
- && AudioModeProvider.getInstance().getAudioState().isMuted() != previousMuteState) {
- if (inCallButtonUi == null) {
- return;
- }
- muteClicked(previousMuteState, false /* clickedByUser */);
- }
- automaticallyMutedByAddCall = false;
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- outState.putBoolean(KEY_AUTOMATICALLY_MUTED_BY_ADD_CALL, automaticallyMutedByAddCall);
- outState.putBoolean(KEY_PREVIOUS_MUTE_STATE, previousMuteState);
- }
+ public void onSaveInstanceState(Bundle outState) {}
@Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- automaticallyMutedByAddCall =
- savedInstanceState.getBoolean(
- KEY_AUTOMATICALLY_MUTED_BY_ADD_CALL, automaticallyMutedByAddCall);
- previousMuteState = savedInstanceState.getBoolean(KEY_PREVIOUS_MUTE_STATE, previousMuteState);
- }
+ public void onRestoreInstanceState(Bundle savedInstanceState) {}
@Override
public void onCameraPermissionGranted() {
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index 150499f73..17af75691 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -273,6 +273,9 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
private SpeakEasyCallManager speakEasyCallManager;
+ private boolean addCallClicked = false;
+ private boolean automaticallyMutedByAddCall = false;
+
/** Inaccessible constructor. Must use getRunningInstance() to get this singleton. */
@VisibleForTesting
InCallPresenter() {}
@@ -1226,7 +1229,9 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
proximitySensor.onInCallShowing(showing);
}
- if (!showing) {
+ if (showing) {
+ refreshMuteState();
+ } else {
updateIsChangingConfigurations();
}
@@ -2033,5 +2038,38 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
return true;
}
+ public void addCallClicked() {
+ if (addCallClicked) {
+ // Since clicking add call button brings user to MainActivity and coming back refreshes mute
+ // state, add call button should only be clicked once during InCallActivity shows.
+ return;
+ }
+ addCallClicked = true;
+ if (!AudioModeProvider.getInstance().getAudioState().isMuted()) {
+ // Automatically mute the current call
+ TelecomAdapter.getInstance().mute(true);
+ automaticallyMutedByAddCall = true;
+ }
+ TelecomAdapter.getInstance().addCall();
+ }
+
+ /** Refresh mute state after call UI resuming from add call screen. */
+ public void refreshMuteState() {
+ LogUtil.i(
+ "InCallPresenter.refreshMuteState",
+ "refreshMuteStateAfterAddCall: %b addCallClicked: %b",
+ automaticallyMutedByAddCall,
+ addCallClicked);
+ if (!addCallClicked) {
+ return;
+ }
+ if (automaticallyMutedByAddCall) {
+ // Restore the previous mute state
+ TelecomAdapter.getInstance().mute(false);
+ automaticallyMutedByAddCall = false;
+ }
+ addCallClicked = false;
+ }
+
private final Set<InCallUiLock> inCallUiLocks = new ArraySet<>();
}
diff --git a/java/com/android/incallui/callpending/CallPendingActivity.java b/java/com/android/incallui/callpending/CallPendingActivity.java
index a686308c2..4086e1419 100644
--- a/java/com/android/incallui/callpending/CallPendingActivity.java
+++ b/java/com/android/incallui/callpending/CallPendingActivity.java
@@ -232,9 +232,6 @@ public class CallPendingActivity extends FragmentActivity
public void onRestoreInstanceState(Bundle savedInstanceState) {}
@Override
- public void refreshMuteState() {}
-
- @Override
public void addCallClicked() {}
@Override
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index 7f20b407f..30620699a 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -206,7 +206,6 @@ public class InCallFragment extends Fragment
@Override
public void onResume() {
super.onResume();
- inCallButtonUiDelegate.refreshMuteState();
inCallScreenDelegate.onInCallScreenResumed();
}
diff --git a/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java b/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java
index b0e23efcd..4cf40ef6a 100644
--- a/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java
+++ b/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java
@@ -31,8 +31,6 @@ public interface InCallButtonUiDelegate {
void onRestoreInstanceState(Bundle savedInstanceState);
- void refreshMuteState();
-
void addCallClicked();
void muteClicked(boolean checked, boolean clickedByUser);
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index 988f20c2c..649e80840 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -361,7 +361,6 @@ public class RttChatFragment extends Fragment
@Override
public void onRttScreenStart() {
- inCallButtonUiDelegate.refreshMuteState();
rttCallScreenDelegate.onRttCallScreenUiReady();
Activity activity = getActivity();
Window window = getActivity().getWindow();
diff --git a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
index f270edab9..89db07903 100644
--- a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
@@ -308,7 +308,6 @@ public class SurfaceViewVideoCallFragment extends Fragment
@Override
public void onVideoScreenStart() {
- inCallButtonUiDelegate.refreshMuteState();
videoCallScreenDelegate.onVideoCallScreenUiReady();
getView().postDelayed(cameraPermissionDialogRunnable, CAMERA_PERMISSION_DIALOG_DELAY_IN_MILLIS);
}
diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java
index 11b80ceb9..e7dff892e 100644
--- a/java/com/android/incallui/video/impl/VideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/VideoCallFragment.java
@@ -367,7 +367,6 @@ public class VideoCallFragment extends Fragment
@Override
public void onVideoScreenStart() {
- inCallButtonUiDelegate.refreshMuteState();
videoCallScreenDelegate.onVideoCallScreenUiReady();
getView().postDelayed(cameraPermissionDialogRunnable, CAMERA_PERMISSION_DIALOG_DELAY_IN_MILLIS);
getView()