Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt +10 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.Intent import android.util.Log import android.view.View import android.widget.Chronometer import androidx.annotation.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.systemui.R import com.android.systemui.animation.ActivityLaunchAnimator Loading Loading @@ -122,6 +123,7 @@ class OngoingCallController @Inject constructor( * Should only be called from [CollapsedStatusBarFragment]. */ fun setChipView(chipView: View) { tearDownChipView() this.chipView = chipView if (hasOngoingCall()) { updateChip() Loading Loading @@ -165,8 +167,7 @@ class OngoingCallController @Inject constructor( val currentCallNotificationInfo = callNotificationInfo ?: return val currentChipView = chipView val timeView = currentChipView?.findViewById<Chronometer>(R.id.ongoing_call_chip_time) val timeView = currentChipView?.getTimeView() val backgroundView = currentChipView?.findViewById<View>(R.id.ongoing_call_chip_background) Loading Loading @@ -248,12 +249,19 @@ class OngoingCallController @Inject constructor( private fun removeChip() { callNotificationInfo = null tearDownChipView() mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) } if (uidObserver != null) { iActivityManager.unregisterUidObserver(uidObserver) } } /** Tear down anything related to the chip view to prevent leaks. */ @VisibleForTesting fun tearDownChipView() = chipView?.getTimeView()?.stop() private fun View.getTimeView(): Chronometer? = this.findViewById(R.id.ongoing_call_chip_time) private data class CallNotificationInfo( val key: String, val callStartTime: Long, Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt +6 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith Loading Loading @@ -117,6 +118,11 @@ class OngoingCallControllerTest : SysuiTestCase() { .thenReturn(PROC_STATE_INVISIBLE) } @After fun tearDown() { controller.tearDownChipView() } @Test fun onEntryUpdated_isOngoingCallNotif_listenerNotified() { notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry()) Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt +10 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.Intent import android.util.Log import android.view.View import android.widget.Chronometer import androidx.annotation.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.systemui.R import com.android.systemui.animation.ActivityLaunchAnimator Loading Loading @@ -122,6 +123,7 @@ class OngoingCallController @Inject constructor( * Should only be called from [CollapsedStatusBarFragment]. */ fun setChipView(chipView: View) { tearDownChipView() this.chipView = chipView if (hasOngoingCall()) { updateChip() Loading Loading @@ -165,8 +167,7 @@ class OngoingCallController @Inject constructor( val currentCallNotificationInfo = callNotificationInfo ?: return val currentChipView = chipView val timeView = currentChipView?.findViewById<Chronometer>(R.id.ongoing_call_chip_time) val timeView = currentChipView?.getTimeView() val backgroundView = currentChipView?.findViewById<View>(R.id.ongoing_call_chip_background) Loading Loading @@ -248,12 +249,19 @@ class OngoingCallController @Inject constructor( private fun removeChip() { callNotificationInfo = null tearDownChipView() mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) } if (uidObserver != null) { iActivityManager.unregisterUidObserver(uidObserver) } } /** Tear down anything related to the chip view to prevent leaks. */ @VisibleForTesting fun tearDownChipView() = chipView?.getTimeView()?.stop() private fun View.getTimeView(): Chronometer? = this.findViewById(R.id.ongoing_call_chip_time) private data class CallNotificationInfo( val key: String, val callStartTime: Long, Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt +6 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith Loading Loading @@ -117,6 +118,11 @@ class OngoingCallControllerTest : SysuiTestCase() { .thenReturn(PROC_STATE_INVISIBLE) } @After fun tearDown() { controller.tearDownChipView() } @Test fun onEntryUpdated_isOngoingCallNotif_listenerNotified() { notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry()) Loading