From 7e3f39706c2d8ae74ee5613f582daa2946dcc5d4 Mon Sep 17 00:00:00 2001 From: linyuh Date: Tue, 20 Feb 2018 13:07:49 -0800 Subject: Initialize/Update the UI of New{CallLog|Voicemail}Fragment iff the fragment is truly visible. Bug: 73347270 Test: NewCallLogFragmentTest, NewVoicemailFragmentTest PiperOrigin-RevId: 186350076 Change-Id: Ib3e320f02a02795acb8b7d2017818b36df3dd49d --- .../voicemail/listui/NewVoicemailFragment.java | 60 +++++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) (limited to 'java/com/android/dialer/voicemail') diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java b/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java index 8d724afe3..9296d04e7 100644 --- a/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java +++ b/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java @@ -80,22 +80,66 @@ public final class NewVoicemailFragment extends Fragment implements LoaderCallba public void onResume() { super.onResume(); - LogUtil.enterBlock("NewCallLogFragment.onResume"); + boolean isHidden = isHidden(); + LogUtil.i("NewVoicemailFragment.onResume", "isHidden = %s", isHidden); + + // As a fragment's onResume() is tied to the containing Activity's onResume(), being resumed is + // not equivalent to becoming visible. + // For example, when an activity with a hidden fragment is resumed, the fragment's onResume() + // will be called but it is not visible. + if (!isHidden) { + onFragmentShown(); + } + } + + @Override + public void onPause() { + super.onPause(); + LogUtil.enterBlock("NewVoicemailFragment.onPause"); + + onFragmentHidden(); + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + LogUtil.i("NewVoicemailFragment.onHiddenChanged", "hidden = %s", hidden); + if (hidden) { + onFragmentHidden(); + } else { + onFragmentShown(); + } + } + + /** + * To be called when the fragment becomes visible. + * + *

Note that for a fragment, being resumed is not equivalent to becoming visible. + * + *

For example, when an activity with a hidden fragment is resumed, the fragment's onResume() + * will be called but it is not visible. + */ + private void onFragmentShown() { registerRefreshAnnotatedCallLogReceiver(); - // TODO(zachh): Consider doing this when fragment becomes visible. CallLogComponent.get(getContext()) .getRefreshAnnotatedCallLogNotifier() .notify(/* checkDirty = */ true); } - @Override - public void onPause() { - super.onPause(); - - LogUtil.enterBlock("NewVoicemailFragment.onPause"); - + /** + * To be called when the fragment becomes hidden. + * + *

This can happen in the following two cases: + * + *

+ */ + private void onFragmentHidden() { unregisterRefreshAnnotatedCallLogReceiver(); } -- cgit v1.2.3