summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSekine Yasuaki <yasuaki.sekine@sony.com>2018-05-31 17:10:12 +0900
committerMichael Bestas <mkbestas@lineageos.org>2020-05-24 20:09:50 +0300
commit2bfb4ff7b88fcf10cfd147f13b346fcb655fe842 (patch)
treef48d39962515c5110bef45f2063591cae3ec88fc
parentd1341b4f02d3ce4b4b996895d3da8e6a841bf934 (diff)
downloadandroid_packages_apps_Dialer-2bfb4ff7b88fcf10cfd147f13b346fcb655fe842.tar.gz
android_packages_apps_Dialer-2bfb4ff7b88fcf10cfd147f13b346fcb655fe842.tar.bz2
android_packages_apps_Dialer-2bfb4ff7b88fcf10cfd147f13b346fcb655fe842.zip
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 Change-Id: I7a956205fe8fbca56ec96a3bb672d792482c624a
-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 269d93e8c..cff283c21 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -67,17 +67,11 @@ public class CallButtonPresenter
InCallButtonUiDelegate,
DialerCallListener {
- 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 static final String KEY_RECORDING_WARNING_PRESENTED = "recording_warning_presented";
private final Context context;
private InCallButtonUi inCallButtonUi;
private DialerCall call;
- private boolean automaticallyMutedByAddCall = false;
- private boolean previousMuteState = false;
private boolean isInCallButtonUiReady;
private PhoneAccountHandle otherAccount;
@@ -321,18 +315,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
@@ -638,31 +621,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 83ec9ab44..8881029cc 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -275,6 +275,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() {}
@@ -1234,7 +1237,9 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud
proximitySensor.onInCallShowing(showing);
}
- if (!showing) {
+ if (showing) {
+ refreshMuteState();
+ } else {
updateIsChangingConfigurations();
}
@@ -2051,5 +2056,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 e98b2d4da..5177783b0 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 f5cd38d67..336550deb 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -210,7 +210,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 8b3c59b7c..4e25ff098 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 6567dff27..3e76f1f2b 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 e8ec22146..07965b985 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 b65979241..3fbce5c76 100644
--- a/java/com/android/incallui/video/impl/VideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/VideoCallFragment.java
@@ -397,7 +397,6 @@ public class VideoCallFragment extends Fragment
@Override
public void onVideoScreenStart() {
- inCallButtonUiDelegate.refreshMuteState();
videoCallScreenDelegate.onVideoCallScreenUiReady();
getView().postDelayed(cameraPermissionDialogRunnable, CAMERA_PERMISSION_DIALOG_DELAY_IN_MILLIS);
getView()