summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYiqun Wu <yiqunw@google.com>2019-12-26 17:08:59 -0800
committerYiqun Wu <yiqunw@google.com>2020-01-02 16:50:04 -0800
commit50e8317d5f6eb9bed04e56cdeb86677dde690c01 (patch)
tree69b60bf928180218ce5e28d47afc306467d93493 /src
parentaf69b1899347df6a56300e607fc29972a5ec5ce6 (diff)
downloadplatform_packages_apps_Car_Dialer-50e8317d5f6eb9bed04e56cdeb86677dde690c01.tar.gz
platform_packages_apps_Car_Dialer-50e8317d5f6eb9bed04e56cdeb86677dde690c01.tar.bz2
platform_packages_apps_Car_Dialer-50e8317d5f6eb9bed04e56cdeb86677dde690c01.zip
Fix in call activity flash issue.
Fixes: 144577572 Test: manually Change-Id: I4ea79060753c036c0147bcc640ae96561ef1a2a5
Diffstat (limited to 'src')
-rw-r--r--src/com/android/car/dialer/ui/activecall/InCallActivity.java30
-rw-r--r--src/com/android/car/dialer/ui/activecall/InCallViewModel.java35
2 files changed, 40 insertions, 25 deletions
diff --git a/src/com/android/car/dialer/ui/activecall/InCallActivity.java b/src/com/android/car/dialer/ui/activecall/InCallActivity.java
index 7b8215c6..015dc085 100644
--- a/src/com/android/car/dialer/ui/activecall/InCallActivity.java
+++ b/src/com/android/car/dialer/ui/activecall/InCallActivity.java
@@ -1,11 +1,11 @@
-/**
+/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -60,9 +60,8 @@ public class InCallActivity extends FragmentActivity {
InCallViewModel inCallViewModel = ViewModelProviders.of(this).get(InCallViewModel.class);
mIncomingCallLiveData = LiveDataFunctions.iff(mShowIncomingCall,
inCallViewModel.getIncomingCall());
- mIncomingCallLiveData.observe(this, this::updateIncomingCallVisibility);
LiveDataFunctions.pair(inCallViewModel.getOngoingCallList(), mIncomingCallLiveData).observe(
- this, this::maybeFinishActivity);
+ this, this::updateVisibility);
handleIntent();
}
@@ -71,7 +70,7 @@ public class InCallActivity extends FragmentActivity {
protected void onStop() {
super.onStop();
L.d(TAG, "onStop");
- if (mShowIncomingCall.getValue()) {
+ if (mIncomingCallLiveData.getValue() != null) {
InCallNotificationController.get()
.showInCallNotification(mIncomingCallLiveData.getValue());
}
@@ -85,11 +84,14 @@ public class InCallActivity extends FragmentActivity {
handleIntent();
}
- private void maybeFinishActivity(Pair<List<Call>, Call> callList) {
+ private void updateVisibility(Pair<List<Call>, Call> callList) {
if ((callList.first == null || callList.first.isEmpty()) && callList.second == null) {
L.d(TAG, "No call to show. Finish InCallActivity");
finish();
+ return;
}
+
+ updateIncomingCallVisibility(callList.second);
}
private void handleIntent() {
@@ -105,13 +107,21 @@ public class InCallActivity extends FragmentActivity {
private void updateIncomingCallVisibility(Call incomingCall) {
if (incomingCall == null) {
- getSupportFragmentManager().beginTransaction().show(mOngoingCallFragment).hide(
- mIncomingCallFragment).commit();
+ getSupportFragmentManager()
+ .beginTransaction()
+ .show(mOngoingCallFragment)
+ .hide(mIncomingCallFragment)
+ .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
+ .commit();
mShowIncomingCall.setValue(false);
setIntent(null);
} else {
- getSupportFragmentManager().beginTransaction().show(mIncomingCallFragment).hide(
- mOngoingCallFragment).commit();
+ getSupportFragmentManager()
+ .beginTransaction()
+ .show(mIncomingCallFragment)
+ .hide(mOngoingCallFragment)
+ .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
+ .commit();
}
}
}
diff --git a/src/com/android/car/dialer/ui/activecall/InCallViewModel.java b/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
index 9d3781cd..328695b5 100644
--- a/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
+++ b/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
@@ -57,10 +57,10 @@ public class InCallViewModel extends AndroidViewModel implements
private static final String TAG = "CD.InCallViewModel";
private final MutableLiveData<List<Call>> mCallListLiveData;
- private final LiveData<List<Call>> mOngoingCallListLiveData;
+ private final MutableLiveData<List<Call>> mOngoingCallListLiveData;
private final Comparator<Call> mCallComparator;
- private final LiveData<Call> mIncomingCallLiveData;
+ private final MutableLiveData<Call> mIncomingCallLiveData;
private final LiveData<CallDetail> mCallDetailLiveData;
private final LiveData<Integer> mCallStateLiveData;
@@ -99,7 +99,11 @@ public class InCallViewModel extends AndroidViewModel implements
private final Call.Callback mCallStateChangedCallback = new Call.Callback() {
@Override
public void onStateChanged(Call call, int state) {
- // Sets value to trigger the live data for incoming call and active call list to update.
+ // Don't show in call activity by declining a ringing call to avoid UI flashing.
+ if (call.equals(mIncomingCallLiveData.getValue()) && state == Call.STATE_DISCONNECTED) {
+ return;
+ }
+ // Sets value to trigger incoming call and active call list to update.
mCallListLiveData.setValue(mCallListLiveData.getValue());
}
};
@@ -108,20 +112,21 @@ public class InCallViewModel extends AndroidViewModel implements
super(application);
mContext = application.getApplicationContext();
- mCallListLiveData = new MutableLiveData<>();
+ mIncomingCallLiveData = new MutableLiveData<>();
+ mOngoingCallListLiveData = new MutableLiveData<>();
mCallComparator = new CallComparator();
-
- mIncomingCallLiveData = Transformations.map(mCallListLiveData,
- callList -> firstMatch(callList,
+ mCallListLiveData = new MutableLiveData<List<Call>>() {
+ @Override
+ public void setValue(List<Call> callList) {
+ super.setValue(callList);
+ List<Call> activeCallList = filter(callList,
+ call -> call != null && call.getState() != Call.STATE_RINGING);
+ activeCallList.sort(mCallComparator);
+ mOngoingCallListLiveData.setValue(activeCallList);
+ mIncomingCallLiveData.setValue(firstMatch(callList,
call -> call != null && call.getState() == Call.STATE_RINGING));
-
- mOngoingCallListLiveData = Transformations.map(mCallListLiveData,
- callList -> {
- List<Call> activeCallList = filter(callList,
- call -> call != null && call.getState() != Call.STATE_RINGING);
- activeCallList.sort(mCallComparator);
- return activeCallList;
- });
+ }
+ };
mPrimaryCallLiveData = Transformations.map(mOngoingCallListLiveData,
input -> input.isEmpty() ? null : input.get(0));