diff options
author | Yiqun Wu <yiqunw@google.com> | 2019-12-26 17:08:59 -0800 |
---|---|---|
committer | Yiqun Wu <yiqunw@google.com> | 2020-01-02 16:50:04 -0800 |
commit | 50e8317d5f6eb9bed04e56cdeb86677dde690c01 (patch) | |
tree | 69b60bf928180218ce5e28d47afc306467d93493 /src | |
parent | af69b1899347df6a56300e607fc29972a5ec5ce6 (diff) | |
download | platform_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.java | 30 | ||||
-rw-r--r-- | src/com/android/car/dialer/ui/activecall/InCallViewModel.java | 35 |
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)); |