summaryrefslogtreecommitdiffstats
path: root/java/com/android/incallui
diff options
context:
space:
mode:
authorwangqi <wangqi@google.com>2017-09-28 12:23:35 -0700
committerEric Erfanian <erfanian@google.com>2017-10-02 14:56:37 -0700
commit4d705e558d25a8fd810cb551c43c5a517cd1c2b9 (patch)
tree62e9f38f107a3a0021c2454bda23a3da5c06f43d /java/com/android/incallui
parent43d73dfdbda67ed9f405fa15e303643d97d33b70 (diff)
downloadandroid_packages_apps_Dialer-4d705e558d25a8fd810cb551c43c5a517cd1c2b9.tar.gz
android_packages_apps_Dialer-4d705e558d25a8fd810cb551c43c5a517cd1c2b9.tar.bz2
android_packages_apps_Dialer-4d705e558d25a8fd810cb551c43c5a517cd1c2b9.zip
Fix crash on hanging up simulator video call.
The problem is that InCallActivityCommon#onStop will try to commit any fragment which will crash. This change also fix a bug that simulatorRemoteVideo is not stopped after hanging up. Bug: 67045513 Test: manual PiperOrigin-RevId: 170380589 Change-Id: I25e0f43141eaa573189f4d9c0109fd2689c10374
Diffstat (limited to 'java/com/android/incallui')
-rw-r--r--java/com/android/incallui/InCallActivity.java2
-rw-r--r--java/com/android/incallui/call/DialerCall.java42
-rw-r--r--java/com/android/incallui/videotech/VideoTech.java2
-rw-r--r--java/com/android/incallui/videotech/empty/EmptyVideoTech.java5
-rw-r--r--java/com/android/incallui/videotech/ims/ImsVideoTech.java5
-rw-r--r--java/com/android/incallui/videotech/lightbringer/LightbringerTech.java5
6 files changed, 33 insertions, 28 deletions
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 178a404ba..b82b6c994 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -200,9 +200,9 @@ public class InCallActivity extends TransactionSafeFragmentActivity
protected void onStop() {
Trace.beginSection("InCallActivity.onStop");
LogUtil.i("InCallActivity.onStop", "");
+ isVisible = false;
super.onStop();
common.onStop();
- isVisible = false;
Trace.endSection();
}
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 4f31dadf4..82a29ee84 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -153,9 +153,10 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
// Times when a second call is received but AnswerAndRelease button is not shown
// since it's not supported.
private int secondCallWithoutAnswerAndReleasedButtonTimes = 0;
- private VideoTech videoTech;
+ private VideoTech videoTech = new EmptyVideoTech();
- private boolean isImsReachable;
+ private com.android.dialer.logging.VideoTech.Type selectedAvailableVideoTechType =
+ com.android.dialer.logging.VideoTech.Type.NONE;
public static String getNumberFromHandle(Uri handle) {
return handle == null ? "" : handle.getSchemeSpecificPart();
@@ -451,10 +452,15 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
private void update() {
Trace.beginSection("DialerCall.update");
int oldState = getState();
- // Clear any cache here that could potentially change on update.
- videoTech = null;
// We want to potentially register a video call callback here.
updateFromTelecomCall();
+ // Only store the first video tech type found to be available during the life of the call.
+ if (selectedAvailableVideoTechType == com.android.dialer.logging.VideoTech.Type.NONE) {
+ // Update the video tech.
+ videoTech = mVideoTechManager.findBestAvailableVideoTech();
+ videoTech.becomePrimary();
+ selectedAvailableVideoTechType = videoTech.getVideoTechType();
+ }
if (oldState != getState() && getState() == DialerCall.State.DISCONNECTED) {
for (DialerCallListener listener : mListeners) {
listener.onDialerCallDisconnect();
@@ -1156,9 +1162,6 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
}
public VideoTech getVideoTech() {
- if (videoTech == null) {
- videoTech = mVideoTechManager.getVideoTech();
- }
return videoTech;
}
@@ -1333,12 +1336,8 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
mVideoTechManager.dispatchRemovedFromCallList();
}
- public boolean isImsReachable() {
- return isImsReachable;
- }
-
- private void setImsReachable(boolean imsReachable) {
- isImsReachable = imsReachable;
+ public com.android.dialer.logging.VideoTech.Type getSelectedAvailableVideoTechType() {
+ return selectedAvailableVideoTechType;
}
/**
@@ -1535,7 +1534,6 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
private final Context context;
private final EmptyVideoTech emptyVideoTech = new EmptyVideoTech();
private final List<VideoTech> videoTechs;
- private VideoTech savedTech;
VideoTechManager(DialerCall call) {
this.context = call.mContext;
@@ -1547,10 +1545,7 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
// Insert order here determines the priority of that video tech option
videoTechs = new ArrayList<>();
- ImsVideoTech imsVideoTech =
- new ImsVideoTech(Logger.get(call.mContext), call, call.mTelecomCall);
- call.setImsReachable(imsVideoTech.isAvailable(context));
- videoTechs.add(imsVideoTech);
+ videoTechs.add(new ImsVideoTech(Logger.get(call.mContext), call, call.mTelecomCall));
VideoTech rcsVideoTech =
EnrichedCallComponent.get(call.mContext)
@@ -1571,17 +1566,10 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
phoneNumber));
}
- VideoTech getVideoTech() {
- if (savedTech != null) {
- return savedTech;
- }
-
+ VideoTech findBestAvailableVideoTech() {
for (VideoTech tech : videoTechs) {
if (tech.isAvailable(context)) {
- // Remember the first VideoTech that becomes available and always use it
- savedTech = tech;
- savedTech.becomePrimary();
- return savedTech;
+ return tech;
}
}
diff --git a/java/com/android/incallui/videotech/VideoTech.java b/java/com/android/incallui/videotech/VideoTech.java
index 410c35762..71087cb2c 100644
--- a/java/com/android/incallui/videotech/VideoTech.java
+++ b/java/com/android/incallui/videotech/VideoTech.java
@@ -85,6 +85,8 @@ public interface VideoTech {
*/
void becomePrimary();
+ com.android.dialer.logging.VideoTech.Type getVideoTechType();
+
/** Listener for video call events. */
interface VideoTechListener {
diff --git a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
index f156a14ad..2e34a6a8a 100644
--- a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
+++ b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
@@ -107,4 +107,9 @@ public class EmptyVideoTech implements VideoTech {
@Override
public void becomePrimary() {}
+
+ @Override
+ public com.android.dialer.logging.VideoTech.Type getVideoTechType() {
+ return com.android.dialer.logging.VideoTech.Type.NONE;
+ }
}
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index 0ef07d667..0310a90ac 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -327,6 +327,11 @@ public class ImsVideoTech implements VideoTech {
DialerImpression.Type.UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN_FOR_IMS);
}
+ @Override
+ public com.android.dialer.logging.VideoTech.Type getVideoTechType() {
+ return com.android.dialer.logging.VideoTech.Type.IMS_VIDEO_TECH;
+ }
+
private boolean canPause() {
return call.getDetails().can(Details.CAPABILITY_CAN_PAUSE_VIDEO);
}
diff --git a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
index 1ddf3716e..9adc53b0d 100644
--- a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
+++ b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
@@ -195,4 +195,9 @@ public class LightbringerTech implements VideoTech, LightbringerListener {
public void onLightbringerStateChanged() {
listener.onVideoTechStateChanged();
}
+
+ @Override
+ public com.android.dialer.logging.VideoTech.Type getVideoTechType() {
+ return com.android.dialer.logging.VideoTech.Type.LIGHTBRINGER_VIDEO_TECH;
+ }
}